Vlastní algoritmus pro OCR

FrantaB

Vlastní algoritmus pro OCR
« kdy: 19. 06. 2014, 10:53:46 »
Zajimalo by mne, jestli nevite, kde sebrat informace ohledne OCR. Uz jsem googlil, ale marne. Vzdycky jenom naslo jiz hotovi reseni - tesseract, opencv. Mne jde spis o to, si naprogramovat vlastni rozeznavani textu z obrazku. Jenom jsem se zatim nedopatral k zadnymu algoritmu/rovnicim/postupum. Mate nekdo nejaky info, zkusenosti, napady?
« Poslední změna: 19. 06. 2014, 11:04:08 od Petr Krčmář »


Carth_Onasi

Re:Vlastní algoritmus pro OCR
« Odpověď #1 kdy: 19. 06. 2014, 11:53:33 »
První věc: Jak složité to potřebuješ? - Automatická detekce textu vs. Ruční výběr, typy a druhy písma, barevnost...

Až se ti vybere text, pak to musíš nasekat na jednotlivá písmena. Pak musíš mít vzorky (cca 100 obrázku každého písmenka) - tj. přes 2000 vzorků. Potom hledáš nejvíce podobný vzorek - metod je hodně.

Pak to ještě projedeš slovníkem, popř. gramatikou, a doplníš styly...

Něco takového jsme brali na kybernetice na ČVUT, zkus se podívat na web. A také napiš, jakou část přesně potřebuješ popsat.

FrantaB

Re:Vlastní algoritmus pro OCR
« Odpověď #2 kdy: 19. 06. 2014, 12:12:16 »
No ja jsem dostal myslenku, ze bych zkusil sam to naimplementovat. Ne jen konkretni cast. Proste, cely proces spracovani textu z obrazku. :)

none_

Re:Vlastní algoritmus pro OCR
« Odpověď #3 kdy: 19. 06. 2014, 13:37:56 »
Se hodne nudis, co?:) To je prace na par let na fulltime.:D



milo

Re:Vlastní algoritmus pro OCR
« Odpověď #5 kdy: 19. 06. 2014, 13:50:01 »
Jestli do toho skutečně chceš jít tak ti doporučuji si nejprve rozmyslet co přesně chceš naprogramovat, protože vyvíjet něco univerzálního je šílenost. Jak kolega psal výše na fel cvut obor kybernetika je a bylo několik zajímavých předmětů které mají materiál k dispozici. Hledej pan Rollo a pan Daniel Novák měli moc pěkný slidy. Jestli programuješ v C++ tak ta knihovna opencv je skutečně mocná a doporučuji, přesto budeš bude řešit věci kolem ale usnadní ti to práci s obrázky co s nima budeš dělat a jak je na tobě.

Nicméně rozpoznání textu oskenované stránky skript(bez obrázků a vysázených rovnic). Tak jednotlivé kroky budou následující.
0) Učení nebo nastavení algoritmu rozpoznávání(a to je velká alchymie)
1) Detekce slov
2) Rozdělení slov na písmenka/znaky
3) Rozpoznání znaků
4) Validace znaků zda mají smysl jako součást slova


hawran.neprihlaseny

Re:Vlastní algoritmus pro OCR
« Odpověď #6 kdy: 19. 06. 2014, 14:24:18 »
Hlodač IV ?

FrantaB

Re:Vlastní algoritmus pro OCR
« Odpověď #7 kdy: 19. 06. 2014, 16:19:23 »
Hmm no myslel jsem, ze to bude jednodusi. :) Ja to chtel implementovat pro Windows Phone, protoze OpenCV pro WP neni a existuji placene reseni. Taky jsem se to chtel naucit, ale to jsi vyzaduje spoustu casu a taky hoooodne vedomosti, takze asi se naucim pracovat s OpenCv

jarinek

Re:Vlastní algoritmus pro OCR
« Odpověď #8 kdy: 19. 06. 2014, 17:03:27 »
Hmm no myslel jsem, ze to bude jednodusi. :) Ja to chtel implementovat pro Windows Phone, protoze OpenCV pro WP neni a existuji placene reseni. Taky jsem se to chtel naucit, ale to jsi vyzaduje spoustu casu a taky hoooodne vedomosti, takze asi se naucim pracovat s OpenCv

Esi chces delat automaticke preklady textu v cizim jazyce namirenim kamery, to uz se dela davno, ja myslel, ze to chces na captchu ale to by muselo bejt efektivnejsi nez 100 Indu. Jako predcitaci SW pro slepe by to nemuselo byt spatne ale myslim ze uz i neco takoveho je.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Vlastní algoritmus pro OCR
« Odpověď #9 kdy: 19. 06. 2014, 22:23:17 »
Hmm no myslel jsem, ze to bude jednodusi. :) Ja to chtel implementovat pro Windows Phone, protoze OpenCV pro WP neni a existuji placene reseni. Taky jsem se to chtel naucit, ale to jsi vyzaduje spoustu casu a taky hoooodne vedomosti, takze asi se naucim pracovat s OpenCv

Hm, jedna znama ve Widlofounu nejake OCR ma a nemyslim, ze by ho platila. Pokud tam teda nebylo, kdyz to koupila z druhe ruky.

webhope

Re:Vlastní algoritmus pro OCR
« Odpověď #10 kdy: 21. 06. 2014, 21:58:03 »
Já jsem taky hledal a našel jsem jen nějaký script, který byl pro Python (nebo Perl) už si nepamatuju. Taky jsem se touto myšlenkou zabýval. Podle mého názoru to opravdu není jednoduché. Co se týče detekce tak jsem to rozvrhl asi na tři fáze.

1) První věc, nad kterou jsem přemýšlel bylo že je třeba nějak odlišit bílou plochu nebo plochu s obrázkama od zbytku textu.
2) Je třeba rozlišit mezi řádky od textu samotného a určit výšku písma
3) je třeba provést detekci písma a určit typ písma.

Zatím bych ti poradil jen k první části, dle toho nejlepšího co mě napadlo, nevím nakolik efektivního.

Projížděl bych sloupce pixelů odshora dolů a hledal bych světlé pixely v souvislém sloupci. To ale znamená kontrolovat vždy několik pixelů za sebou, okraj textů bývá lehce rozmazaný, a ten nechceme zahrnout do výsledku. Všechny sloupce kde není text, bych ukládal.

Současně je tu ovšem problém jak určit jak vysoké jsou meziřádky, které by neměly být zahrnuty do výsledku, neboť jsou součástí textové oblasti. Tenhle problém jen tak vyřešit asi nejde. Muselo by se to odečíst až poté co provedeš detekci textu.

Nakonec bych několikrát opakoval smyčky, které mají za cíl seskupit nalezené sloupce a určit tak plochy, které se netýkají textu. To znamená porovnávat pozici začátku a konce následujícího řádku, abych například zjistil jestli daná plocha má tvar obdélníku a mohl ji zarovnat. Cílem je vytvořit plochy obdélníků, které vyloučí že by se mohlo jednat o textovou nebo obrázkovou plochu.

Pak je třeba hledat oblast textu a oblast obrázků. To by snad také šlo určit pokud budeš porovnávat pozice těch obdélníků, ať už mezer či barvou vyplněné oblasti.

K detekci textu, když víš kde leží text - protože si našel delší obdélníkové oblasti kterou mají malou výšku, pak musíš určit jednotlivé linie textu (Jako kde končí velké a kde končí malé písmena).

jk

Re:Vlastní algoritmus pro OCR
« Odpověď #11 kdy: 22. 06. 2014, 09:24:45 »
Já se tím trochu zabýval: četl jsem dimplomku od týpka na VUT - ten využíval Houghovu transformaci pro vyhledání jednotlivých řádků s textem a jejich narovnání do vodorovné polohy. Pak jednotlivá písmenka analyzoval pomocí Freemanova chain-kódu (primitivní matematický popis tvaru objektů (tj. písmen)). Přimíchal do toho i vyhodnocování pomocí neuronové sítě - nejdříve tuhle síť naučil, které Freemanovy chain-kódy sedí k jednotlivým písmenkům, a pak síť využíval při vyhodnocení textu. Úspěšnost tohodle postupu ale nebyla nic moc.
Pak jsem četl PDF práci od týpka z Ontarijské univerzity - ten zkoumal vyloženě algoritmy popisující tvar objektů (tj. písmen) - v podstatě zjistil, že nejlepších výsledků se dosahuje s Fourrierovými deskriptory a Hu momenty. Já sám jsem dělal software na rozpoznávání statických gest na web-kameře - ve své podstatě jde o podobný princip - rozpoznání tvaru. Pro rozpoznání a přiřazení tvarů jsem používal právě Hu momenty. Úspěšnost byla celkem fajn, ale určitě by se to dalo vylepšit :)

jk

Re:Vlastní algoritmus pro OCR
« Odpověď #12 kdy: 22. 06. 2014, 09:33:52 »
Jinak k téhle problematice doporučuji knihu Learning OpenCV (měla by brzy vyjít ve 2. edici). Je to asi nejlepší úvod do teorie a praxe strojového vidění - na rozdíl od ostatní literatury se to dá s trochou snahy pochopit. Pokud to člověk pochopí, tak si v podstatě příslušné algoritmy může napsat sám bez nutnosti instalace knihovny OpenCV... ale bude to asi dost makačka :D

jk

Re:Vlastní algoritmus pro OCR
« Odpověď #13 kdy: 22. 06. 2014, 09:40:29 »
Také jsem na začátku googlil stylem "how to OCR" apod. Ale to přináší jen obecné výsledky. Je nutné hledat konkrétněji, třeba "how to use Hough transform in OCR", "Fourier descriptors in OCR analysis" apod. Pak to začne vyhazovat zajímavé věci. Nicméně bez určitých základů strojového vidění se v těch informacích člověk asi dost brzo ztratí. Doporučoval bych tento postup: načíst Learning OpenCV, pochopit základní algoritmy a pak se teprve pouštět do něčeho specializovanějšího. Pro opencv je tuším i praktická knížka s praktickými příklady, OCR mezi nimi nechybí.

Juro

Re:Vlastní algoritmus pro OCR
« Odpověď #14 kdy: 22. 06. 2014, 12:18:22 »
Mne trvalo niekolko rokov, kym som sa naucil citat. Neviem si predstavit, ze by to mal zvladnut stroj.