Blogi — — Risto

*Beep boop* Norppa tunnistettu!

Kiinnostaako norpat, mutta aika ei riitä Norppaliven kyttäämiseen? Norppalivebot tulee apuun konenäön ja neuroverkkojen avulla!

Norppamikä?

WWF julkaisi tänä vuonna uudestaan viime vuoden kesähitin, Norppaliven. Sivu keräsi ensimmäisinä päivinä kymmeniä tuhansia katsojia, vaikka norppaa ei ollut edes näkynyt. Kaikilla ei kuitenkaan ole aikaa tuijottaa ruutua koko päivää, joten sain idean tehdä botin joka tutkii norppaliveä, yrittää tunnistaa siitä norppia ja ilmoittaa niistä Twitterissä. Näin syntyi aito ja alkuperäinen @norppalivebot.

Alunperin koko projekti lähti hauskana vitsinä miten käytän vapaa-aikaani. Toimistolla kuitenkin todettiin Norppaliven julkaisupäivänä: ”Olen todella pettynyt, jos meillä ei huomenna ole toimivaa norppabottia”. Noin tuntia myöhemmin botin prototyyppi oli valmis. Tarkoitus oli pitää matalaa profiilia kunnes botin toiminta on varmistettu, mutta parissa päivässä sillä oli jo satoja seuraajia. Vajaassa kahdessa viikossa seuraajia on ilmestynyt lähes 1000.

Lauantaina 20.5. nukuin normaaliin tapaan myöhään ja ihmettelin, kun puhelin surisee jatkuvasti. Nousin kahdentoista jälkeen ylös ihmettelemään ja huomasin, että Norppalivebot oli tehnyt ensimmäiset oikeat tweettinsä ja norppa makoili kivellä. Kymmenet ihmiset retweettailivat tätä ja seuraajia valui jatkuvasti lisää. Ilmeisesti joskus ohjelmat toimivat oikein testaamatta. Ihmeellistä.

Miten tämä kokonaisuus sitten toimii? Koko roska pyörii hyvin pienen node.js–ohjelman päällä ja nappaa kuvia FFMpeg-mediakirjasolla. Kuva lähetetään Amazon AWS Rekognition –palveluun Amazonin API-kirjastojen avulla ja pyydetään kuvan ”labelit”. Labelit sisältävät tietoa siitä, mitä tekoälyn mielestä kuvassa on. Tavanomainen vastaus näyttää jotakuinkin tältä:

Mitään avaruusnorppia tai taistelulaivoja kuvasta ei kuitenkaan valitettavasti löydy, vaan kuvassa mainittu 2017-05-23-203143.png näyttää tältä:

Jos labeleista löytyy ”Seal” tai ”Sea Lion” vähintään 80% varmuudella, botti lähettää kuvakaappauksen sekä satunnaisen viestin ennalta määritellystä listasta Twitteriin. Tämän jälkeen botti odottaa tunnin ennen kuin tarkistaa norppaliven kuvia uudestaan, ettei Twitteriin tule liikaa viestejä. Uusi tweetti lähetään kuitenkin vasta sen jälkeen kun on todettu, ettei norppa enää ole kuvissa. Botti tallentaa myös kuvia, jossa varmuus on alle 80% tai jos labeleista löytyy jotain muuta mielenkiintoista, kuten ”Animal”, ”Bird” tai ”Mammal”. Jos norppia ei näy, odotetaan 2 minuuttia ja otetaan uusi kuva.

Lähdekoodi on julkaisut MIT-lisenssillä ja löytyy osoitteesta https://github.com/Dilaz/Norppalivebot

Norppabotti v2.0 enhanced edition

AWS Rekognition on kuitenkin maksullinen palvelu, josta maksan henkilökohtaisesti, joten se ei ole optimaalinen ratkaisu. Vaihtoehtona on pyörittää tunnistusta omalla Raspberry Pi 3:lla, joka sattuu lojumaan tällä hetkellä käyttämättömänä. Mutta entä se tunnistus?

Koneoppiminen on kehittynyt valtavasti lähivuosina. Nykyään löytyy valtava määrä erilaisia koneoppimis- ja neuroverkkokirjastoja, joista itse olen kiinnostunut lähinnä Googlen omasta Tensorflow-kirjastosta. Tarkoitus on opettaa neuroverkko tunnistamaan norppia kaatamalla sen päälle riittävästi dataa. En kuitenkaan ole vielä ehtinyt tekemään toimivaa norppatunnistinta, ja se saattaisi aiheena olla oman blogikirjoituksensa arvoinen, joten siitä ei sen enempää tällä kertaa.

Loppukaneetti

Koodi ei ole kovin hyvätasoista, koska se on tehty lähinnä prototyypiksi. Tarkoitus olisi tehdä täysin itsenäinen norppatunnistin Tensorflow’n avulla joka vaatii koko ohjelman uudelleenkoodaamista. Tätä tuskin saan enää valmiiksi tämän vuoden Norppaliveen, mutta ehkä sitten ensi vuonna.

Kiitän kaikkia seuraajia luottamuksesta bottiin, toivottavasti siitä on teille iloa!

Bonus: Taiteen historiaa norpan kanssa

Neuroverkoille voi opettaa erilaisia taidetyylejä ja siirtää ne kuvasta toiseen esimerkiksi https://github.com/lengstrom/fast-style-transfer avulla. Tässä on muutama video, jossa Pullervo rapsuttaa itseään erilaisissa taidetyyleissä.

Rain Princess, Leonid Afremov

The Great Wave off Kanagawa, Katsushika Hokusai

Udnie (Young American Girl, The Dance), Francis Picabia

La Muse, Pablo Picasso

Risto Viitanen Ohjelmistosuunnittelija