Descoperirile programatorului: Să începem cu Tesseract. Tesseract-Ocr în Visual Studio - recunoașterea părții textului Digitizare în loturi mici

Descoperirile programatorului: Să începem cu Tesseract. Tesseract-Ocr în Visual Studio - recunoașterea părții textului Digitizare în loturi mici

Tesseract-ocr este o bibliotecă gratuită pentru recunoașterea textului. Pentru a-l conecta, trebuie să conectați următoarele componente:
Leptonica - http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
Voi rămâne cu versiunea tesseract-ocr (on Narazi 3.02) - https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can=2&q=
Date din limba rusă - https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz
Puteți colecta totul singur prin achiziționarea codurilor de ieșire, altfel nu va trebui să vă faceți griji pentru asta.

După ce am creat un nou proiect, conectăm căile la fișierele lib și h. Scriu un cod simplu.
#include #include int main() ( tesseract::TessBaseAPI *myOCR = new tesseract::TessBaseAPI(); printf("Versiunea Tesseract-ocr: %s\n", myOCR->Version()); printf("Versiunea Leptonica: %s \n", getLeptonicaVersion()); if (myOCR->Init(NULL, "rus")) ( fprintf(stderr, "Nu s-a putut inițializa tesseract.\n"); exit(1); ) Pix *pix = pixRead ("test.tif"); myOCR->SetImage(pix); char outText; lstrcpy(outText, myOCR->GetUTF8Text()); ->Clear(); myOCR->End(); pixDestroy(&pix); return 0;

Includem fișiere lib:
libtesseract302.lib
libpt168.lib

Compilabil – programul este creat cu succes. De exemplu, să facem această poză:

Lansăm programul astfel încât informațiile să fie afișate în fișier (cu fragmente UTF-8 consola va fi în haos):
test > a.txt

În loc de fișierul de mai jos:
Versiunea Tesseract-ocr: 3.02
Versiunea Leptonica: leptonica-1.68 (14 martie 2011, 10:47:28)
Ieșire OCR:

După ce a înlocuit această expresie în (63), bachimo, este posibil
bagaucha semnal single-smooth modulat
Această adâncime de modulare este veche.
7 Oginaє XO) a semnalului primar fără centru
Nu se poate monitoriza pe un osciloscop, deci
Acest semnal nu este unul universal, ci un
— La începutul săptămânii trecute, Ale
cu modulare cu un singur strat se transformă într-un flexibil
Un semnal puternic de la aceeași sursă și iată
„și se manifestă într-un aspect și ton clare (ca în op.
„Păcat de o potrivire) pentru a aduce haosul în mințile puțin conștienți –
și alți descendenți.
6.4. "FORMULA COSTAS"
g y
Odată cu apariția OM în accesorii, reviste
În articole și monografii s-a dezbătut despre nutriție
care victorie dă o tranziție la amplitudine
modulare la single-smooth. Bulo vislovleno bogat,
gânduri super articulate. La începutul anilor 60, american
Lectură ricanică J. Costas a scris, scho, a văzut
Trev mare literatură de jurnal cu OM, vin
dezvăluind în statisticile pielii aprecierea energiei.
„Voi câștiga pentru totdeauna AM-două înainte,
multe zeci. Ca urmare, după instalarea,
-care este câștigul, ce este indicat în statisticile skin, zi-
setați aproximativ (Z-K-I!) dB, de M-număr zi- ' g
› autorii acestui articol.
E, 11 Deoarece această căldură este inexactă, este încă corectă -
Notele se remarcă prin diversitatea care
; lectii. În plus, diverși autori au pregătit
Am creat egalitate în minți diferite și în moduri diferite
Nyomu trebuia să aibă un vigrash energic, miroase atât de mult
„Au existat deja o mulțime de grațieri aleatorii. 4"
„Axa se aplică deyakikh mirkuvan. ",
1. În caz de urgență AM, este important să suportați tensiunea

