Tekoäly vedenkulutuksen jäljillä

Optical character recognition (tekstintunnistus) on jo vanha tekniikka, mutta uusia käyttökohteita sille keksitään varmasti jatkuvalla syötöllä. Kaikille lienee tuttu aihe esimerkiksi ajoneuvon rekisterikilven koneellinen lukeminen tai postin lajittelu koneellisesti. Molemmissa tapauksissa syötteestä tunnistetaan automaattisesti tekstiä.

Periaatehan OCR:ssä on hyvin yksinkertainen; se on joko mekaaninen tai sähköinen prosessi, jossa pyritään tunnistamaan tekstiä ja saattamaan se käyttäjälle helpompaan muotoon. Normaalisti se helpompi muoto on digitaalinen muoto, mutta aikanaan on käytetty myös esim. äänimerkkejä (savumerkeistä en tiedä).

Omat OCR-kokeiluni olen aloittanut noin kymmenisen vuotta sitten. Tein silloin kotiautomaatioprojektia, jossa halusin myös vesimittarin lukeman digitaaliseen muotoon – ja mieluiten reaaliajassa. Tuossa tapauksessa en käyttänyt mitään valmiita kirjastoja, vaan “opetin” koodini tunnistamaan vesimittarissa käytettävät numerot. Siihen aikaan se oli vielä mekaaninen rullamittari. Hieman nihkeää pikselitason koodailua, mutta toimiva tuli. Ja reaaliajassa lukemat sai kiinni, kun webbikamera oli asennettuna vesimittarin päälle ja kameran livekuvasta tehtiin frame kerrallaan tunnistusta.

Nykypäivänä voidaan helposti tehdä tekstintunnistussovelluksia, joissa käytetään valmiina olevia OCR-tekoälykirjastoja. Nämä kirjastot ovat opetettu tunnistamaan erilaista tekstiä ja tukemaan eri kieliä. Samoissa kirjastoissa saattaa olla tuki myös muulle kuin OCR:lle, vaikkapa hahmontunnistus. Osa kirjastoista on myös sellaisia, että niitä voidaan jatko-opettaa. Esimerkiksi puuttuva kielituki saadaan, kun opetetaan uusi kieli itse. Näiden kirjastojen käytöllä oman koodin tuottamisen tarve on vähäinen ja (tekoäly)projektien aloituskynnys on matalalla.

Vesimittarin luenta tekoälyvälineillä

Palasin joku aika sitten tuohon omaan vanhaan projektiini ja päätin testata, miten helppoa on vesimittarin luenta nykypäivän tekoälyvälineillä. Mittari on siis tällä välin vaihtunut Kamstrupin Multical 21 ultraäänimittariksi, jossa on digitaalinen näyttö ja langaton M-Bus -väylä. Maksuttomia OCR-kirjastoja löytyi pikaisella haulla muutamia. Valitsin testiin Tesseract:n kirjaston, joka on toimivaksi todettu ja jonka jatkokehitystä nykyään Google sponsoroi. Itse koodailen C#:lla Visual Studiossa, joten Tesseract:n (.Net wrapper) mukaan ottaminen on helppoa Package Managerin avulla; Install-Package Tesseract. Lisäksi tarvitaan USB-porttiin liitettävä kamera tai IP-kamera ja kameran lukemiseen joko omaa koodia tai ulkoinen kirjasto. Oman koodin sijaan päädyin kokeilemaan kameran kaverina OpenCVSharp3 -kirjastoa. Package Managerilla saa OpenCVSharp3 -kirjastonkin mukavan helposti mukaan; Install-Package OpenCvSharp3-AnyCPU.

Softan tekemiseen en syvenny tässä sen tarkemmin, mutta periaate on suoraviivainen; liitytään USB-kameraan, suoritetaan kuvakaappausta tietyllä syklillä tai livenä, käsitellään tarvittaessa kaapattua kuvaa, jotta OCR-kirjasto saa kuvasta selvää ja lopputulos saadaan välitetyn kuvan mukaisesti OCR-kirjaston vastauksena.

Itse testijärjestelmän pystytys on nopea; USB-kamera kiinni vesimittarin yläpuolelle, valaistus kohdilleen ja softa rullaamaan läppärille. Tosin tuon valaistuksen kanssa sai taistella melko paljon, koska vesimittarin päällä on lasi, johon tulee helposti heijastuksia ja digitaalisen mittarin ollessa kyseessä, niin numerotkin ovat melko “ohkaisia”.

Mikä oli sitten testauksen lopputulos? Jos lähdetään liikkeelle OpenCVSharp3 -kirjaston käytöstä USB-kameran kanssa, niin se toimi juuri niin kuin pitikin. Helppo käyttää ja omaa koodia tarvitaan melko vähän. Tesseract -kirjaston peruskäyttö on myös helppoa ja oman koodin tarve vähäinen. Tesseract on kuitenkin hirveän tarkka sisään menevästä syötteestä. Jos teet itse kuvan vaikkapa Paintilla ja laitat kuvaan tekstiä (ja vieläpä suoraan), niin sellaisen Tesseract tunnistaa virheettömästi. Jos taasen kuva tulee heikkolaatuiselta USB-kameralta livenä, niin kuvalle pitää tehdä monenmoista käsittelyä, että Tesseract tunnistaa siitä edes jotain. Suurin aika tässä testissä menikin kuvanlaadun säätämiseen ja kuvankäsittelyn koodaukseen.

Yhteenvetona voi todeta, että OCR:n käyttö livekameran kuvan kanssa on melko nopeaa ja helppoa, mutta kuvanlaatuun tulee panostaa. Jos kuvanlaatu olisi ollut hyvä, niin tekoälyn kanssa oman koodin tarve on vain murto-osa vanhaan vastaavaan toteutukseen verrattuna.

Nykyisin kaikissa uusissa vesimittareissa alkaa olemaan etäluentaominaisuudet toteutettuna esim. M-Bus -väylällä. Mielestäni kaikille käyttäjille, riippumatta kunnasta tai vesiosuuskunnasta, pitäisi tarjota mahdollisuus liittää uusi älykäs vesimittari lähiverkkoon, jolloin mittaukset saataisiin reaaliajassa. Tämä vähentäisi entisestään vesihuollon tarvetta ajella autolla ympäri kyliä lukemassa ”etämittareita”. Wireless M-Bus -väylän luentaetäisyyshän on kymmenistä satoihin metreihin, riippuen rakenteista ja kelistä. Ja mikä parasta, reaaliaikamittauksella saataisiin uutta dataa ja pohjaa uusille palveluille – vaikkapa softapohjainen vesivuotovahti.

Jos aihe herätti ajatuksia tai ideoita uusista projekteista, niin otapa yhteyttä!

Risto on Oiwan teknologiajohtaja, jolla on taipumusta luovaan ajatteluun ja tekemiseen. Tutustu Ristoon lisää täällä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *