It’s (almost) alive!

W piątkowym wpisie opisałem pokrótce bibliotekę JDOM Parser. Jak już wspomniałem wykorzystałem ją przy okazji przebudowy zbioru wzorców. Było to konieczne, ponieważ chciałem powiększyć zbiór wzorców, które wykorzystuję do korelacji. Po gruntownym rozszerzeniu i przebudowie zbioru danych uruchomiłem algorytm rozpoznawania znaków.

Dla niektórych paragonów możliwe było już zrozumienie zeskanowanej treści. Niestety nadal brakuje wzorców dla znaków interpunkcyjnych oraz rozpoznawania odstępów między wyrazami – będę nad tym pracował.

Mimo wszystko mogę powiedzieć: It’s (almost) alive!

Paragony i wynik działania algorytmu:

Paragon 1:

Wynik:

BEEFBUR6ERBAR
ULlWARSZAUERA1Z1A31wO57KRAKAkl
NIPc868M189w38N12
25NO2w2O17W13O366
NRi8NK8iNi5k8iPi1IlkiAl5mPikk1li8lfiillNalWAłAiliP1AlrNP888ilPł1akkł8NPllrNąkBli8lNÓfkfNiĄkN8i1NI
PARAOONFISKALNy
ilAl1P58i5ri18NW1Pk15ii5lZSZ8iMiąK151MWISnęaiWN8SAwi158l8NlN5iAP5Ól1rSfNłWliimaN1k
pLeknAeSteE1kA1SzteA24eOO24eOOB
kFOLkrAk18OOOA25WOO25iOOB
DODATFK218OOOi28OO2iOOB
FRITZ1iOOO19iOO98OOA
i8RiiA1likfN7liifW1kl4l11Z88k58iaPl581iPkli88W88Klwzi8lilil888a1il5KaSirSkSli888c87NWifN8llR7Sfil51iaS1ai5z
RAZEMc6OeOO
S1łieaii7i1lSlii8l8Pi18tAKMizSĄWkrSłl888KPli8SfiWW1WkllPc88888Ark8iia8SllWifNllSl88a888kSfkaNPS1i5iz8Nn1Z
SPROPiAZ9eOOPTU238OO%1ę68
SP8OPiBc51eOOPTU88OO%3N78
SUMAPTU5846
iR5kSi17NłiW1885M8k8Y8i88lW7l888l858lilPiPW8ii78Nz8i8BA8liMi8iR8W8ilSNlSJiKNiGP85laP8i8lz8NPNMi7Nl1lPlP
SUMAc8PLN6O8OO
ii1ifllliKN51lNZlNniMNni8SrilMliiNiAlMil88il8l88kP88888k88f8Pkl8lwPkN8PlłzS1kkłSala8iknNrlMii17
F12O7898122Z24
8NiS5111ialf1irikMeP1rWUWPNz1WW8kłl8rii8SiPlSAailSZif8lP8i8l885lNrkPSMPmY88Wl5aW8l881PiN88kiJii5GMwł
OAD7F12A1328B4AD8C26AD7BUE6F2BO9r4
9BEB1215O283
6OtÓWkA16O8OO

Paragon 2:

Wynik działania:

TESCoZPoLSKAZSpizklRoi
kll8KapelarNka5623088347Kraków
lkłP8lRllRwAiPml88klMw8RlR8a888kęl8888PWM8888RW818P8888PMMP8MPMA88k8W
lJESCoSUpermar1ket8kzSMBloKlie
ullPorliatowskiego2fł05M87OBlonie
NIP526l10w37YZ37
2017M03fo312c4514008
PARAGoNFTSKALNy
BAToNKTNoER23GA1x12491149A
PAPRyKACZERWoNAaDO2798x9z997K97O
KETCHUPoGNIS8450G1x5l295l29B
CFlLEBFITNES3o0g1x32793i79D
Poclsumaz18254
lll88Rk4Wkl8WMl18i4lęk
SPRzEDAżoPoDAlMKoWANAA1i49
PTUA23A00x0i28
SPRzEDAżoPODATKoWANAB5i29
PTUB8l00kol39
SPRzEDAżoPoDATKoWANAD11176
PTLlD5ł00k0R56
SUMAPTU1R23
SUMAPLN18i54
oo26380005100226720171M03lO312c45
9o4461FD262A1852AD407E125C8O16Kl2AB89746B
ecBR160131I356
GoTóWKA20100PLN
RESZTA1k46PLN
Nrtransakcjiz267
DoŁĄCZDolK3LUBCARDi
BędącczłonkiemmógłbYÓotrizymać
9pkt
zatenparagon
wwwKtescoiplTnfolinia800105104
ParWagorlupr1aszczazłożerAlieklieklamacji
NrrejestrowyGIośEooO2020WBW

Jedna myśl w temacie “It’s (almost) alive!”

  1. Wow fajne wyniki już masz w programie. Podrzucę kilka rad od siebie.

    Warto wyciągnąć z kilku-kilkunastu paragonów obrazy liter po segmentacji, tak jak to robisz do rozpoznawania, ale zapisać gdzieś do plików i samemu oznaczyć te dane. Dzięki temu masz więcej danych jako wzorce, a więcej wzorców to lepsza dokładność algorytmu. Dobre algorytmy OCR maja po kilkanaście wzorców tej samej litery.

    Drugą fajną rzeczą którą możesz zaimplementować to testy. Zaśmiał ręcznego skanowania paragonów, możesz wywołać odpowiednią funkcje że znanymi literami i sprawdzać czy je dobrze program kwalifikuje. Ja w swojej pracy inż robiłem tak. Zbiór wzorców dzieliłem losowo na dwa pod zbiory 70% uczący, którym uczyłem klasyfikator czyli u ciebie pod zbiór do liczenia korelacji i 30% testowy na którym testowałem dokładność, czyli każdego wzorca z tego pod zbioru sprawdzasz co wypluje ci korelacja. Jest to tak zwany k cross validation test. Łatwy do odpalenia i daje wyniki które łatwo interpretować.

    Drugi test na danych który mogę polecić to all against one test. Jest odmiana k krótkiej krzyżowej walidacji opisanej wyżej z jedną zmianą. Zamiast podziału 70-30, wyciągasz ze zbioru jeden wzorzec i sprawdzasz go na klasyfikatorze (u ciebie pod stawiasz do korelacji) na uczonym na pozostałych wzorcach. I powtarzasz to dla każdego wzorca w zbiorze. Ten wydawało by się że jest optymistyczny bo wzorzec jest na uczony prawie wszystkimi wzorcami i powinien działać jak najlepiej. Jednak pokazuje przypadki najbardziej odstajace i najtrudniejsze do zaklasyfikowania. Warto sobie wypisać te wzorce dla których nie przechodzi test.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *