Razvoj rješenja za upravljanje dokumentima: kako smo odabrali OCR knjižnicu za naše zadatke. Tesseract-Ocr u Visual Studio - prepoznavanje stranice teksta Digitalizacija slika jednu po jednu

Trebali smo unaprijediti protok dokumenata u našoj tvrtki, prije svega povećati brzinu obrade papirnatih dokumenata. Kako bismo to učinili, odlučili smo razviti softversko rješenje temeljeno na jednoj od OCR (optičko prepoznavanje znakova) biblioteka.

OCR ili optičko prepoznavanje znakova je mehanička ili elektronička konverzija slika tiskanog teksta u strojno čitljiv tekst. OCR je način digitalizacije tiskanog teksta tako da se može elektronički pohranjivati, uređivati, prikazivati ​​i primijeniti na strojne procese kao što su kognitivno računalstvo, strojno prevođenje i rudarenje podataka.

Osim toga, OCR se koristi kao metoda za hvatanje informacija iz papirnatih dokumenata (uključujući financijske evidencije, posjetnice, fakture i više).

Prije implementacije same aplikacije, proveli smo temeljitu analizu tri najpopularnije OCR biblioteke kako bismo odredili najprikladniju opciju za rješavanje naših problema.

Analizirali smo tri najpopularnije OCR biblioteke:

- Google API za prepoznavanje teksta

Google API za prepoznavanje teksta

Google Text Recognition API je proces otkrivanja teksta u slikama i video streamovima i prepoznavanja teksta sadržanog u njima. Nakon otkrivanja, prepoznavanje utvrđuje stvarni tekst u svakom bloku i rastavlja ga na riječi i retke. Otkriva tekst na različitim jezicima (francuski, njemački, engleski, itd.) u stvarnom vremenu.

Vrijedno je napomenuti da se općenito ovaj OCR nosio sa zadatkom. Mogli smo prepoznati tekst u stvarnom vremenu i iz gotovih slika tekstualnih dokumenata. Tijekom analize ove knjižnice identificirali smo i prednosti i nedostatke njezina korištenja.

Prednosti:

— Mogućnost prepoznavanja teksta u stvarnom vremenu

— Sposobnost prepoznavanja teksta sa slika;

— Mala veličina knjižnice;

— Velika brzina prepoznavanja.

Mane:

— Velika veličina datoteka s obučenim podacima (~30 Mb).

Teserakt

Tesseract je open source OCR biblioteka za različite operativne sustave. To je besplatni softver objavljen pod Apache licencom, verzija 2.0, podržava različite jezike.

Razvoj Tesseracta financirao je Google od 2006., vremena kada se smatrao jednom od najtočnijih i najučinkovitijih OCR biblioteka otvorenog koda.

Bilo kako bilo u to vrijeme, nismo bili baš zadovoljni rezultatima implementacije Tesseracta, jer Knjižnica je nevjerojatno velika i ne dopušta prepoznavanje teksta u stvarnom vremenu.

Prednosti:

— otvorenog je koda;

— Sukladno tome, vrlo je lako uvježbati OCR da prepozna potrebne fontove i poboljša kvalitetu prepoznatih informacija. Nakon brzog postavljanja knjižnice i obuke, kvaliteta rezultata prepoznavanja brzo se povećala.

Mane:

— Nedovoljna točnost prepoznavanja, koja se otklanja obukom i podučavanjem algoritma prepoznavanja;

— Prepoznavanje teksta u stvarnom vremenu zahtijeva dodatnu obradu rezultirajuće slike;

— Niska točnost prepoznavanja pri korištenju standardnih datoteka s podacima o fontovima, riječima i znakovima.

Bilo koja linija

Anyline nudi višeplatformski SDK koji programerima omogućuje jednostavnu integraciju OCR funkcionalnosti u aplikacije. Ova OCR biblioteka privukla nas je brojnim opcijama za prilagodbu parametara prepoznavanja i modelima koje nudi za rješavanje specifičnih aplikacijskih problema. Vrijedno je napomenuti da je knjižnica plaćena i namijenjena komercijalnoj upotrebi.

Prednosti:

— Prilično jednostavno postavljanje prepoznavanja potrebnih fontova;

— Prepoznavanje teksta u stvarnom vremenu;

— Jednostavna i praktična konfiguracija parametara prepoznavanja;

— Knjižnica može prepoznati bar kodove i QR kodove;

— Pruža gotove module za rješavanje raznih problema.

Mane:

— Mala brzina prepoznavanja;

— Za dobivanje zadovoljavajućih rezultata potrebno je početno postavljanje fontova za prepoznavanje.

Tijekom analize, kako bismo riješili naše probleme, odlučili smo se za Google Text Recognition API, koji kombinira veliku brzinu, jednostavno postavljanje i visoke rezultate prepoznavanja.

Rješenje koje smo razvili omogućuje vam skeniranje papirnatih dokumenata, njihovu automatsku digitalizaciju i spremanje u jedinstvenu bazu podataka. Kvaliteta prepoznatih informacija je oko 97%, što je vrlo dobar rezultat.

Implementacijom razvijenog sustava, interna (uključujući obradu dokumenata, njihovu izradu i razmjenu između odjela itd.) ubrzana je za 15%.

Teserakt je besplatna platforma za optičko prepoznavanje teksta, čiji je izvorni kod Google donirao zajednici 2006. godine. Ako pišete softver za prepoznavanje teksta, vjerojatno ste se morali obratiti uslugama ove moćne biblioteke. A ako se nije mogla nositi s vašim tekstom, onda imate samo jedan izlaz - naučiti je. Ovaj proces je prilično složen i prepun je ne očitih, ali ponekad potpuno čarobnih radnji. Postoji originalni opis. Trebao mi je gotovo cijeli dan da shvatim njegovu punu dubinu, pa ovdje želim sačuvati, nadam se, njegovu razumljiviju verziju. Dakle, da pomognete sebi i drugima da sljedeći put brže prođete ovim putem.

0. Što nam treba

  • Sam Tesseract.
Buildovi ove biblioteke dostupni su za Windows (možete preuzeti instalacijski program iz službenog repozitorija) i za Linux. Za većinu distribucija Linuxa tesseract možete jednostavno instalirati putem sudo apt-get instaliraj tesseract-ocr, morao sam dodati izvor za svoj moderan Elementary OS:
gedit /etc/apt/sources.list
deb http://notesalexp.net/debian/precise/precise glavni
wget -O - http://notesalexp.net/debian/alexp_key.asc
apt-key dodaj alex_key.asc
apt-get ažuriranje
apt-get instaliraj tesseract-ocr
  • Slika s tekstom za trening
Poželjno je da to bude pravi tekst, koji će se onda morati prepoznati. Važno je da se svaki znak fonta pojavi u skeniranom fragmentu najmanje 5 puta, a po mogućnosti 20 puta. Tiff format, bez kompresije, po mogućnosti bez više stranica. Između svih znakova trebaju biti jasno vidljivi razmaci. Svoju sliku stavljamo u zaseban direktorij i imenujemo je kao<код языка>.<имя шрифта>.exp<номер>.tif. Može biti više od jedne slike i trebale bi se razlikovati samo po broju u nazivu datoteke. Format naziva datoteke vrlo je važan. Za datoteke s netočnim nazivima, uslužni programi koje ćemo koristiti žalit će se na pogreške u segmentaciji itd. Definicije radi, pretpostavit ćemo da proučavamo sss jezik i eee font. Dakle, datoteku sa sken uzorka za obuku imenujemo ccc.eee.exp0.tif

1. Stvorite i uredite box datoteku
Za to. Da biste označili znakove na slici i postavili njihovu korespondenciju s tekstualnim znakovima UTF-8, upotrijebite okvirne datoteke. To su obične tekstualne datoteke u kojima svaki znak odgovara liniji sa znakom i koordinatama pravokutnika u pikselima. U početku, datoteku generira uslužni program iz paketa tesseract:
tesseract ccc.eee.exp0.tif ccc.eee.exp0 batch.nochop makebox
primio je datoteku ccc.eee.exp0.box u trenutnom direktoriju. Pogledajmo to. Odgovaraju li znakovi na početku retka točno znakovima u datoteci? Ako je to slučaj, onda ne morate ništa trenirati, možete mirno spavati. U našem slučaju, najvjerojatnije se simboli neće podudarati ni u biti ni u količini. Oni. tesseract sa zadanim rječnikom nije prepoznao ne samo znakove, već je neke od njih brojao kao dva ili više. Možda će se neki od naših simbola “slijepiti”, tj. će pasti u zajedničku kutiju i bit će prepoznati kao jedan. Sve ovo treba ispraviti prije nego što krenete dalje. Posao je dosadan i mukotrpan, ali srećom za to postoji niz uslužnih programa trećih strana. Na primjer, koristio sam pyTesseractTrainer-1.03. Otvorimo im sliku, datoteka box-a s istim nazivom će se sama povući.
Prošlo je pola dana... Zatvorite pyTesseractTrainer s osjećajem dubokog zadovoljstva (niste zaboravili spremiti rezultat, zar ne?) i imate ispravnu box datoteku. Sada možete prijeći na sljedeći korak.

2. Vlak Tesseract
tesseract ccc.eee.exp0.tif ccc.eee.exp0 nobatch box.train
Dobivamo mnogo pogrešaka, ali na kraju tražimo nešto poput "Pronađeno 105 dobrih mrlja". Ako je broj značajno veći od broja "proučenih" simbola, onda postoji šansa da je trening u cjelini bio uspješan. U suprotnom, vraćamo se na početak. Kao rezultat ovog koraka, sada imate datoteku ccc.eee.exp0.tr

3. Ekstrahirajte skup znakova
unicharset_extractor ccc.eee.exp0.box
Dobivamo skup znakova u obliku unicharset datoteke u trenutnom direktoriju, gdje se svaki znak i njegove karakteristike nalaze u zasebnom retku. Ovdje će naš zadatak biti provjeriti i ispraviti karakteristike simbola (drugi stupac u datoteci). Za mala slova abecede postavljamo atribut 3, za velika slova 5, za interpunkcijske znakove 10, za brojeve 8, sve ostalo (kao što je +=-) označeno je 0. Kineski i japanski znakovi označeni su 1. Obično svi znakovi su točni, tako da ova faza oduzima puno vremena neće vam oduzeti.

4. Opišite stil fonta
Kreiramo datoteku ccc.font_properties s jednim redom: eee 0 0 0 0 0. Ovdje prvo napišemo naziv fonta, a zatim koristimo broj 1 ili 0 da označimo imaju li simboli stil (prema tome, kurziv podebljano fiksno serif fraktur). U našem slučaju nema stilova, pa ostavljamo sve kao nule.

5. Grupe figura, prototipova i druge magije
Za daljnje proučavanje moramo izvesti još tri operacije. Možete pokušati shvatiti njihovo značenje iz službenog opisa, nisam imao vremena :). Mi samo radimo:
shapeclustering -F ccc.font_properties -U unicharset ccc.eee.exp0.tr
...pojavit će se datoteka shapetable
i onda:
mftraining -F ccc.font_properties -U unicharset -O ccc.unicharset ccc.eee.exp0.tr
...nabavite datoteke ccc.unicharset, inttemp, pffmtable
i konačno:
cntraining ccc.eee.exp0.tr
...nabavite datoteku normproto.

6. Rječnici
U teoriji, popunjavanje rječnika često korištenih riječi (i riječi općenito) pomaže Tesseractu da shvati vaše škrabotine. Nije potrebno koristiti rječnike, ali ako to odjednom želite, izrađujemo datoteke lista_čestih_riječi i lista_riječi u koje unosimo (svaku u novi red) često korištene, odnosno jednostavno riječi jezika.
Da biste ove popise pretvorili u ispravan format, pokrenite:
popis_riječi_wordlist2dawg popis_čestih_riječi ccc.freq-dawg ccc.unicharset

wordlist2dawg words_list ccc.word-dawg ccc.unicharset

7. Posljednji misteriozni dosje
Njegovo ime je unicharambigs. U teoriji, trebao bi privući pozornost Tesseracta na slične simbole. Ovo je tekstualna datoteka sa svakim retkom odvojenim tabulatorima koji opisuje parove redaka koji se mogu zamijeniti tijekom prepoznavanja. Format datoteke je u potpunosti opisan u dokumentaciji; nisam ga trebao i ostavio sam ga praznim.

8. Posljednja naredba
Sve datoteke moraju biti preimenovane tako da im nazivi počinju s nazivom jezika. Oni. U direktoriju ćemo imati samo sljedeće datoteke:

ccc.kutija
ccc.inttemp
ccc.pffmtable
ccc.tif
ccc.font_properties
ccc.normproto
ccc.obličljiv
ccc.tr
ccc.unicharset

I na kraju radimo:
combine_tessdata ccc.
(!) Točka je obavezna. Kao rezultat, dobivamo datoteku ccc.traineddata, koja će nam omogućiti daljnje prepoznavanje našeg tajanstvenog novog jezika.

9. Provjerite je li se isplatilo :)
Pokušajmo sada prepoznati naš uzorak pomoću već obučenog Tesseracta:
sudo cp ccc.traineddata /usr/share/tesseract-ocr/tessdata/
tesseract ccc.tif izlaz -l ccc
Sada gledamo output.txt i sretni smo (ili tužni, ovisno o rezultatu).

Teserakt je besplatna platforma za optičko prepoznavanje teksta, čiji je izvorni kod Google donirao zajednici 2006. godine. Ako pišete softver za prepoznavanje teksta, vjerojatno ste se morali obratiti uslugama ove moćne biblioteke. A ako se nije mogla nositi s vašim tekstom, onda imate samo jedan izlaz - naučiti je. Ovaj proces je prilično složen i prepun je ne očitih, ali ponekad potpuno čarobnih radnji. Postoji originalni opis. Trebao mi je gotovo cijeli dan da shvatim njegovu punu dubinu, pa ovdje želim sačuvati, nadam se, njegovu razumljiviju verziju. Dakle, da pomognete sebi i drugima da sljedeći put brže prođete ovim putem.

0. Što nam treba

  • Sam Tesseract.
Buildovi ove biblioteke dostupni su za Windows (možete preuzeti instalacijski program iz službenog repozitorija) i za Linux. Za većinu distribucija Linuxa tesseract možete jednostavno instalirati putem sudo apt-get instaliraj tesseract-ocr, morao sam dodati izvor za svoj moderan Elementary OS:
gedit /etc/apt/sources.list
deb http://notesalexp.net/debian/precise/precise glavni
wget -O - http://notesalexp.net/debian/alexp_key.asc
apt-key dodaj alex_key.asc
apt-get ažuriranje
apt-get instaliraj tesseract-ocr
  • Slika s tekstom za trening
Poželjno je da to bude pravi tekst, koji će se onda morati prepoznati. Važno je da se svaki znak fonta pojavi u skeniranom fragmentu najmanje 5 puta, a po mogućnosti 20 puta. Tiff format, bez kompresije, po mogućnosti bez više stranica. Između svih znakova trebaju biti jasno vidljivi razmaci. Svoju sliku stavljamo u zaseban direktorij i imenujemo je kao<код языка>.<имя шрифта>.exp<номер>.tif. Može biti više od jedne slike i trebale bi se razlikovati samo po broju u nazivu datoteke. Format naziva datoteke vrlo je važan. Za datoteke s netočnim nazivima, uslužni programi koje ćemo koristiti žalit će se na pogreške u segmentaciji itd. Definicije radi, pretpostavit ćemo da proučavamo sss jezik i eee font. Dakle, datoteku sa sken uzorka za obuku imenujemo ccc.eee.exp0.tif

1. Stvorite i uredite box datoteku
Za to. Da biste označili znakove na slici i postavili njihovu korespondenciju s tekstualnim znakovima UTF-8, upotrijebite okvirne datoteke. To su obične tekstualne datoteke u kojima svaki znak odgovara liniji sa znakom i koordinatama pravokutnika u pikselima. U početku, datoteku generira uslužni program iz paketa tesseract:
tesseract ccc.eee.exp0.tif ccc.eee.exp0 batch.nochop makebox
primio je datoteku ccc.eee.exp0.box u trenutnom direktoriju. Pogledajmo to. Odgovaraju li znakovi na početku retka točno znakovima u datoteci? Ako je to slučaj, onda ne morate ništa trenirati, možete mirno spavati. U našem slučaju, najvjerojatnije se simboli neće podudarati ni u biti ni u količini. Oni. tesseract sa zadanim rječnikom nije prepoznao ne samo znakove, već je neke od njih brojao kao dva ili više. Možda će se neki od naših simbola “slijepiti”, tj. će pasti u zajedničku kutiju i bit će prepoznati kao jedan. Sve ovo treba ispraviti prije nego što krenete dalje. Posao je dosadan i mukotrpan, ali srećom za to postoji niz uslužnih programa trećih strana. Na primjer, koristio sam pyTesseractTrainer-1.03. Otvorimo im sliku, datoteka box-a s istim nazivom će se sama povući.
Prošlo je pola dana... Zatvorite pyTesseractTrainer s osjećajem dubokog zadovoljstva (niste zaboravili spremiti rezultat, zar ne?) i imate ispravnu box datoteku. Sada možete prijeći na sljedeći korak.

2. Vlak Tesseract
tesseract ccc.eee.exp0.tif ccc.eee.exp0 nobatch box.train
Dobivamo mnogo pogrešaka, ali na kraju tražimo nešto poput "Pronađeno 105 dobrih mrlja". Ako je broj značajno veći od broja "proučenih" simbola, onda postoji šansa da je trening u cjelini bio uspješan. U suprotnom, vraćamo se na početak. Kao rezultat ovog koraka, sada imate datoteku ccc.eee.exp0.tr

3. Ekstrahirajte skup znakova
unicharset_extractor ccc.eee.exp0.box
Dobivamo skup znakova u obliku unicharset datoteke u trenutnom direktoriju, gdje se svaki znak i njegove karakteristike nalaze u zasebnom retku. Ovdje će naš zadatak biti provjeriti i ispraviti karakteristike simbola (drugi stupac u datoteci). Za mala slova abecede postavljamo atribut 3, za velika slova 5, za interpunkcijske znakove 10, za brojeve 8, sve ostalo (kao što je +=-) označeno je 0. Kineski i japanski znakovi označeni su 1. Obično svi znakovi su točni, tako da ova faza oduzima puno vremena neće vam oduzeti.

4. Opišite stil fonta
Kreiramo datoteku ccc.font_properties s jednim redom: eee 0 0 0 0 0. Ovdje prvo napišemo naziv fonta, a zatim koristimo broj 1 ili 0 da označimo imaju li simboli stil (prema tome, kurziv podebljano fiksno serif fraktur). U našem slučaju nema stilova, pa ostavljamo sve kao nule.

5. Grupe figura, prototipova i druge magije
Za daljnje proučavanje moramo izvesti još tri operacije. Možete pokušati shvatiti njihovo značenje iz službenog opisa, nisam imao vremena :). Mi samo radimo:
shapeclustering -F ccc.font_properties -U unicharset ccc.eee.exp0.tr
...pojavit će se datoteka shapetable
i onda:
mftraining -F ccc.font_properties -U unicharset -O ccc.unicharset ccc.eee.exp0.tr
...nabavite datoteke ccc.unicharset, inttemp, pffmtable
i konačno:
cntraining ccc.eee.exp0.tr
...nabavite datoteku normproto.

6. Rječnici
U teoriji, popunjavanje rječnika često korištenih riječi (i riječi općenito) pomaže Tesseractu da shvati vaše škrabotine. Nije potrebno koristiti rječnike, ali ako to odjednom želite, izrađujemo datoteke lista_čestih_riječi i lista_riječi u koje unosimo (svaku u novi red) često korištene, odnosno jednostavno riječi jezika.
Da biste ove popise pretvorili u ispravan format, pokrenite:
popis_riječi_wordlist2dawg popis_čestih_riječi ccc.freq-dawg ccc.unicharset

wordlist2dawg words_list ccc.word-dawg ccc.unicharset

7. Posljednji misteriozni dosje
Njegovo ime je unicharambigs. U teoriji, trebao bi privući pozornost Tesseracta na slične simbole. Ovo je tekstualna datoteka sa svakim retkom odvojenim tabulatorima koji opisuje parove redaka koji se mogu zamijeniti tijekom prepoznavanja. Format datoteke je u potpunosti opisan u dokumentaciji; nisam ga trebao i ostavio sam ga praznim.

8. Posljednja naredba
Sve datoteke moraju biti preimenovane tako da im nazivi počinju s nazivom jezika. Oni. U direktoriju ćemo imati samo sljedeće datoteke:

ccc.kutija
ccc.inttemp
ccc.pffmtable
ccc.tif
ccc.font_properties
ccc.normproto
ccc.obličljiv
ccc.tr
ccc.unicharset

I na kraju radimo:
combine_tessdata ccc.
(!) Točka je obavezna. Kao rezultat, dobivamo datoteku ccc.traineddata, koja će nam omogućiti daljnje prepoznavanje našeg tajanstvenog novog jezika.

9. Provjerite je li se isplatilo :)
Pokušajmo sada prepoznati naš uzorak pomoću već obučenog Tesseracta:
sudo cp ccc.traineddata /usr/share/tesseract-ocr/tessdata/
tesseract ccc.tif izlaz -l ccc
Sada gledamo output.txt i sretni smo (ili tužni, ovisno o rezultatu).

Ako postoje gotova rješenja, nema smisla ponovno izmišljati štake i bicikle. Ovu tvrdnju su s posebnim cinizmom dokazali autori cryptolockera, koji su za svoje potrebe koristili CryptoAPI :). To vrijedi i za rješavanje našeg današnjeg zadatka - dešifriranje captcha (u obrazovne svrhe, naravno). Samo naprijed, pokrenimo Visual Studio!

Uvod

Cijeli proces nadolazećeg rada može se podijeliti u nekoliko faza:

  • preuzimanje slika;
  • ukloniti šum i druga umjetna izobličenja;
  • označiti područja povezivanja (simbole) i spremiti ih;
  • trenirati neuronsku mrežu ili izraditi rječnik;
  • prepoznati

Ovo će nam pomoći:

  • AForgeNet - knjižnice računalnog vida i umjetne inteligencije;
  • Tesseract - program za prepoznavanje teksta;
  • Fanndotnetwrapper - .NET omotač za FANN neuronsku mrežu;
  • CCLA algoritam za pretraživanje povezivosti Omar Gameel Salem.

Izvor na dvd.site

Ne zaboravite preuzeti temu, bit će vam korisna kada budete čitali ovaj članak. Nema malwarea, nema ekstremizma - samo čista znanost, samo OCR tehnologije, samo hardcore!

Pripremna faza

Pokrenite Visual Studio i izradite novi projekt prozora u C#. Otvorimo ga u Exploreru kako bismo tamo kopirali potrebne datoteke.


Za treniranje FANN neuronske mreže koristili smo dio koda iz Tesseracta, razlika je u tome što kreiramo jednu tekstualnu datoteku train.tr, u kojoj je prvi redak broj slika, broj točaka u svakoj (širina pomnožena s visina) i broj izlaza (slova koja tražimo). Prije svega toga, sama slika prolazi obaveznu binarizaciju kako bi se istaknula samo dva stanja svake točke (1 - crno, 0 - bijelo), te se dalje sprema u istu datoteku u svim sljedećim redovima. Radi praktičnosti i mogućnosti korištenja različitih unaprijed stvorenih obučenih ann datoteka, stvorena je dodatna tekstualna datoteka CONFIG.txt. Sastoji se od jednog retka i označava broj točaka i izlaza s njihovim vrijednostima; nećete moći slučajno pokrenuti captcha provjeru druge datoteke ann.

String a = File.ReadAllText(SaveFilesPath + "CONFIG.txt"); niz b = a.Split(" "); int SumPix = Convert.ToInt32(b); int Outpt = Convert.ToInt32(b.Length); uint slojevi = ( (uint)SumPix, (uint)slojS, (uint)Outpt); net.CreateStandardArray(layers); net.RandomizeWeights(-0.1, 0.1); net.SetLearningRate(0.7f); TrainingData data = new TrainingData(); data.ReadTrainFromFile(SaveFilesPath + "train.tr"); net.TrainOnData(podaci, 1000, 0, 0,001f); net.Save(SaveFilesPath + "FANNLearning.ann");

Dobivamo config, očitavamo parametre, broj slojeva (layera) prema preporuci Wikipedije je postavljen na 120, sve ostalo je odabrano slučajno ili pogledano na internetu. Brzina učenja ovisi o snazi ​​vašeg hardvera i gore napisanom. Na primjer, i7-4702MQ sa 6500 slika bio je okupiran jednom jezgrom 20-30 minuta.

Šesti korak. Priznanje

U završnoj fazi provode se dva pristupa, ali se koristi onaj za koji je provedena obuka. Tesseract 3.02 i FANN nalaze se u donjem lijevom dijelu glavnog prozora. Prvi može pretraživati ​​na engleskom (odaberite znakove s padajućeg popisa), ruskom, matematičkom i rječniku korisnika. Pretraga rječnika odvija se automatski, a svi dostupni su označeni u opisu alata. Drugi prepoznaje tekst pomoću gumba FANNOCR i prikazuje rezultat analize za svaki odabrani znak u zapisniku (lijeva strana prozora). Vrlo je zgodno vidjeti zašto je neuronska mreža izabrala ovaj ili onaj izlaz. Pogledajmo kako to funkcionira u slučaju neuronske mreže.

Privatni niz OCR(Bitmap img) ( ... ( int whx = img.Width * img.Height; if (SUMMPIX != whx) ( /* Prikaži pogrešku, broj piksela nije odgovarao */) dvostruki unos = GetPix(img) ; double result = net.Run(input); if (tempanswer.Length != result.Length) ( /* Ispis pogreške, različiti broj izlaza */) int maxN = FindMax(result); Convert.ToString(tempanswer) ; if (ToLogEvent != null) ToLogEvent(result, tempanswer, answer ... ) )

Dobili smo sliku iz javne metode, gdje je net.CreateFromFile(SaveFilesPath + "FANNLearning.ann") implementiran i čitajući konfiguracijsku datoteku, tempanswer je varijabla jednaka b, ispisuje slova koja tražimo. Uspoređujemo broj piksela, zapisujemo ih u niz i pokrećemo ih kroz obučenu ann, tražeći najveći mogući postotak podudaranja, zatim šaljemo rezultat događaju, odabiremo jedan izlaz i dobivamo slovo koje mu se dodjeljuje.

Rasprava o rezultatima

Moji rezultati testiranja uvelike su ovisili o broju i kvaliteti slika za obuku, au slučaju FANN neuronske mreže io broju izlaza. U prosjeku, captcha koja je podlegla filterima imala je ~80% ispravnog prepoznavanja, puno ovisi o upornosti i želji - što naučiš to dobiješ. Glavno da radi.

Zaključak

Sve što je opisano u članku može se primijeniti za rješavanje mnogih drugih problema. Na primjer, dok sam tražio informacije za članak, naišao sam na detaljnu analizu prepoznavanja slike automobila na parkiralištu. Koristite svoju maštu i Visual Studio! 🙂

Tesseract-ocr je besplatna biblioteka za prepoznavanje teksta. Da biste ga povezali, morate preuzeti sljedeće komponente:
Leptonica - http://code.google.com/p/leptonica/downloads/detail?name=leptonica-1.68-win32-lib-include-dirs.zip
Najnovija verzija tesseract-ocr (trenutno 3.02) - https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can= 2&q =
Podaci o obuci ruskog jezika - https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.rus.tar.gz
Sve možete sami sastaviti preuzimanjem izvornih kodova, ali mi to nećemo učiniti.

Nakon što smo izradili novi projekt, povezujemo staze do datoteka lib i h. I mi pišemo jednostavan kod.
#uključi #uključi int main() ( tesseract::TessBaseAPI *myOCR = novi tesseract::TessBaseAPI(); printf("Tesseract-ocr verzija: %s\n", myOCR->Version()); printf("Leptonica verzija: %s \n", getLeptonicaVersion()); if (myOCR->Init(NULL, "rus")) ( fprintf(stderr, "Nije moguće pokrenuti tesseract.\n"); exit(1); ) Pix *pix = pixRead ("test.tif"); lstrcpy(outText, myOCR->Text()); ->Clear() End(); pixDestroy(&pix);

Uključujemo lib datoteke:
libtesseract302.lib
liblept168.lib

Sastavljamo - program je uspješno kreiran. Uzmimo sljedeću sliku kao primjer:

Pokrećemo program tako da se informacije izlaze u datoteku (budući da će UTF-8 biti kaos u konzoli):
test > a.txt

Sadržaj datoteke ispod:
Tesseract-ocr verzija: 3.02
Verzija Leptonice: leptonica-1.68 (14. ožujka 2011., 10:47:28)
OCR izlaz:

“Zamjenom ovog izraza u (63), vidimo da je o-
Jednopojasni signal je moduliran
a dubina modulacije je a.
7 Envelope XO) primarnog signala izravno
Zapravo, nemoguće je promatrati na osciloskopu, tako da
Kako ovaj signal nije uskopojasni, nego
'u ovom slučaju nema "vidljivosti" omotnice, ali
s jednopojasnom modulacijom, uskopojasni
‘labav signal s istom omotnicom, a zatim ga
“i očituje se eksplicitno i ponekad (kao u opisu
“u ovom slučaju) unosi zbrku u umove neiskusnih
i novi istraživači..
6.4. "FORMULA COSTAS"
g y
Pojavom OM u udžbenicima, časopisima`
U člancima i monografijama pitanje o
o tome kakav dobitak dolazi od prijelaza iz amplitude
modulacija na jedan bočni pojas. Puno je rečeno
oprečna mišljenja. Početkom 60-ih američki
To je napisao rikanski znanstvenik J. Costas pogledavši
Nakon što je pretražio opsežnu časopisnu literaturu o OM-u, on je
nalazio u svakom članku svoju ocjenu energije
“Kalorični dobitak u odnosu na AM - od dva do,
nekoliko desetaka. Kao rezultat toga, uspostavio je
-da su dobici navedeni u svakom članku su-
je približno (Z-K-Y!) dB, gdje je M-broj
› autori ovog članka.
Yo, ‘ 11 Čak i ako je ova šala netočna, još uvijek je točna -
'Bilješke odražavaju neslogu koja je postojala
; u tim godinama. Osim što su različiti autori producirali
D je napravio usporedbe pod različitim uvjetima i na različite načine
Odredili su dobitak energije na ovaj način: 1
''Napravili su mnogo različitih grešaka. 4 "
‚`Evo primjera razmišljanja. ",
1. S konvencionalnim AM, uz pretpostavku nosive snage




Vrh