Teseract- o platformă gratuită pentru recunoașterea optică a textului, pe care Google a oferit-o lumii în 2006. Dacă scrieți software pentru recunoașterea textului, atunci, în mod melodios, ați fost nevoit să apelați la serviciile acestei biblioteci dificile. Și dacă ea nu s-a înțeles cu textul tău, atunci vei fi lipsit de o opțiune - învață să-l citești. Procesul este complex și nu este evident, dar uneori cu efecte magice directe. Descriere originală. Poate am nevoie de o zi întreagă ca să înțeleg toate acestea, așa că aici vreau să salvez, promit, cea mai inteligentă opțiune. Deci, să te ajuți pe tine și pe ceilalți să treci pe această cale mai devreme decât mai târziu.

0. De ce avem nevoie

  • Tesseract este mai bun.
Biblioteca compilată este pentru Windows (puteți descărca programul de instalare din depozitul oficial) și pentru Linux. Pentru majoritatea distribuțiilor Linux, puteți instala tesseract pur și simplu prin sudo apt-get install tesseract-ocr Am avut șansa să adaug următoarele pentru sistemul meu de operare elementar la modă:
gedit /etc/apt/sources.list
deb http://notesalexp.net/debian/precise/precise main
wget -O - http://notesalexp.net/debian/alexp_key.asc
apt-key add alex_key.asc
apt-get update
apt-get install tesseract-ocr
  • Imagine cu text pentru antrenament
Bazhano, pentru ca acesta să fie un text real, pe care apoi vom avea ocazia să-l recunoaștem. Este important ca simbolul din font să fie ascuțit în fragmentul scanat de cel puțin 5 ori și de cel mult - de 20 de ori. Formatul este tiff, fără relief, dar nu foarte original. Există spații clar marcate între toate simbolurile. Ne punem imaginea în următorul director și o numim în vedere<код языка>.<имя шрифта>.exp<номер>.tif. Imaginile pot să nu fie aceleași și pot diferi din cauza numărului fișierului numit. Formatul de denumire a fișierului este foarte important. Pentru fișierele cu nume incorecte, utilitățile pe care le vom câștiga vor fi latrate de segmentare. Pentru a cânta, este important să folosim limbajul sss și fontul eee. Acesta este modul în care fișierul care conține scanarea imaginii de antrenament se numește ccc.eee.exp0.tif

1. Creați și editați fișierul casetă
Pentru asta. Pentru a identifica caracterele din imagine și a atribui tipul lor UTF-8 caracterelor de text, utilizați fișierele casete. Acestea sunt fișiere text originale în care simbolul pielii este reprezentat printr-un rând cu simbolul și coordonatele rectului în pixeli. Inițial, fișierul este generat de un utilitar cu pachetul tesseract:
tesseract ccc.eee.exp0.tif ccc.eee.exp0 batch.nochop makebox
a extras fișierul ccc.eee.exp0.box din directorul de flux. Să aruncăm o privire până atunci. Simbolurile de la începutul rândului seamănă foarte mult cu simbolurile din fișier? Astfel, nu este nevoie să forțezi nimic, poți dormi liniștit. În versiunea noastră, toate simbolurile nu pot fi evitate nici în esență, nici în cantitate. Tobto. tesseract cu un dicționar pentru minți fără a recunoaște nu numai simbolurile, ci și a acorda atenție acțiunilor lor pentru două sau mai multe. Este posibil ca unele dintre simbolurile noastre să „lipe împreună”, adică. Dacă atingeți caseta, aceasta va fi recunoscută ca una. Totul trebuie corectat, mai întâi mergi mai departe. Lucrarea este plictisitoare și dificilă, dar, din fericire, există puține utilități terțe. De exemplu, am folosit pyTesseractTrainer-1.03. Când deschideți imaginea, fișierul cutie din aceste nume va fi extras în sus.
Azi a trecut... Închideți pyTesseractTrainer din profundă satisfacție (chiar dacă nu ați uitat să salvați rezultatul, nu?) și aveți fișierul box corect. Acum poți trece la faza ofensivă.

2. Train Tesseract
tesseract ccc.eee.exp0.tif ccc.eee.exp0 nobatch box.train
Căutăm o mulțime de blob-uri, la fel ca simbolul „Found 105 good blobs”. Deoarece numărul este semnificativ mai mare pentru numărul de simboluri care sunt calculate, există șansa ca antrenamentul în ansamblu să fi eșuat. În caz contrar, ne întoarcem pe cob. Ca succesor al acestui document, aveți fișierul ccc.eee.exp0.tr

3. Puteți forma caractere
unicharset_extractor ccc.eee.exp0.box
Este posibil să selectați un set de caractere din fișierul unicharset într-un director de flux, unde fiecare caracter și caracteristicile sale sunt afișate în rândul alăturat. Aici personalul nostru va verifica și corecta caracteristicile simbolurilor (o altă coloană pentru dosar). Pentru literele mici ale alfabetului punem semnul 3, pentru literele mari 5, pentru semnele divizionare 10 pentru numerele 8, orice altceva (cum ar fi +=-) este marcat cu 0. Hieroglifele chineze și japoneze sunt marcate cu 1. Asigurați-vă că toate semnele sunt marcate. plasat corect, deci sunt multe ore pe care nu le voi împrumuta de la tine.

4. Descrieți stilul fontului
Creăm fișierul ccc.font_properties într-un singur rând: eee 0 0 0 0 0. Aici scriem mai întâi numele fontului, apoi numărul 1 sau 0 indică vizibilitatea simbolurilor în stil (cum ar fi italic bold fixed serif fraktur). Colecția noastră nu are suficiente stiluri, așa că totul este redus la zero.

5. Grupuri de figuri, prototipuri și alte magie
Pentru a începe mai departe, va trebui să facem cel puțin încă trei operații. Puteți încerca să înțelegeți schimbarea lor din descrierea oficială, nu am avut timp să fac asta :). Doar spune:
shapeclustering -F ccc.font_properties -U unicharset ccc.eee.exp0.tr
...apare fișierul modelabil
și apoi:
mftraining -F ccc.font_properties -U unicharset -O ccc.unicharset ccc.eee.exp0.tr
... ștergerea fișierelor ccc.unicharset, inttemp, pffmtable
Și, în sfârșit:
cntraining ccc.eee.exp0.tr
...sterge fisierul normproto.

6. Dicționare
Teoretic, completarea dicționarelor de cuvinte care sunt adesea vikorista (și cuvintele vzagali) îl va ajuta pe Tesseract să vă înțeleagă mâzgălile. Dicționare vikorystuvati neobo'yazkovo, ale yakscho raptom want, robimo file frequent_words_list și words_list în care se încadrează (de pe un rând nou) sunt aparent des folosite și cuvintele limbii.
Pentru a converti aceste liste în formatul corect, convertiți:
wordlist2dawg frequent_words_list ccc.freq-dawg ccc.unicharset

lista de cuvinte2dawg lista de cuvinte ccc.word-dawg ccc.unicharset

7. Fișierul mister rămas
Eu sunt yomu - unicharambigs. Ideea este de a crește respectul lui Tesseract pentru simboluri similare. Tse fisier textÎn rândul de piele cu separatoare, tabelul descrie perechi de rânduri care pot fi confundate în timpul recunoașterii. Voi folosi în documentație formatul fișierului de descriere, care nu va fi necesar, și îl voi lăsa gol.

8. Restul echipei
Toate fișierele trebuie redenumite astfel încât numele lor să înceapă cu numele filmului. Tobto. În directorul nostru vom pierde următoarele fișiere:

ccc.box
ccc.inttemp
ccc.pffmtable
ccc.tif
ccc.font_properties
ccc.normproto
ccc.formabil
ccc.tr
ccc.unicharset

Eu, nareshti, vikonuemo:
combine_tessdata ccc.
(!) Speck obov'yazkova. Ca urmare, fișierul ccc.traineddata este șters, ceea ce ne va permite să recunoaștem noua noastră limbă misterioasă.

9. Să verificăm ce s-a întâmplat cu acesta :)
Acum să încercăm să ne recunoaștem imaginea din Tesseractul deja învățat:
sudo cp ccc.traineddata /usr/share/tesseract-ocr/tessdata/
tesseract ccc.tif ieșire -l ccc
Acum putem vedea în output.txt că este radio (sau vom fi confuzi, în funcție de rezultat).

Articolul examinează procedura de pornire a sistemului rusesc open source OCR Tesseract, care este dezvoltat de Hewlett-Packard.

[Vlasov Igor (igorvlassov at narod dot ru)]

Recent făceam OCR pentru un proiect în limba engleză. Am învățat temeinic despre centrul local de servicii lingvistice. Nu am descoperit un OCR gratuit, o recunoaștere unică a limbii materne. Apoi am folosit proiectul tesseract. Acesta este un OCR comercial extrem de funcțional, dezvoltat de Hevlet Packard. Acum se extinde mai întâi sub licența Apache v.2. În caz contrar, puteți încerca să învățați orice limbă nouă pe care încercăm să o dezvoltăm. Ei bine, să citim manualul numit TrainingTesseract:

Primul caracter poate fi atribuit aceluiași set de caractere, care vor fi selectate la crearea unui fișier text sau fișier procesor de cuvinte Cu funde.

La ora pregătirii fișierului de antrenament, urma de memorie este următoarea:

    Este necesar un număr minim de aplicații pe simbolul pielii. 10 este bun sau 5 este suficient pentru simbolurile rare, dar pentru simbolurile care apar frecvent aveți nevoie de cel puțin 20;

    Nu este posibil să grupați caracterele non-alfabetice dintr-o dată pentru a face textul mai realist, de exemplu:
    în hash-urile zilei există citrice vii și încă o copie falsă. 0123456789 !@#$%^&(),.{}<>/? - E lacom. Mai frumos:Khashchakh (pivdnya) are citrice vii, nu! ale?<фальшивый> $3456.78 copie#90 /roșie" 12,5%

    Ar fi rău să întindeți textul pentru a crește și mai mult intervalele dintre rânduri și dintre caractere;

    datele de antrenament trebuie plasate pe o parte;

    Nu este nevoie să lucrați la mai multe dimensiuni, suficient pentru o dimensiune a fontului de 10. Dacă înălțimea textului este mai mică de 15 pixeli, trebuie să munciți din greu sau să măriți imaginea până când este recunoscută.

Va trebui apoi să aplicați și să eliminați sau să utilizați o altă metodă pentru a captura imaginea paginii de antrenament. Posibil până la 32 de pagini de vikoristano. Profitați la maximum de paginile dvs. amestecând fonturi și stiluri, inclusiv îndrăzneț și elegant.

Voi încerca să elaborez câteva idei pentru fontul Thorndale AMT, care pe desktopul meu care rulează SUSE10 OpenOffice seamănă foarte mult cu Times New Roman pe Windows. Deci, voi crea următorul fișier și voi adăuga text despre citrus fontfile.odt, altul, îl scanez și îl salvez în alb-negru BMP fontfile.bmp.

Atacul se face pe dosarul cu coordonatele speciilor ortocutanate, care au simbolul pielii. Din fericire, tesseract poate genera un fișier în formatul necesar, deși setul de caractere nu va fi același cu al nostru. Apoi va trebui să editați fișierul manual, introducând caracterele corecte. Ozhe, timid:

tesseract fontfile.bmp fontfile batch.nochop makebox

Ca rezultat, este creat fișierul fontfile.txt, care trebuie redenumit în fontfile.box

Ce am acolo:

M 85 132 111 154

Z 114 137 130 154

X 133137150154

{ 170 130 180 162

m 186 137 210 154

r 214 137 228 154

a 233 137 248 154

} 254 130 264 162

M 284 137 306 154

Acum vine partea cea mai importantă - trebuie să editați acest fișier într-un editor, în care puteți înlocui caracterele incorecte cu cele necesare. Sunt vicoristă Kate.

Ops, se pare că a fost înlocuit cu două simboluri:

M 85 132 111 154

În acest caz, este necesar să descrieți frezele drepte în următoarea ordine:

    Primul număr (stânga) este cel puțin 2 rânduri (67)

    Celălalt număr (de jos) este cel puțin 2 rânduri (132)

    Al treilea număr (dreapta) este maximum 2 rânduri (111)

    Al patrulea număr (sus) este maximul din 2 rânduri (154)

Otje: 67 132 111 154

Notă: Sistemul de coordonate utilizat pentru acest fișier începe la (0,0) și este direct de jos în sus și stânga la dreapta.

Puff, cred că o voi corecta. Acum lansăm tesseract în modul inițial:

tesseract fontfile.bmp junk nobatch box.train

Și sunt uimit de stderr (sau tesseract.log pe Windows). Aceasta înseamnă milă sub formă de FATALITATE,

Aceasta înseamnă că tesseract nu cunoaște simbolul exact specificat în fișierul de coordonate. am mila:

APPLY_BOXES: FATALITY - 0 tabel de trecere cu mouse-ul „%” - ținta este 2

Casete citite din boxfile: 89

Bloburi etichetate inițial: 87 în 3 rânduri

Defecțiuni ale cutiei detectate: 2

Bloburi duped pentru reechilibrare: 0

„%” poate avea cele mai puține mostre: 0

Total cuvinte neetichetate: 1

Cuvinte finale etichetate: 87

Generarea datelor de antrenament

TRAINING ... Nume font = UnknownFont.

Date de antrenament generate pentru 87 de blob-uri

Cu toate acestea, a fost generat fontfile.tr. Acum trebuie să creați cât mai multe simboluri dacă doriți să repetați această frază de cinci ori.

În mod ideal, aș repeta această procedură pentru diferite fonturi și aș selecta o grămadă de fișiere diferite, apoi aș crea prototipuri folosind comenzi suplimentare precum:

mftraining fontfile_1.tr fontfile_2.tr ...

Ca rezultat, se găsesc 2 fișiere: inttemp (prototipuri de formulare) și pffmtable , apoi

cntraining fontfile_1.tr fontfile_2.tr ...

creați un fișier normproto (prototipuri pentru normalizarea simbolurilor?).

Lucrez la unul dintre fișierele mele. E în regulă. Acum trebuie să specificați tesseract" pentru caracterele anonime care pot fi afișate. Utilizați comanda unicharset_extractor pentru a genera fișierul unicharset:

unicharset_extractor fontfile_1.box fontfile_2.box ...

Robimo. În fișierul extras este necesar să se indice tipul caracterului din spatele măștii, masca este după cum urmează: pentru o literă - 1, pentru o literă mică - 1, pentru o literă mare - 1, pentru un număr -1, altfel 0.

De exemplu,

b este o literă mică. Її masca 0011 sau shestnadtyatkova 3

; - nu o literă, nu un număr. Masca = 0

7 este doar un număr. Mască 1000 sau șaisprezece 8.

L este o literă mare. Mască 0101 sau shestnadtyatkova 5

Toată literatura mea este mică. Îmi schimb masca la 3.

Acum trebuie să luați două liste, una - din stânga, care adesea se suprapun, cealaltă - din cealaltă stângă și să le convertiți în format DAWG folosind un alt utilitar:

lista de cuvinte2dawg lista_cuvintelor frecvente freq-dawg

lista de cuvinte2dawg lista de cuvinte word-dawg

Am început prin a-mi umple pur și simplu fiecare piele cu 5 litri de apă.

Al treilea fișier, user-words, este gol.

Fișierul rămas care trebuie creat se numește DangAmbigs. Acesta descrie efectele înlocuirii aleatorii a unui fișier cu altul, de exemplu

Primul număr este numărul de caractere din primul grup, al 2-lea număr este numărul de caractere din al 2-lea grup.

