Konenäkö lukee, käsittelijä kiittää!

Teemu Hyytiäinen
KelaLab
Published in
3 min readFeb 2, 2021

Kela vastaanottaa vuodessa noin 14 miljoonaa liitetiedostoa. Osa tulee perinteisellä postilla ja Kelassa ne skannataan tietojärjestelmiin. Loput tulevat digitaalisessa formaatissa asiointipalvelun kautta, ja niistä on tunnistettavissa karkeasti kahta eri tyyppistä liitettä. Ensimmäisenä ovat verkkopalveluista ladatut tiedostot ja toisena tulostetuista papereista otetut valokuvat. Riippumatta minkälainen tiedosto on kyseessä, tulisi sen tiedot saada mahdollisimman helposti luettavaan muotoon käsittelyä varten, jotta voimme mahdollistaa asiakasprosessien mahdollisimman sujuvan läpiviennin.

Mika Myllyvirta yksiköstämme toteutti kokeilun, jossa otimme koneluettavaksi erilaisia liitetiedostoja (niiden tiedot olivat testidataa, joten kuvia kokeilusta voi jakaa täälläkin). Osa oli skannattuja ja hyvälaatuisia, kun taas osa oli kännykkäkameralla otettuja ja heikompilaatuisia. Kuten alemmasta kuvasta voidaan huomata, liitteiden laatu vaihteli hyvin paljon.

Kuvia liitteistä, jotka on otettu skannaamalla ja hyvällä, sekä huonolla puhelimen kameralla.
Testidatalla täytettyjä liitetiedostoja

Ensimmäinen haaste oli se, että kuvatiedostot ovat bittikarttoja. Yleensä myös PDF-tiedostot ovat bittikarttoja eivätkä tekstitiedostoja. Tekstitiedoston lukeminen olisi huomattavasti helpompaa. Onneksi kuvatiedostojakin voi tulkita tekstiä hyödyntämällä OCR-ratkaisua (Optical Character Recognition). OCR tunnistaa kuvasta merkkejä, ja niitä yhdistämällä saadaan aikaan tekstiä, kuten alemmassa kuvassa on esitelty.

Kuva liitteestä, joka on otettu puhelimella. -> Liitteen kaikki tiedot on kirjoitettu yhdeksi merkkijonoksi.
Kuvasta tuotetaan tekstiä

Tämä yksistään ei juurikaan auta, koska näin tuotettu teksti on ihmiselle vähintäänkin yhtä vaikeaa ja hidasta tulkita kuin alkuperäinen kuva. Tämän takia tekstiä tulkitaan erilaisten mallien ja rakenteiden avulla. Näin voidaan etsiä tekstistä haluttuja merkkijonoja, kuten esimerkiksi henkilötunnuksia, tai päivämääriä. Mallin mukaisia merkkijonoja voi olla dokumenteissa useita ja tämä tuottaa hieman haasteita. Pelkän merkkijonon avulla ei voida tietää merkkijonon koko merkitystä, vaan useimmiten pitää myös tietää mihin merkkijono liittyy. Tämän toteuttaminen kokonaiselle kuvatiedostolle on kuitenkin hyvin vaikeaa.

Seuraavassa iteraatiossa toteutettiin samankaltaista tekstin tunnistamista. Erona oli, että kerroimme mistä päin kuvaa tekstin pitäisi löytyä, joten tekstiä etsittiin vain siltä alueelta. Alla olevasta kuvasta näkee, kuinka punaisilla laatikoilla on ensin kerrottu mistä teksti löytyy. Tämän jälkeen OCR tulkitsee kuvasta merkkijonot.

Kuva liitteestä -> kuva liitteestä, johon on merkitty luettavat kohdat -> valittujen kohtien tekstit merkkijonona.
Kuvaan merkattiin tekstikentät tulkitsemisen helpottamiseksi

Tämä toimii hienosti skannatuille ja hyvälaatuisille tiedostoille, koska teksti löytyi aina samasta kohdasta. Ongelmia tuottivat kuvat, joissa koordinaatit eivät täsmää. Eli käytännössä ne kuvat, joissa lomake on esimerkiksi vinossa tai kuvattu kauempaa. Nämä kuvaliitteet tulee ensiksi suoristaa, jolloin ne näyttävät skannatuilta. Suoristamisella tarkoitetaan tässä asiayhteydessä kuvassa olevan paperin rotaation ja perspektiivin korjaamista, sekä paperin sovittamista samaan kokoon mallin kanssa.

Suoristaminen aloitetaan tunnistamalla alkuperäisestä mallista yksilöllisiä graafisia ominaisuuksia. Tähän on kehitetty muutamiakin algoritmejä. Osa on avoimen lähdekoodin ja osa patentoituja. Testasimme kolmea algortimia ORB, SIFT ja SURF. Näistä SIFT oli tarkin tunnistamaan yksilöllisiä graafisia ominaisuuksia. Lisäksi testasimme kokeilun jälkeen AKAZE, joka osoittautui jopa SIFT:iä nopeammaksi ja tarkemmaksi ominaisuuksien tunnistamisessa. Alla olevasta kuvasta näkee, kuinka alkuperäisestä mallista on tunnistettu graafisia ominaisuuksia, joita verrataan vastaanotetun liitteen ominaisuuksiin.

Kuva malliliitteestä ja puhelimella otetusta liitteestä. Mallista on tunnistettu graafiset tunnisteet, joita verrataan.
Liitteen yksilöllisten graafisten ominaisuuksien vertaaminen mallin ominaisuuksiin

Mallista tunnistettiin 2500 ominaisuutta ja liitteestä 73 000. Kun näiden ominaisuuksien etäisyyttä verrataan toisiinsa, voidaan löytää parhaiten hyödynnettävät ominaisuudet. Näitä löytyi noin 1200. Tämän jälkeen voitiin aloittaa liitteen suoristaminen ja vääntely, jotta liite muistuttaa mahdollisimman paljon mallia. Alla olevasta kuvasta näkyy, kuinka liitteestä saadaan mallia muistuttava.

Vasemmalla kuva puhelimella otetusta liitteestä. Keskellä kuva on paranneltu vasemman puoleisesta. Oikealla malliliite.
Vasemman puoleisesta liitteestä suoristetaan keskimmäinen kuva. Oikealla mallipohja

Tämän jälkeen voitiin toteuttaa jo aikaisemmin kerrottu tekstin tunnistaminen vain ennakkoon määritellyistä sijainneista.

Miksi tätä sitten tehtiin? Koska liitteitä saapuu Kelaan todella paljon vuosittain, on tärkeä optimoida toimintaamme liitteiden suhteen. Ensimmäinen hyödyntämiskohde on liitteiden kääntäminen ja pienentäminen. Kelan käsittelijät joutuvat jatkuvasti kääntämään liitteitä niitä lukeakseen. Tämä ei kuulosta hitaalta tai työllistävältä työvaiheelta, mutta liitteiden määrä huomioiden jo yksistään tämä säästää Kelassa merkittävästi työtunteja ja nopeuttaa käsittelyä.

Jos liitteiden tunnistamisen hyötyjä ajatellaan pidemmällä aikavälillä, ei käsittelijöiden tarvitsisi jatkossa katsoa tietoja liitteistä. Asiakkaiden toimittamat tiedot voitaisiin tuoda käsittelyn pohjaksi, mikä vähentäisi manuaalityötä ja nopeuttaisi etuuskäsittelyprosessia.

--

--