Pirkuma čeki
Foto: Adobe Stock
Cilvēkam, skatoties uz pirkuma čeku, pietiek ar dažām sekundēm, lai saprastu – kāda prece vai pakalpojums iegādāts, no kāda uzņēmuma, kad un kāda bija kopējā summa. Taču kā ir tad, ja gribam iemācīt to pašu datoram? IT nozares studentam Viktoram tas prasīja vairākus mēnešus. Viktora bakalaura darbs lieliski parāda, cik daudz darba tiek ieguldīts šķietami vienkāršās lietotnēs – tajās, kuras mēs lejupielādējam bez maksas, un tad vēl daži no mums raksta skarbus komentārus izstrādātājiem.

Viktors Sokolovs (attēlā zemāk) radījis sistēmu, kura veic personisko izdevumu uzskaiti, izmantojot optisko rakstzīmju atpazīšanu (optical character recognition – OCR). Sistēma sastāv no mobilās lietotnes, ar kuru var nofotografēt un reģistrēt pirkuma čeku, un web lietotnes, kurā var redzēt apkopotu informāciju par saviem tēriņiem. Sistēma no čeka var "izvilkt" tirgotāja vai pakalpojumu sniedzēja nosaukumu, pirkuma kopējo summu, pirkuma datumu, un tad ievietot datus par šiem izdevumiem attiecīgās kategorijās.

Darbu novērtē

Šo projektu Viktors ir aprakstījis un aizstāvējis, iegūstot bakalaura grādu Transporta un sakaru institūtā (TSI). Darbu atzinīgi novērtēja ne tikai augstskolas eksaminācijas komisija, bet arī "ZIBIT 2020" konkursa žūrija – Viktora darbs izpelnījās godalgotu vietu, un pats jaunietis, kā arī darba zinātniskā vadītāja, TSI asociētā profesore Irina Pticina, saņēma īpašas stipendijas.

Konkursu "ZIBIT" organizē "RTU Attīstības fonds" sadarbībā ar "Accenture" Latvijas filiāli un SIA "TietoEVRY in Latvia". Konkursā tiek apbalvoti seši labākie IT nozares studiju noslēguma darbu autori un darbu vadītāji.

"Konkurss ir pērļu zvejnieks," saka nodibinājuma "RTU Attīstības fonds" izpilddirektore Anita Straujuma un turpina: "Šajā daudzu zinātnisko darbu jūrā jāatrod izcilākie jaunieši, kuri ne tikai ir aizrāvušies ar tēmu, bet ir arī drosmīgi par to pastāstīt." Lūk, viena no pērlēm izrādījās Viktora darbs "System Development For An Accounting Of Personal Expenses Using Optical Character Recognition".

Foto: Publicitātes foto
Viktors stāsta, kā radās ideja tieši tādam projektam: "Vēlējos rakstīt bakalaura darbu izmantojot datorredzes tehnoloģijas, ar kurām arī iepriekš nedaudz strādāju. Sākotnēji profesore Pticina piedāvāja izveidot lietotni, kura no pirkuma čekiem reģistrētu informāciju par iegādes datumu un pēc tam informētu lietotāju par to, kad precei beidzas garantija.
Es sāku pētīt pieejamās iespējas, bet starpposma rezultāts bija pārāk nekvalitatīvs, tostarp tādēļ, ka bija grūti atpazīt datus no čekiem latviešu valodā. Tad radās ideja uzlabot OCR tehnoloģijas iespējas tieši latviešu valodā.
Bija ideja fotografēt čekus no pārtikas veikaliem, iegūt no tiem visu ar produktiem saistīto informāciju, un tad kādā veidā analizēt to, izmantojot mašīnmācīšanos. Testi parādīja, ka programma pārāk bieži pieļauj kļūdas, atpazīstot produktu nosaukumus. Sapratu, ka vajadzēs pārāk ilgu laiku, lai sistēmu apmācītu, jo vēlējos sasniegt labu darba kvalitāti. Beigās nolēmu veidot projektu izdevumu uzskaitei, jo tad no čekiem ir jāiegūst mazāks datu apjoms, kā arī datus ir vieglāk iegūt, piemēram, kopējā pirkuma summa uz čeka parasti ir kādā veidā izcelta."

Kā tas strādā?

Skan vienkārši, bet kādi mehānismi ir sistēmai "vēderā"? Tātad, ar mobilo lietotni lietotājs fotografē pirkuma čeku, tālāk bilde tiek nodota serverim, kur tiek apstrādāta. Attēlam noņem fonu, gaismas atspīdumus un pēc iespējas arī visu pārējo vizuālo "troksni", līdz paliek tikai melni simboli uz balta fona. Sagatavots attēls tālāk tiek nodots OCR bibliotēkai, kura veic teksta atpazīšanu.

Rezultātā sistēma iegūst nestrukturētu tekstu, no kura mēģina izdalīt vajadzīgos datus. Piemēram, meklējot vārdu vai vārdus pēc burtiem "SIA" vai "AS", var uzzināt kompānijas nosaukumu un pēc tam noteikt preces vai pakalpojuma tipu. Pirkuma kopējo summu meklē pēc atslēgas vārdiem "kopā", "summa" utt. Datumu atrast ir vieglāk, jo tas tiek meklēts pēc noteikta formāta. Ja uzņēmuma nosaukums tiek atpazīts pareizi, sistēma var atrast tā darbības jomu un attiecīgi arī noteikt, pie kādas izdevumu pozīcijas šie tēriņi ir pieskaitāmi. Lai izpildītu šo uzdevumu, sistēma pati fona režīmā atrod informāciju interneta vietnē "1188.lv". Piemēram, ja pārdevēja nosaukums ir SIA "Maxima Latvija", uzziņu portālā atrodams, ka uzņēmuma nozare ir "Pārtikas tirdzniecība", tātad tēriņus var pieskaitīt pie kategorijas "Pārtika".

Tiesa, visus datus ik reizi atpazīt ar 100% precizitāti neizdodas. "Programma var sajaukt dažus burtus. Bieži jauc "o" un "u", jo otrajam burtam augšā ir pavisam neliels attālums starp līnijām. Cilvēks var saprast starpību, bet dators ne vienmēr," Viktors min piemēru. Viens no iemesliem ir tas, ka kases čekiem drukas kvalitāte bieži vien ir ne pārāk laba, pie tam burti un cipari diezgan ātri var izbalēt. Jāņem vērā arī tas, ka, pat glabājot makā, čeks tomēr var izrādīties mazliet saburzīts tajā brīdi, kad to fotografēs. Jo vairāk papīram būs defektu, jo būs grūtāk sistēmai strādāt ar čeku.

Foto: Adobe Stock

Programmu var "izvilkt" informāciju no čekiem dažādās valodās. Attēlā – čeki par norēķiniem Polijā.
Tad vēl ir liels jautājums ar fontiem. "Ir grūti nosaukt vidējo rādītāju veiksmīgai atpazīšanai, jo tas ir ļoti atkarīgs no čekā izmantotā fonta. Dažādu veikalu izvēlētie fonti var stipri atšķirties," skaidro projekta autors.
Cilvēkam nav lielas starpības, kādā fontā ir informācija (ja tikai tas nav pavisam eksotisks), bet datoram gan ir jāpielāgojas pie katra fonta atsevišķi.
Viktors saka, ka ideālā situācijā būtu jāzina, kādu konkrētu fontu čekos lieto katrs uzņēmums, tad jānopērk šī fonta oficiālā versija, un tad uz šīs bāzes jāapmāca valodas modelis atpazīt informāciju. Protams, šī ideālā versija prasītu tik daudz laika un naudas, ko students vienkārši nevar atļauties. Viktors piemeklēja tīmeklī pēc iespējas līdzīgākus fontus, kuri bija pieejami bez maksas, un izmantoja savā darbā tos. Jāpiebilst, ka sistēmu vajag apmācīt atpazīt burtus un ciparus ar dažādu veidu kropļojumiem, jo, piemēram, lietotājs katru reizi fotografēs čeku no nedaudz cita leņķa. Ja zinām, ka sākuma fonts jau nesakrīt par 100%, tad turpmākais rezultāts vēl attālinās no ideālajiem 100%.

Visu, ko izdevās atpazīt no čeka, sistēma atspoguļo web inerfeisā. Lietotājs var izlabot kļūdas, ja tādas ir bijušas. Izmantojot pieejamos datus, sistēma izveido un rada lietotājam divus grafikus: pirmajā redzama kopējo tēriņu summa katrā mēnesī tekošajā gadā, otrajā – uz kādām preču vai pakalpojumu kategorijām procentuāli, cik naudas bija iztērēts.

Vajadzēja sistēmai iemācīt labāk lasīt latviski

Viens no grūtākajiem uzdevumiem šajā projektā bija uzlabot valodas modeli tieši latviešu valodai, lai sistēma varētu veiksmīgi strādāt ar čekiem no Latvijas uzņēmumiem. OCR bibliotēka "Tesseract", kuru izmantoja Viktors, ir piemērota visām valodām, bet ne vienlīdz labi. Tas, cik labi strādā atpazīšana konkrētai valodai, ir atkarīgs no laika un datu apjoma (tekstu piemēru skaita), kas kopumā tiek veltīts šīs valodas modeļa apmācībai. Līdere, protams, ir angļu valoda, jo tieši šī modeļa trenēšanai pievēršas visvairāk cilvēku pasaulē. Sava darba rezultātu uzlabošanai Viktoram nācās ieguldīt daudz laika un pūļu, lai vairāk uzlabotu latviešu valodas modeli.

Teorētiski pastāv valodas modeļa apmācības manuālais variants, kad modelis tiek apmācīts tieši uz to datu pamata, ar kuriem sistēma strādās. Šajā gadījumā vajadzētu nofotografēt ļoti daudz kases čeku un pēc tam bildēs "iezīmēt" katru simbolu, lai dators saprastu, ka tieši šis ir burts "a" un šis – "z". Var tikai iedomāties, cik gadu Viktoram vienam pašam vajadzētu veltīt tikai šim uzdevumam.

Par laimi, kā atklāj Viktors, šo darbu var automatizēt ar skripta palīdzību: "Es paņemu vairākus fontus, automātiski izveidoju lielu daudzumu PDF failu ar tekstiem šajā burtu rakstā un uzdevu bibliotēkai tos atpazīt. Bija daudz jāeksperimentē, lai uzlabotu atpazīšanas radītājus".

Interesanti, ka šie teksti cilvēkam izskatās kā tīra bezjēdzība, jo sastāv no pangrammām – katrā teikumā ir izmantoti visi alfabēta burti. Vienlaicīgi skripts ģenerē arī teksta kropļojumus, lai pietuvinātu mākslīgi izveidotus datus reālajiem. Vienam fontam kļūdas procents sākotnēji bija 75%, pēc apmācības kļuva 40%. Tas, protams, joprojām ir daudz, bet ir progress pareizā virzienā. "Viss ir atkarīgs no uzdevumam veltītā laika. Manam datoram ar esošo jaudu vēl pamatīgāka modeļa trenēšana prasītu vairākas diennaktis nepārtraukta darba. Man nebija tādu iespēju. Izdarīju to, kas bija iespējams, un arī tad rezultāts jūtami uzlabojās," skaidro Viktors.

Te var redzēt, kā samazinājās kļūdas procents pēc valodas modeļa apmācības uz atsevišķiem fontiem.

Kopā latviešu valodas modeļa trenēšanai Viktors izmantoja septiņus fontus, katram izveidojot 500 lapu ar tekstu, un veltīja šim uzdevumam vairāk nekā 24 stundas.

Darbs ar apmācītu modeli arī prasīja radošu pieeju, turpina pētnieks: "Vienā brīdī mans trenētais modelis deva sliktākus rezultātus nekā sākotnējais. Tikt galā ar šo problēmu nebija viegli. Teksta atpazīšana apvieno trīs jomas: datorredzi, mašīnmācīšanos un dabiskās valodas apstrādi. Diemžēl, ir ļoti ierobežots resursu – grāmatu, videostundu utt. – skaits par šo tēmu, tāpēc daudz ko nācās risināt eksperimentu ceļā. Beigās es secināju, ka var apvienot angļu un latviešu valodas modeļus, jo daudz burtu sakrīt, un tad rezultāti uzlabojās".

Arī citus sistēmas elementus Viktors apguva pašizglītības ceļā. Piemēram, šķērsplatformu lietotnes izveidei (lai tā strādātu gan "iOS", gan "Android" ierīcēs) nācās apgūt gan speciālas programmēšanas valodas, gan tehnoloģijas.

Ir iespējas uzlabojumiem

Jautāsiet, kur tad var lejupielādēt un izmēģināt šo sistēmu? Pagaidām vēl nekur. Viktors apsvēra iespēju uz bakalaura darba aizstāvēšanas brīdi publicēt lietotni lielākajos veikalos, bet atteicās no šīs idejas: "Lietotnes darba kvalitāte joprojām nav pietiekami augsta. Lietotāji diezgan skarbi vērtē produktus, kuri nestrādā 100% labi. Tehniski neizglītotam cilvēkam ir grūti saprast, cik sarežģīti ir atpazīt tekstu, it īpaši, ja tam ir slikta kvalitāte. Nolēmu, ka man tas nav vajadzīgs – lasīt negatīvas atsauksmes un rupjus komentārus. Speršu šo soli, kad vismaz 90% gadījumu teksts tiks atpazīts pareizi, kā arī izdosies uzlabot sistēmas darba ātrumu."

Ir skaidrs, ka, ieguldot vairāk laika un naudas, esošo sistēmas versiju var ievērojami uzlabot. Autors netaisās pie tā apstāties un plāno automatizēt valodas modeļu apmācības sistēmu un beigās pievienot sistēmai visas iespējamās valodas. Viņam ir arī ideja, kā izmainīt tēriņu kategorijas noteikšanas mehānismu, lai tas nebūtu "piesiets" Latvijas tirgum un vietnei "1188.lv". Vajadzētu izmantot dabiskās valodas apstrādes tehnoloģiju, kas ļaus noteikt kategoriju pēc atslēgas vārdiem, kuri atrodami konkrētajā čekā. "Pastāv globāli apmācīts modelis, kurš ir trenēts uz miljoniem teksta rindu, un pēc atslēgvārdiem diezgan labi nosaka kategoriju. Atkal, tas attiecas uz angļu valodu. Latviešu un citu valodu atpazīšanai būs vajadzīgs papildu darbs".

Viktors pastāvīgi strādā pie sistēmas uzlabošanas: "Man izdevās paātrināt darbu. Iepriekš katra čeka apstrādei vajadzēja apmēram 20 sekundes. Protams, man ir parasts dators, kurš nav īpaši jaudīgs, un no tā arī ir atkarīgs ātrums. Tomēr pat pie esošas jaudas es panācu, ka viens čeks tagad tiek apstrādāts 10–12 sekunžu laikā – divreiz ātrāk." Viņš turpina pētīt pieejamos avotus, lai izdomātu jaunus veidus sistēmas pilnveidei.

"Manis izveidotā lietotne ir universāla tādā ziņā, ka tās elementus var izmantot ļoti dažādos projektos, kur ir vajadzība pēc teksta atpazīšanas. Man personiski pats vērtīgākais ir pieredze, kuru saņēmu, veidojot sistēmu," secina TSI absolvents. Pēc augstskolas absolvēšanas, pateicoties šī projekta panākumiem, Viktoram izdevās atrast darbu, kas ir tieši saistīts ar viņa iemīļoto tēmu. Viņš šobrīd strādā projektā, kurā veic personas apliecinošo dokumentu – ID-karšu, pasu, vadītāja apliecību – automātisku atpazīšanu. Pateicoties Viktora un viņa kolēģu darbam, dators var pārbaudīt, vai dokumentam nav beidzies derīguma termiņš; vai dati, kuri ir norādīti rakstiski, sakrīt ar datiem, kuri ir iekodēti dokumenta tā sauktajā mašīnlasāmajā zonā; vai cilvēka fotogrāfija ir īsta, nav izmainīta grafiskajā redaktorā.

Seko "Delfi" arī Instagram vai YouTube profilā – pievienojies, lai uzzinātu svarīgāko un interesantāko pirmais!