Contacte

Instruire Tesseract. Tesseract-Ocr în Visual Studio - Recunoașteți o pagină de text. Digitalizarea imaginilor pe rând

Tesseract este o platformă OCR gratuită pe care Google a donat-o comunității în 2006. Dacă scrieți software OCR, atunci probabil că a trebuit să apelați la serviciile acestei puternice biblioteci. Și dacă ea nu s-a descurcat cu textul tău, atunci ai o singură ieșire - să o înveți. Acest proces este destul de complicat și este plin de acțiuni nu evidente și uneori chiar de-a dreptul magice. Există o descriere originală. Mi-a luat aproape o zi întreagă să-i înțeleg adâncimea, așa că aici vreau să salvez, sper, o versiune mai ușor de înțeles a acesteia. Așadar, pentru a te ajuta pe tine și pe ceilalți să mergi mai repede data viitoare.

0. De ce avem nevoie

  • Tesseract în sine.
Există ansambluri ale acestei biblioteci sub Windows (puteți descărca programul de instalare din depozitul oficial) și sub Linux. Pentru majoritatea distribuțiilor Linux, tesseract poate fi instalat pur și simplu prin sudo apt-get install tesseract-ocr, pentru sistemul meu de modă elementar, a trebuit să adaug o sursă:
gedit /etc/apt/sources.list
deb http://notesalexp.net/debian/precise/ precise main
wget -O - http://notesalexp.net/debian/alexp_key.asc
apt-key adaugă alexp_key.asc
apt-get update
apt-get install tesseract-ocr
  • Imagine cu text pentru antrenament
Este de dorit ca acesta să fie un text real, care va trebui apoi recunoscut. Este important ca fiecare caracter al fontului să apară în fragmentul scanat de cel puțin 5 ori, de preferință de 20 de ori. Format Tiff, fără compresie, de preferință nu cu mai multe pagini. Trebuie să existe spații clar distincte între toate personajele. Ne punem imaginea într-un director separat și o numim ca<код языка>.<имя шрифта>.exp<номер>.tif. Este posibil să existe mai multe imagini și acestea ar trebui să difere doar prin numărul din numele fișierului. Formatul de denumire a fișierelor este foarte important. Fișierele cu nume incorecte ale utilitarului pe care le vom folosi vor fi abuzate de erori de segmentare etc. Pentru a fi specifici, vom presupune că studiem limba CCC și fontul eee. Așa numim fișierul cu scanarea eșantionului de instruire ccc.eee.exp0.tif

1. Creați și editați un fișier casetă
Pentru asta. pentru a marca caracterele din imagine și pentru a seta corespondența lor la utf-8 caractere în caseta de text sunt utilizate fișierele. Acestea sunt fișiere text obișnuite în care fiecare caracter corespunde unui șir cu caracterul și coordonatele dreptunghiului în pixeli. Inițial, fișierul este generat de utilitar din pachetul tesseract:
tesseract ccc.eee.exp0.tif ccc.eee.exp0 batch.nochop makebox
a primit fișierul ccc.eee.exp0.box în directorul curent. Să aruncăm o privire. Caracterele de la începutul liniei se potrivesc exact cu caracterele din fișier? Dacă da, atunci nu este nevoie să antrenezi nimic, poți dormi liniștit. În cazul nostru, cel mai probabil simbolurile nu vor coincide nici în esență, nici în cantitate. Acestea. tesseract cu dicționarul implicit nu a recunoscut nu numai caractere, ci a numărat și unele dintre ele ca două sau mai multe. Poate că unele dintre personajele noastre vor „rămâne împreună”, adică va cădea în caseta generală și va fi recunoscută ca una. Toate acestea trebuie corectate înainte de a trece mai departe. Lucrarea este obositoare și minuțioasă, dar din fericire există o serie de utilități terță parte... De exemplu, am folosit pyTesseractTrainer-1.03. Deschidem o imagine cu ea, va extrage un fișier casetă cu același nume.
A trecut o jumătate de zi ... Închizi pyTesseractTrainer cu un profund sentiment de satisfacție (nu ai uitat să salvezi rezultatul, nu?) Și ai fișierul corect. Acum puteți trece la pasul următor.

2. Antrenează Tesseract
tesseract ccc.eee.exp0.tif ccc.eee.exp0 nobatch box.train
Primim o mulțime de erori, dar căutați la final ceva de genul „S-au găsit 105 blob-uri bune”. Dacă cifra este semnificativ mai mare decât numărul de simboluri „studiate”, atunci există șansa ca antrenamentul în ansamblu să aibă succes. În caz contrar, ne întoarcem la început. Ca urmare a acestui pas, aveți un fișier ccc.eee.exp0.tr

3. Extrageți setul de caractere
unicharset_extractor ccc.eee.exp0.box
Obținem un set de caractere sub forma unui fișier unicharset în directorul curent, unde fiecare caracter și caracteristicile sale sunt situate pe o linie separată. Aici sarcina noastră va fi să verificăm și să corectăm caracteristicile simbolurilor (a doua coloană din fișier). Pentru literele mici ale alfabetului setăm semnul 3, pentru 5 mare, pentru semnele de punctuație 10 pentru numerele 8, orice altceva (cum ar fi + = -) marcăm 0. Caracterele chinezești și japoneze le marcăm 1. De obicei, toate semnele sunt corecte, deci această etapă este o mulțime de timp, nu vă va lua.

4. Descrierea stilului fontului
Creați un fișier ccc.font_properties cu o singură linie: eee 0 0 0 0 0. Aici, mai întâi, scrieți numele fontului, apoi cu numărul 1 sau 0 marcați prezența simbolurilor stilului (respectiv, italic bold bold fix serif fraktur ). În cazul nostru, nu există stiluri, așa că lăsăm totul la zero.

5. Clustere de figuri, prototipuri și alte magii
Pentru studii suplimentare, trebuie să efectuăm încă trei operații. Puteți încerca să înțelegeți semnificația lor din descrierea oficială, nu am fost la înălțime :). Doar facem:
shapeclustering -F ccc.font_properties -U unicharset ccc.eee.exp0.tr
... va fi afișat formatul fișierului
și apoi:
mftraining -F ccc.font_properties -U unicharset -O ccc.unicharset ccc.eee.exp0.tr
... primește fișierele ccc.unicharset, inttemp, pffmtable
și, în sfârșit:
cntraining ccc.eee.exp0.tr
... primim fișierul normproto.

6. Dicționare
În teorie, completarea dicționarelor de cuvinte folosite frecvent (și cuvinte în general) ajută Tesseract să înțeleagă mâzgălelile tale. Nu este necesar să folosiți dicționare, dar dacă doriți brusc, facem fișiere Lista_cuvinte_ frecvente și Lista_cuvinte în care intrăm (fiecare cu linie nouă), respectiv, frecvent folosite și pur și simplu cuvinte ale limbii.
Pentru a converti aceste liste în formatul corect, procedați:
wordlist2dawg frequent_words_list ccc.freq-dawg ccc.unicharset

wordlist2dawg words_list ccc.word-dawg ccc.unicharset

7. Ultimul dosar misterios
Numele său este unicharambigs. În teorie, el ar trebui să atragă atenția lui Tesseract asupra unor personaje similare. Aceasta este fisier text fiecare linie delimitată de tabulat descrie perechi de linii care ar putea fi confundate atunci când sunt recunoscute. Formatul de fișier este complet descris în documentație, nu aveam nevoie de el și l-am lăsat gol.

8. Ultima comandă
Toate fișierele trebuie redenumite, astfel încât numele lor să înceapă cu numele limbii. Acestea. vom avea doar fișiere în director:

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

Și, în cele din urmă, executăm:
combine_tessdata ccc.
(!) Perioada este necesară. Drept urmare, obținem fișierul ccc.traineddata, care ne va permite să recunoaștem în continuare noul nostru misterios limbaj.

9. Verifică dacă a meritat :)
Acum să încercăm să recunoaștem eșantionul nostru folosind Tesseract deja antrenat:
sudo cp ccc.traineddata / usr / share / tesseract-ocr / tessdata /
tesseract ccc.tif output -l ccc
Acum căutăm în output.txt și ne bucurăm (sau ne întristăm, în funcție de rezultat).

Aveam nevoie să îmbunătățim fluxul de lucru în compania noastră, în primul rând, pentru a crește viteza de procesare a documentelor pe hârtie. Pentru aceasta, am decis să ne dezvoltăm soluție software bazat pe una dintre bibliotecile OCR (recunoaștere optică a caracterelor).

OCR, sau Recunoașterea optică a caracterelor, este conversia mecanică sau electronică a imaginilor textului tipărit în text automat. OCR este un mod de digitalizare a textului tipărit astfel încât să poată fi stocat electronic, editat, afișat și aplicat în procesele mașinii, cum ar fi calculul cognitiv, traducerea automată și extragerea datelor.

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

Înainte de a implementa aplicația în sine, am efectuat o analiză aprofundată a celor mai populare trei biblioteci OCR pentru a determina cea mai potrivită opțiune pentru rezolvarea problemelor noastre.

Am analizat cele mai populare trei biblioteci OCR:

- API de recunoaștere a textului Google

API Google Recunoaștere text

API-ul Google Recunoaștere text este procesul de detectare a textului din imagini și fluxuri video și de recunoaștere a textului pe care îl conține. Odată detectat, identificatorul identifică textul real din fiecare bloc și îl împarte în cuvinte și linii. Detectează text în diferite limbi (franceză, germană, engleză etc.) în timp real.

Trebuie remarcat faptul că, în general, acest OCR a făcut față sarcinii. Avem capacitatea de a recunoaște textul atât în ​​timp real, cât și din imagini gata făcute ale documentelor text. În timpul analizei acestei biblioteci, am identificat atât avantajele, cât și dezavantajele utilizării acesteia.

Avantaje:

- Abilitatea de a recunoaște textul în timp real

- Posibilitatea de a recunoaște textul din imagini;

- Dimensiunea redusă a bibliotecii;

- Viteză mare de recunoaștere.

Defecte:

- Dimensiuni mari de fișiere cu date instruite (~ 30Mb).

Tesseract

Tesseract este o bibliotecă OCR open source pentru diverse sisteme de operare... Este gratuit software, lansat sub licența Apache, versiunea 2.0, acceptă mai multe limbi.

Dezvoltarea Tesseract a fost finanțată de de la Google din 2006, moment în care a fost considerată una dintre cele mai precise și eficiente biblioteci OCR open source.

Oricum ar fi la acel moment, nu am fost foarte mulțumiți de rezultatele implementării Tesseract, deoarece biblioteca este incredibil de mare și nu permite recunoașterea textului în timp real.

Avantaje:

- Are un cod sursă deschisă;

- În consecință, este destul de ușor să instruiți OCR pentru a recunoaște fonturile dorite și pentru a îmbunătăți calitatea informațiilor recunoscute. După setări rapide rezultatele recunoașterii bibliotecii și calității învățării au crescut.

Defecte:

- Precizie de recunoaștere insuficientă, care este eliminată prin antrenarea și învățarea algoritmului de recunoaștere;

- Pentru recunoașterea textului în timp real, este necesară procesarea suplimentară a imaginii rezultate;

- Precizie redusă a recunoașterii atunci când utilizați fișiere standard cu date despre fonturi, cuvinte și simboluri.

Anyline

Anyline oferă un SDK multi-platformă care permite dezvoltatorilor să integreze cu ușurință funcționalitatea OCR în aplicații. Această bibliotecă OCR ne-a atras prin numeroasele posibilități de personalizare a parametrilor de recunoaștere și a modelelor furnizate pentru rezolvarea problemelor specifice aplicate. Trebuie remarcat faptul că biblioteca este plătită și este destinată utilizării comerciale.

Avantaje:

- Suficient configurare ușoară recunoașterea fonturilor necesare;

- Recunoașterea textului în timp real;

- Setarea ușoară și convenabilă a parametrilor de recunoaștere;

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

- Oferă module gata făcute pentru rezolvarea diverselor probleme.

Defecte:

- Viteză mică de recunoaștere;

- Pentru a obține rezultate satisfăcătoare, este necesar configurare inițială fonturi pentru recunoaștere.

Pe parcursul analizei, pentru a ne rezolva problemele, ne-am stabilit pe API-ul Google Recunoaștere text, care combină viteza mare de lucru, personalizare ușoarăși rezultate de recunoaștere ridicate.

Soluția pe care am dezvoltat-o ​​vă permite să scanați documente pe hârtie, să le digitalizați automat și să le salvați într-o singură bază de date. Calitatea informațiilor recunoscute este de aproximativ 97%, ceea ce reprezintă un rezultat foarte bun.

Datorită implementării sistemului dezvoltat, internul (inclusiv prelucrarea documentelor, crearea și schimbul acestora între departamente etc.) a fost accelerat cu 15%.

Mi-a trebuit să obțin valorile numerelor înregistrate. Numerele jefuit de pe ecran.

M-am gândit, ar trebui să încerc OCR? Am încercat Tesseract.

Mai jos vă voi spune cum am încercat să adaptez Tesseract, de ce l-am antrenat și ce s-a întâmplat. În proiectul de pe github, există un script cmd care automatizează procesul de instruire cât mai mult posibil și datele pe care am condus cursul. Într-un cuvânt, există tot ce aveți nevoie pentru a învăța Tesseract ceva util chiar de pe lilieci.

Instruire

Clonați depozitul sau descărcați arhiva zip (~ 6Mb). Instalați tesseract 3.01 de pe site-ul oficial. Dacă nu este deja acolo, atunci din subdirectorul zip-archive / distros.

Mergeți la folderul mostre, rulați montage_all.cmd
Acest script va crea imaginea finală mostre / total.png, nu puteți rula scriptul, deoarece L-am plasat deja în folderul meu rădăcină al proiectului.

De ce să te antrenezi?

Poate că rezultatul va fi bun chiar și fără antrenament? Sa verificam.
./exp1 - așa cum este> tesseract ../total.png total

Să punem rezultatul corectat într-un fișier model_total.txt pentru a compara rezultatele recunoașterii cu aceasta. Un asterisc marchează valori incorecte.

model_total.txt Recunoaştere
Mod implicit
27
33
39
625.05
9
163
1,740.10
15
36
45
72
324
468
93
453
1,200.10
80.10
152.25
158.25
176.07
97.50
170.62
54
102
162
78
136.50
443.62
633.74
24
1,579.73
1,576.73
332.23
957.69
954.69
963.68
1,441.02
1,635.34
50
76
168
21
48
30
42
108
126
144
114
462
378
522
60
240
246
459.69
456.69
198
61
255
27
33
39
525 05*
9
153*
1,740 10*
15
35*
45
72
324
455*
93
453
1,200 10*
50 10*
152 25*
155 25*
175 07*
97 50*
170 52*
54
102
152*
75*
135 50*
443 52*
533 74*
24
1,579 73*
1,575 73*
332 23*
957 59*
954 59*
953 55*
1,441 02*
1,535 34*
50
75*
155*
21
45*
30
42
105*
125*
144
114
452*
375*
522
50*
240
245*
459 59*
455 59*
195*
51*
255

erori de recunoaștere implicite

Se vede că există multe greșeli. Dacă te uiți atent, vei observa că punctul zecimal nu este recunoscut, numerele 6 și 8 sunt recunoscute ca 5. Te va ajuta antrenamentul să scapi de greșeli?

A face exerciții fizice

Instruirea Tesseract vă permite să-l instruiți să recunoască imagini ale textelor în forma în care îi veți hrăni imagini similare în timpul procesului de recunoaștere.
Transferați imagini de antrenament în tesseract, remediați erorile de recunoaștere și transferați aceste editări în tesseract. Și ajustează coeficienții din algoritmii săi pentru a preveni erorile pe care le-ați găsit în viitor.

Pentru a finaliza cursa de antrenament. / Exp2 - instruit> train.cmd

Care este procesul de instruire? Și este că teseractul procesează imaginea de formare și formează așa-numitul. casete de caractere - extrage caractere individuale din text prin crearea unei liste de dreptunghiuri de delimitare. Procedând astfel, el presupune că simbolul este limitat la dreptunghi.

Rezultatele acestei lucrări sunt scrise în fișierul total.box, care arată astfel:
2 46 946 52 956 0
7 54 946 60 956 0
3 46 930 52 940 0
3 54 930 60 940 0
3 46 914 52 924 0
9 53 914 60 924 0
6 31 898 38 908 0
2 40 898 46 908 0
5 48 898 54 908 0
0 59 898 66 908 0

Aici, în prima coloană este un simbol, iar în 2 - 5 coloane coordonatele colțului din stânga jos al dreptunghiului, înălțimea și lățimea acestuia.

Desigur, editarea manuală este dificilă și incomodă, așa că entuziaștii au creat utilități grafice pentru a facilita această activitate. Am folosit-o pe cea scrisă în JAVA.

După pornire. / Exp2 - instruit> java -jar jTessBoxEditor-0.6jTessBoxEditor.jar, deschideți fișierul. / Exp2 - instruit / total.png și fișierul. / Exp2 - instruit / total.box și dreptunghiurile definite deschiderea automată va fi suprapusă peste imaginea antrenamentului.

În stânga este conținutul fișierului total.box, în dreapta este imaginea de antrenament. Linia activă a fișierului total.box se află deasupra imaginii.

Casetele sunt afișate în albastru, iar caseta corespunzătoare liniei active este afișată în roșu.

Am corectat toate 5s greșite pentru 6s și 8s corecte, am adăugat linii cu definițiile tuturor punctelor zecimale din fișier și am salvat totalul.

După finalizarea editării, scriptul trebuie să funcționeze în continuare, este necesar să închideți jTessBoxEditor. În plus, toate acțiunile sunt efectuate automat de script fără intervenția utilizatorului. Scriptul scrie rezultatele antrenamentului sub codul ttn

Pentru a utiliza rezultatele antrenamentului pentru recunoaștere, trebuie să rulați tesseract cu comutatorul -l ttn
./exp2 - instruit /> tesseract ../total.png total-instruit -l ttn

Se poate vedea că toate cifrele au început să fie recunoscute corect, dar punctul zecimal încă nu este recunoscut în niciun fel.

model_total.txt Recunoaştere
Mod implicit
Recunoaştere
dupa antrenament
27
33
39
625.05
9
163
1,740.10
15
36
45
72
324
468
93
453
1,200.10
80.10
152.25
158.25
176.07
97.50
170.62
54
102
162
78
136.50
443.62
633.74
24
1,579.73
1,576.73
332.23
957.69
954.69
963.68
1,441.02
1,635.34
50
76
168
21
48
30
42
108
126
144
114
462
378
522
60
240
246
459.69
456.69
198
61
255
27
33
39
525 05*
9
153*
1,740 10*
15
35*
45
72
324
455*
93
453
1,200 10*
50 10*
152 25*
155 25*
175 07*
97 50*
170 52*
54
102
152*
75*
135 50*
443 52*
533 74*
24
1,579 73*
1,575 73*
332 23*
957 59*
954 59*
953 55*
1,441 02*
1,535 34*
50
75*
155*
21
45*
30
42
105*
125*
144
114
452*
375*
522
50*
240
245*
459 59*
455 59*
195*
51*
255
27
33
39
625 05*
9
163
1,740 10*
15
36
45
72
324
468
93
453
1,200 10*
80 10*
152 25*
158 25*
176 07*
97 50*
170 62*
54
102
162
78
136 50*
443 62*
633 74*
24
1,579 73*
1,576 73*
332 23*
957 69*
954 69*
963 68*
1,441 02*
1,635 34*
50
76
168
21
48
30
42
108
126
144
114
462
378
522
60
240
246
459 69*
456 69*
198
61
255

erori de învățare

Mărirea imaginii

Puteți să-l măriți în diferite moduri, am încercat două moduri: scala și redimensionarea

total-scaled.png (fragment) total-resized.png (fragment)
convert total.png total-scaled.png -scale "208x1920" convert total.png total-resized.png -resize "208x1920"

Deoarece imaginile simbol au crescut odată cu imaginile, datele de instruire de sub codul ttn sunt învechite. Prin urmare, am recunoscut în continuare ttn fără comutatorul -l.

Se poate vedea că în imagine total-scaled.png tesseract confundă 7-ku cu 2-ka și nu îl confundă pe total-resized.png. Punctul zecimal este corect identificat în ambele imagini. Recunoașterea imaginii total-resized.png este aproape perfectă. Există doar trei erori - un spațiu între cifrele din numerele 21, 114 și 61.

Dar această eroare nu este critică, deoarece poate fi fixat cu ușurință prin simpla eliminare a spațiilor de pe linii.

erori de recunoaștere total-scaled.png

erori de recunoaștere total-resized.png

model_total.txt Recunoaştere
Mod implicit
Recunoaştere
dupa antrenament
total-scaled.png total-resized.png
27
33
39
625.05
9
163
1,740.10
15
36
45
72
324
468
93
453
1,200.10
80.10
152.25
158.25
176.07
97.50
170.62
54
102
162
78
136.50
443.62
633.74
24
1,579.73
1,576.73
332.23
957.69
954.69
963.68
1,441.02
1,635.34
50
76
168
21
48
30
42
108
126
144
114
462
378
522
60
240
246
459.69
456.69
198
61
255
27
33
39
525 05*
9
153*
1,740 10*
15
35*
45
72
324
455*
93
453
1,200 10*
50 10*
152 25*
155 25*
175 07*
97 50*
170 52*
54
102
152*
75*
135 50*
443 52*
533 74*
24
1,579 73*
1,575 73*
332 23*
957 59*
954 59*
953 55*
1,441 02*
1,535 34*
50
75*
155*
21
45*
30
42
105*
125*
144
114
452*
375*
522
50*
240
245*
459 59*
455 59*
195*
51*
255
27
33
39
625 05*
9
163
1,740 10*
15
36
45
72
324
468
93
453
1,200 10*
80 10*
152 25*
158 25*
176 07*
97 50*
170 62*
54
102
162
78
136 50*
443 62*
633 74*
24
1,579 73*
1,576 73*
332 23*
957 69*
954 69*
963 68*
1,441 02*
1,635 34*
50
76
168
21
48
30
42
108
126
144
114
462
378
522
60
240
246
459 69*
456 69*
198
61
255
22*
33
39
625.05
9
163
1,240.10*
15
36
45
22*
324
468
93
453
1,200.10
80.10
152.25
158.25
126.02*
92.50*
120.62*
54
102
162
28*
136.50
443.62
633.24*
24
1,529.23*
1,526.23*
332.23
952.69*
954.69
963.68
1,441.02
1,635.34
50
26*
168
2 1*
48
30
42
108
126
144
1 14*
462
328*
522
60
240
246
459.69
456.69
198
6 1*
255
27
33
39
625.05
9
163
1,740.10
15
36
45
72
324
468
93
453
1,200.10
80.10
152.25
158.25
176.07
97.50
170.62
54
102
162
78
136.50
443.62
633.74
24
1,579.73
1,576.73
332.23
957.69
954.69
963.68
1,441.02
1,635.34
50
76
168
2 1*
48
30
42
108
126
144
1 14*
462
378
522
60
240
246
459.69
456.69
198
6 1*
255

Digitalizarea imaginilor pe rând

Ok, ce se întâmplă dacă doriți să digitalizați imagini una câte una în timp real?

Încerc unul câte unul.
./exp5 - unul câte unul> pentru / r% i în (* .png) do tesseract "% i" "% i"
Numerele din două și trei cifre nu sunt deloc detectate!

625.05
1740.10

Digitalizare în pachete mici

Și dacă trebuie să digitalizați imagini în loturi de mai multe imagini (6 sau 10 într-un lot)? Încerc zece.
./exp6 - ten in line> tesseract teninline.png teninline

Recunoscut și chiar fără un spațiu în numărul 61.

concluzii

În general, mă așteptam la cele mai proaste rezultate, de atunci fonturile mici bitmap sunt un caz de margine datorită dimensiunilor mici, granularității și consistenței distincte - diferite imagini un personaj se potrivește complet. Și practica a arătat că numerele înnorate artificial au crescut în mărime sunt mai bine recunoscute.

Preprocesarea imaginii are un efect mai mare decât antrenamentul. Creșteți cu anti-aliasing: convertiți-redimensionați ...

Recunoașterea numerelor „scurte” de două și trei cifre stând separat nu este satisfăcătoare - numerele trebuie colectate în pachete.

Dar, în general, tesseract a făcut față sarcinii aproape perfect, în ciuda faptului că a fost ascuțit pentru alte sarcini - recunoașterea inscripțiilor pe fotografii și videoclipuri, scanări de documente.

Tesseract este o platformă OCR gratuită pe care Google a donat-o comunității în 2006. Dacă scrieți software OCR, atunci probabil că a trebuit să apelați la serviciile acestei puternice biblioteci. Și dacă ea nu s-a descurcat cu textul tău, atunci ai o singură ieșire - să o înveți. Acest proces este destul de complicat și este plin de acțiuni nu evidente și uneori chiar de-a dreptul magice. Există o descriere originală. Mi-a luat aproape o zi întreagă să-i înțeleg adâncimea, așa că aici vreau să salvez, sper, o versiune mai ușor de înțeles a acesteia. Așadar, pentru a te ajuta pe tine și pe ceilalți să mergi mai repede data viitoare.

0. De ce avem nevoie

  • Tesseract în sine.
Există ansambluri ale acestei biblioteci sub Windows (puteți descărca programul de instalare din depozitul oficial) și sub Linux. Pentru majoritatea distribuțiilor Linux, tesseract poate fi instalat pur și simplu prin sudo apt-get install tesseract-ocr, pentru sistemul meu de modă elementar, a trebuit să adaug o sursă:
gedit /etc/apt/sources.list
deb http://notesalexp.net/debian/precise/ precise main
wget -O - http://notesalexp.net/debian/alexp_key.asc
apt-key adaugă alexp_key.asc
apt-get update
apt-get install tesseract-ocr
  • Imagine cu text pentru antrenament
Este de dorit ca acesta să fie un text real, care va trebui apoi recunoscut. Este important ca fiecare caracter al fontului să apară în fragmentul scanat de cel puțin 5 ori, de preferință de 20 de ori. Format Tiff, fără compresie, de preferință nu cu mai multe pagini. Trebuie să existe spații clar distincte între toate personajele. Ne punem imaginea într-un director separat și o numim ca<код языка>.<имя шрифта>.exp<номер>.tif. Este posibil să existe mai multe imagini și acestea ar trebui să difere doar prin numărul din numele fișierului. Formatul de denumire a fișierelor este foarte important. Fișierele cu nume incorecte ale utilitarului pe care le vom folosi vor fi abuzate de erori de segmentare etc. Pentru a fi specifici, vom presupune că studiem limba CCC și fontul eee. Așa numim fișierul cu scanarea eșantionului de instruire ccc.eee.exp0.tif

1. Creați și editați un fișier casetă
Pentru asta. pentru a marca caracterele din imagine și pentru a seta corespondența lor la utf-8 caractere în caseta de text sunt utilizate fișierele. Acestea sunt fișiere text obișnuite în care fiecare caracter corespunde unui șir cu caracterul și coordonatele dreptunghiului în pixeli. Inițial, fișierul este generat de utilitar din pachetul tesseract:
tesseract ccc.eee.exp0.tif ccc.eee.exp0 batch.nochop makebox
a primit fișierul ccc.eee.exp0.box în directorul curent. Să aruncăm o privire. Caracterele de la începutul liniei se potrivesc exact cu caracterele din fișier? Dacă da, atunci nu este nevoie să antrenezi nimic, poți dormi liniștit. În cazul nostru, cel mai probabil simbolurile nu vor coincide nici în esență, nici în cantitate. Acestea. tesseract cu dicționarul implicit nu a recunoscut nu numai caracterele, ci a numărat și unele dintre ele ca două sau mai multe. Poate că unele dintre personajele noastre vor „rămâne împreună”, adică va cădea în caseta generală și va fi recunoscută ca una. Toate acestea trebuie corectate înainte de a trece mai departe. Lucrarea este plictisitoare și minuțioasă, dar din fericire există o serie de utilități terțe pentru aceasta. De exemplu, am folosit pyTesseractTrainer-1.03. Deschidem o imagine cu ea și va extrage un fișier casetă cu același nume.
A trecut o jumătate de zi ... Închizi pyTesseractTrainer cu un profund sentiment de satisfacție (nu ai uitat să salvezi rezultatul, nu?) Și ai fișierul corect. Acum puteți trece la pasul următor.

2. Antrenează Tesseract
tesseract ccc.eee.exp0.tif ccc.eee.exp0 nobatch box.train
Primim o mulțime de erori, dar căutați la final ceva de genul „S-au găsit 105 blob-uri bune”. Dacă cifra este semnificativ mai mare decât numărul de simboluri „studiate”, atunci există șansa ca antrenamentul în ansamblu să aibă succes. În caz contrar, ne întoarcem la început. Ca urmare a acestui pas, aveți un fișier ccc.eee.exp0.tr

3. Extrageți setul de caractere
unicharset_extractor ccc.eee.exp0.box
Obținem un set de caractere sub forma unui fișier unicharset în directorul curent, unde fiecare caracter și caracteristicile sale sunt situate pe o linie separată. Aici sarcina noastră va fi să verificăm și să corectăm caracteristicile simbolurilor (a doua coloană din fișier). Pentru literele mici ale alfabetului setăm semnul 3, pentru 5 mare, pentru semnele de punctuație 10 pentru numerele 8, orice altceva (cum ar fi + = -) marcăm 0. Caracterele chinezești și japoneze le marcăm 1. De obicei, toate semnele sunt corecte, deci această etapă este o mulțime de timp, nu vă va lua.

4. Descrierea stilului fontului
Creați un fișier ccc.font_properties cu o singură linie: eee 0 0 0 0 0. Aici, mai întâi, scrieți numele fontului, apoi cu numărul 1 sau 0 marcați prezența simbolurilor stilului (respectiv, italic bold bold fix serif fraktur ). În cazul nostru, nu există stiluri, așa că lăsăm totul la zero.

5. Clustere de figuri, prototipuri și alte magii
Pentru studii suplimentare, trebuie să efectuăm încă trei operații. Puteți încerca să înțelegeți semnificația lor din descrierea oficială, nu am fost la înălțime :). Doar facem:
shapeclustering -F ccc.font_properties -U unicharset ccc.eee.exp0.tr
... va fi afișat formatul fișierului
și apoi:
mftraining -F ccc.font_properties -U unicharset -O ccc.unicharset ccc.eee.exp0.tr
... primește fișierele ccc.unicharset, inttemp, pffmtable
și, în sfârșit:
cntraining ccc.eee.exp0.tr
... primim fișierul normproto.

6. Dicționare
În teorie, completarea dicționarelor de cuvinte folosite frecvent (și cuvinte în general) ajută Tesseract să înțeleagă mâzgălelile tale. Nu este necesar să folosiți dicționare, dar dacă doriți brusc, facem fișiere Lista_cuvinte_ frecvente și Lista_cuvinte în care introducem (fiecare pe o linie nouă), respectiv, frecvent folosite și pur și simplu cuvinte ale limbii.
Pentru a converti aceste liste în formatul corect, procedați:
wordlist2dawg frequent_words_list ccc.freq-dawg ccc.unicharset

wordlist2dawg words_list ccc.word-dawg ccc.unicharset

7. Ultimul dosar misterios
Numele său este unicharambigs. În teorie, el ar trebui să atragă atenția lui Tesseract asupra unor personaje similare. Acesta este un fișier text, fiecare linie delimitată de tab-uri descrie perechi de linii care s-ar putea confunda atunci când sunt recunoscute. Formatul de fișier este descris pe deplin în documentație, nu aveam nevoie de el și l-am lăsat gol.

8. Ultima comandă
Toate fișierele trebuie redenumite, astfel încât numele lor să înceapă cu numele limbii. Acestea. vom avea doar fișiere în director:

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

Și, în cele din urmă, executăm:
combine_tessdata ccc.
(!) Perioada este necesară. Drept urmare, obținem fișierul ccc.traineddata, care ne va permite să recunoaștem în continuare noul nostru misterios limbaj.

9. Verifică dacă a meritat :)
Acum să încercăm să recunoaștem eșantionul nostru folosind Tesseract deja antrenat:
sudo cp ccc.traineddata / usr / share / tesseract-ocr / tessdata /
tesseract ccc.tif output -l ccc
Acum căutăm în output.txt și ne bucurăm (sau ne întristăm, în funcție de rezultat).

Tesseract-ocr este o bibliotecă gratuită de recunoaștere a textului. Pentru a-l conecta, trebuie să descărcați următoarele componente:
Leptonica - http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
Cel mai recent tesseract-ocr (on acest moment 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 de instruire în limba rusă - https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz
Puteți colecta totul singur descărcând coduri sursă, dar nu vom face acest lucru.

După ce ați creat un proiect nou, includeți căile către fișierele lib și h. Și scriem un cod simplu.
#include #include int main () (tesseract :: TessBaseAPI * myOCR = new tesseract :: TessBaseAPI (); printf ("Tesseract-ocr version:% s \ n", myOCR-> Version ()); printf ("Leptonica version:% s \ n ", getLeptonicaVersion ()); if (myOCR-> Init (NULL," rus ")) (fprintf (stderr," Could not initialize tesseract. \ n "); exit (1);) Pix * pix = pixRead ("test.tif"); myOCR-> SetImage (pix); char outText; lstrcpy (outText, myOCR-> GetUTF8Text ()); printf ("ieșire OCR: \ n \ n"); printf (outText); myOCR -> Clear (); myOCR-> End (); pixDestroy (& pix); return 0;)

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

Compilați - programul este creat cu succes. Luați următoarea fotografie ca exemplu:

Lansăm programul astfel încât informațiile să fie trimise într-un fișier (deoarece UTF-8 va fi haotic în consolă):
test> a.txt

Conținutul fișierului este mai jos:
Versiunea Tesseract-ocr: 3.02
Versiunea Leptonica: leptonica-1.68 (14 martie 2011, 10:47:28)
Ieșire OCR:

Înlocuind această expresie în (63), vedem că
semnal cu bandă laterală unică, modulat
iar profunzimea modulației este a.
7 Plic XO) al semnalului primar
este imposibil de observat pe osciloscop, deci la
Cum acest semnal nu este în bandă îngustă, ci în asta
‘În caz că nu există„ claritate ”a plicului, dar
cu modulație pe o bandă laterală, o bandă îngustă
‘Semnal urât cu același plic și iată-l
„Și se manifestă explicit și uneori (ca în descriere
„Cazul Luge) încurcă mintea celor neexperimentați
și alți cercetători ..
6.4. "FORMULA COSTASA"
r y
Odată cu apariția OM în manuale, revista `
Articole și monografii au dezbătut problema
câștigul dat de tranziția de la amplitudine
modulație pe bandă laterală simplă. S-au spus multe
opinii contradictorii. La începutul anilor 60, a-
Savantul rican J. Costas a scris că,
lucrează cu o vastă literatură jurnalistică despre OM, el
a găsit în fiecare articol propria sa evaluare a energiei
„Câștigul iic relativ la AM-de la două la,
câteva zeci. Drept urmare, a găsit
-care sunt câștigurile indicate în fiecare articol
pune aproximativ (Z-K-Y!) dB, unde M este numărul co- ‘g
›Autorii acestui articol.
Ei, '11 Dacă această glumă este inexactă, este încă corectă
„Nota reflectă inconsecvența care a existat
; în acei ani. Pe lângă faptul că au produs diferiți autori
D a făcut comparații în diferite condiții și în diferite dimensiuni
Ei au determinat câștigul de energie, au fost 1
‘’ A făcut multe greșeli diferite. 4 "
„Iată câteva exemple de raționament. ",
1. Cu AM convențional, asumarea puterii purtătorului



Ți-a plăcut articolul? Împărtășește-l