Acest rând arată că 1I poate fi uneori recunoscut incorect ca Ш.

Acest fișier poate fi, de asemenea gol.

Acum totul este adunat deodată. Filey

    frecvență-dawg

    cuvânt-dawg

    cuvinte-utilizator

    inttemp

    normproto

    pffmtable

    unicharset

    Dang Ambigs

furnizat cu prefixul rus și plasat în același loc cu dicționarele, în loc de /usr/local/share/tessdata

Asta este!!!

Încercăm să recunoaștem un anumit fișier. Îl voi încerca pe cel al meu despre citrice pentru stiule:

tesseract image.bmp output -l rus

Axa care mi-a venit în minte:

în chіaakh (pіvdnya) zhshl-(buv) tsstrus, deci! ale?

<(1ьалвьшвый>3456,78 USD exemplarul #90

kapelvsshnm/pomshdor" 12.5th

Desigur, nu este grozav, dar pentru prima dată, iar lista de cuvinte și vocabular puține, cred, este proastă!

Vlasov Igor (igorvlassov at narod dot ru) - Tesseract rus

Aveam nevoie să îmbunătățim procesarea documentelor companiei noastre pentru a crește viteza de procesare a documentelor pe hârtie. În acest scop, am decis să dezvoltăm un program de soluții bazat pe una dintre bibliotecile OCR (recunoaștere optică a caracterelor).

OCR sau recunoaștere optică text, adică conversia mecanică sau electronică a imaginii textului de tip overhand într-una de mașină. OCR este o metodă de digitizare a altor texte, astfel încât să fie posibilă salvarea, editarea, editarea și editarea în procese automate precum calculul cognitiv, traducerea automată și analiza inteligentă a datelor.

În plus, OCR este promovat ca metodă de introducere a informațiilor din documente pe hârtie (inclusiv înregistrări financiare, cărți de vizită, facturi și multe altele).

Înainte de a implementa programul în sine, am efectuat o analiză detaliată a celor mai populare trei biblioteci OCR pentru a identifica cea mai potrivită opțiune pentru dezvoltarea sarcinilor noastre.

Am analizat trei dintre cele mai populare biblioteci OCR:

- Google Text Recognition API

API-ul Google Text Recognition

Google Text Recognition API este un proces pentru detectarea textului din imagini și fluxuri video și recunoașterea textului care se află în acesta. Odată detectat, dispozitivul de recunoaștere afișează textul real pe patch-ul de piele și îl descompune în cuvinte și rânduri. Afișează textul în diferite limbi (franceză, germană, engleză etc.) în funcție de ora reală.

Varto reține că zagalomul este dat la OCR odată cu livrarea comenzilor. Am pierdut capacitatea de a recunoaște text atât în ​​timp real, cât și în gata să descrie documente text. În timpul analizei acestei biblioteci, am identificat atât avantaje, neajunsuri, cât și neajunsuri.

Avantaje:

— Posibilitatea de recunoaștere a textului în timp real

- Posibilitatea recunoașterii textului din imagini;

- Dimensiunea redusă a bibliotecii;

- Viteză mare de recunoaștere.

Nedoliky:

Marime mare fișiere din datele anterioare (~30Mb).

Teseract

Tesseract este o bibliotecă OCR cu un cod sursă deschis pentru diverse sisteme de operare. Є fără pisică software de securitate, lansat sub licența Apache, versiunea 2.0, acceptă o varietate de limbi.

Dezvoltarea Tesseract a fost finanțată de Google Din 2006, când era una dintre cele mai precise și eficiente biblioteci OCR cu un cod de ieșire clar.

Chiar dacă nu era acolo în acel moment, nu am fost deloc mulțumiți de rezultatele stagnării Tesseract, pentru că Biblioteca este extrem de voluminoasă și nu permite recunoașterea textului în timp real.

Avantaje:

- Poate fi deschis codul de ieșire;

— Aparent, este ușor să înveți OCR pentru a recunoaște fonturile necesare și a crește bogăția informațiilor care sunt recunoscute. După dezvoltarea extinsă a bibliotecii, intensitatea rezultatelor recunoașterii a crescut rapid.

Nedoliky:

- Precizie insuficientă a recunoașterii, care este limitată de formarea și dezvoltarea algoritmului de recunoaștere;

— Pentru a recunoaște textul în timp real, este necesară o prelucrare suplimentară a imaginii;

— Precizia recunoașterii este scăzută atunci când căutați fișiere standard cu date despre fonturi, cuvinte și simboluri.

Anyline

Anyline oferă o platformă SDK bogată care permite comercianților să integreze cu ușurință funcțiile OCR ale suplimentului. Această bibliotecă OCR ne-a oferit oportunitatea de a personaliza parametrii de recunoaștere și datele modelului pentru aplicații specifice. Vă rugăm să rețineți că biblioteca este plătită și este destinată utilizării comerciale.

Avantaje:

- Finalizarea configurare simplă recunoașterea fonturilor necesare;

- Recunoașterea textului în timp real;

- Reglarea mai ușoară și mai manuală a parametrilor de recunoaștere;

- Biblioteca poate recunoaște coduri de bare și coduri QR;

— Oferim module gata făcute pentru îndeplinirea diferitelor sarcini.

Nedoliky:

- Rata scazuta de recunoastere;

— Pentru a obține rezultate satisfăcătoare, este necesar să ajustați fonturile pentru recunoaștere.

În timpul analizei, pentru a ne îmbunătăți sarcinile, ne-am concentrat pe API-ul Google Text Recognition, care oferă viteză mare de lucru, configurare ușoară și rezultate ridicate de recunoaștere.

Soluția extinsă vă permite să scanați documente pe hârtie, să le digitizați automat și să le salvați într-o singură bază de date. Acuratețea informațiilor care sunt recunoscute se apropie de 97%, ceea ce este un rezultat foarte bun.

Pentru implementarea unui sistem intern fragmentat (inclusiv procesarea documentelor, crearea și schimbul acestora între departamente și altele) a fost accelerată cu 15%.

De îndată ce o decizie este gata, nu are sens în prezența poliției și a bicicletelor. Autorii criptolockerului, care au folosit CryptoAPI :), și-au exprimat un cinism deosebit. De asemenea, este corect ca sarcina noastră actuală să descifrem captcha (în scopuri de iluminare, evident). Să lansăm Visual Studio!

introduce

Întregul proces al muncii viitoare poate fi împărțit în mod inteligent în mai multe etape:

  • descărcați imagini;
  • eliminați zgomotul și alte tulburări;
  • vezi zone de conectivitate (simboluri), salvează-le;
  • învață neuroștiințe sau creează un dicționar;
  • recunoaşte.

Cine ne poate ajuta:

  • AForgeNet - biblioteci steaua computeruluiși piesa de inteligență;
  • Tesseract – program pentru recunoașterea textului;
  • Fanndotnetwrapper - rețeaua neuronală .NET a FANN;
  • Algoritmul de căutare a conexiunii CCLA de Omar Gameel Salem

Lansat pe dvd.site

Nu uitați să descărcați subiectul, veți avea nevoie de el când citiți acest articol. Același malware, același extremism - doar știință pură, doar tehnologie OCR, doar hardcore!

Etapa pregătitoare

Lansăm Visual Studio și creăm un nou proiect de fereastră folosind C# meu. Deschideți-l în explorator pentru a copia fișierele necesare acolo.


Pentru a începe rețeaua neuronală FANN, este creată o parte a codului de la Tesseract, principalul lucru constă în faptul că creăm un fișier text train.tr, în care primul rând conține un număr de imagini, un număr de puncte pe pielea (lățimea înmulțită cu înălțimea) și un număr de ieșiri (litru, după cum ghicim). Imaginea în sine suferă o binarizare obligatorie pentru a vedea doar două niveluri ale punctului de piele (1 - negru, 0 - culoare albă) și este salvată în continuare în același fișier pentru toate rândurile ulterioare. Pentru a face din ce în ce mai ușor de analizat diferențele din spatele creării fișierelor ann, a fost creat un fișier text suplimentar CONFIG.txt. Este format dintr-un rând și indică numărul de puncte și ieșiri din valorile lor, așa că dacă executați o verificare captcha pe un alt fișier ann, nu va funcționa.

String a = File.ReadAllText(SaveFilesPath + "CONFIG.txt"); șir b = a.Split(" "); int SumPix = Convert.ToInt32(b); int Outpt = Convert.ToInt32(b.Length); uint layers = ((uint)SumPix, (uint)layerS, (uint)Outpt); net.CreateStandardArray(straturi); net.RandomizeWeights(-0,1, 0,1); net.SetLearningRate(0,7f); TrainingData data = New TrainingData(); data.ReadTrainFromFile(SaveFilesPath + "train.tr"); net.TrainOnData(date, 1000, 0, 0.001f); net.Save(SaveFilesPath + "FANNLearning.ann");

Putem selecta configurația, citiți parametrii, numărul de straturi (straturi) recomandat de Wikipedia este setat la 120, totul a fost rezolvat sau căutat în Merezhi. Lichidul începe să se întindă din cauza dificultății de urcare și așa cum este scris mai sus. De exemplu, i7-4702MQ cu 6500 de imagini cu un nucleu durează 20-30 de minute.

Krok are şaizeci de ani. Rozpiznavannya

În etapa finală au fost implementate două abordări, dar cea care a început a fost realizată. Tesseract 3.02 și FANN sunt situate în partea din stânga jos a ferestrei principale. Prima este să căutați engleză (selectați simboluri din listă), rusă, matematică și dicționarul Koristuvach. Căutarea în dicționar este căutată automat și toate cele disponibile sunt afișate în sfatul instrument. Celălalt recunoaște textul din spatele butonului FANNOCR și afișează rezultatul analizei pentru simbolul selectat în jurnal (partea stângă a ferestrei). Este ușor să vă minunați de ce circuitele neuronale au luat o întorsătură atât de diferită. Să aruncăm o privire la modul în care funcționează rețeaua neuronală.

Șir privat OCR(Bitmap img) ( ... ( int whx = img.Width * img.Height; if (SUMMPIX != whx) ( /* Eroare de afișare, numărul de pixeli nu se potrivește */) intrare dublă = GetPix (img) ; rezultat dublu = net.Run(input); if (tempanswer.Length != result.Length) ( /* Afișează rezultatul, mărimea iesiri */) int maxN = FindMax(rezultat); răspuns = Convert.ToString(temprăspuns); if (ToLogEvent != null) ToLogEvent(rezultat, răspuns temp, răspuns); ... ) )

Am luat imaginea în metoda publică, am implementat net.CreateFromFile(SaveFilesPath + "FANNLearning.ann") și am citit fișierul de configurare, tempanswer - acesta este schimbat, egal cu b, în ​​el literele sunt suprascrise, așa cum auzim. Un număr egal de pixeli este înregistrat în matrice și trecuți prin procesul ann, căutând cea mai mare valoare de evadare posibilă, apoi trimitem rezultatul la podea, rotind o ieșire și eliminând litera atribuită acesteia.

Să discutăm rezultatele

Rezultatele testelor mele au depins foarte mult de numărul și cantitatea de imagini pentru început, și în cazul rețelei neuronale FANN – și de numărul de ieșiri. Captcha medie care a fost filtrată are doar ~80% de recunoaștere corectă, așa că există multă zăbovire aici din cauza plictiselii - ceea ce înveți, respingi. Golovne – tse pratsyuє.

Visnovok

Tot ceea ce este descris în articol poate fi rezumat pentru o varietate mai mare de alte sarcini. De exemplu, la mai puțin de o oră mai târziu caut informații pentru statistici. analiza raportului recunoașterea imaginii unei mașini într-o parcare. Folosește-ți imaginația și Visual Studio! 🙂

 

 

Tse tsikavo: