Poznatek - zkusil jsem přečíst text pomocí CRNN modelu (který nijak netrénuju) a přepis byl sice samozřejmě mimo a zmatky, ale nebylo to úplně marné - písmenka to celkem čsto nacházelo tak, že byly aspoň podobné tomu, co je v zápisu. Řekl bych, že to snad četlo líp, než Tesseract, kde jsem si udělal svoji instanci OCR modelu kopií z Global po přečtení 3 skenů (5 stran). Není ten Global v modelu Tesseract něčím zblbnutý, že čte hůř, než CRNN?
A pár poznatků, které směřují spíš na vedoucího práce a nan další směřování vývoje OCR.
Jednak je opravdu dost žalostná ta detekce regionů a řádků.
Druhák - i když se formulace ve všech zápisech absolutně opakují, OCR to vůbec nebere v úvahu. Čtení po řádcích je možná trochu zavádějící. Nebylo by možné nějak vymyslet čtení po záznamech? Teď jsou místy i řádky roztrhané na menší části. Ale i kdyby byly celé řádky v kusu, tak se z těch samostatných řádků ztrácí kontext.
Kdyby OCR bylo schopné pochopit, že všechny záznamy vypadají stejně, mohlo by hledat podobnosti v jednotlivých částech záznamu - podobně, jako to dělá člověk, když to čte.
Když čtu text, vycházím z toho, že vím (poznám) jazyk a mám v hlavě jakýsi slovník - takže slova čtu i proto, že vím, co v daném místě má být. To slovo tam prostě čekám a nečtu úplně strojově. Bylo by možné tuhle logiku "nějak" do nějaké následné verze toho OCR taky dostat? Vím, že čtu matriku, tak čekám formulace z matriky. Čtu, gruntovnici, čekám formulace, jaké jsou v gruntovnicích. Když nevím co čtu, přečtu kousek a docvakne mi, co čtu (např. matriku - křestní) a podle toho "přepnu mozek" a čtu s daleko větší jistotou.
A jedna připomínka k OCR obecně - teď je označený celý řádek a OCR ho "nějak" přečte. Já mu to opravím, ale ono to vlastně netuší, které písmenko kde je. Často to při čtení vypadá tak, že to ani netuší, kde končí jedno a začíná druhé slovo. V této fázi této práce to asi není reálné, ale nepomohlo by, kdybych byl schopen té neuronové síti při učení přesně ukázat tady je tohle konkrétní písmeno? A nebo alespoň tady je to hle konkrétní slovo? Tzn. Tak, jak je teď udělané dělení na řádky, tak ještě udělat dělné na slova (ale se zachováním kontextu celého řádku). Opět téma na zamyšlení spíš do budoucna.
Bylo by zde tedy možné dělení regiony / (odstavce /) řádky / slova / písmena
region = celý záznam (a držet kontext celého záznamu). Odstavce u matrik, kde jsou třeba samostatné kolonky pro dítě, otce, matku,… Řádky - jasně, text je v řádcích, ale několik řádků tvoří jeden souvislý logiocký blok. Slova (můžou výt rozdělená přes více řádků). Rozdělení na řádky / slova / písmena by mělo smysl jen pro samotnou detekci písmen v textu, ale se čtením by měl pomáhat nějaký ten slovník podle kontextu celého záznamu nebo odstavce (v ráci celého záznamu).
No, snadno se mi to asi mluví, když vůbec nevidím do toho, jak to celé funguje. Já jen vidím, jaké to dává (spíš nedává) výsledky. Když do něj nasypu několik desítek záznamů s identickou strukturou, tak bych čekal, že už minimálně začne vidět stejná slova stejně, protože jesou ve stejném místě záznamu a prostě tam musí být stejné slovo, jako u všech předchozích.
Ale berte to prosím jen jako námt k zamyšlení. Pokud jste to všechno takhle už promýšleli, tak prosím moje moudra tiše (nebo klidně hlasitě
) ignorujte.