Robottiohjelmoinnin harjoitustyö : Konenäkö
Konenäkö
Koska NXT:n perussensorit eivät sisällä kameraa, on robotti näkökykynsä puolesta varsin rajallinen. On kuitenkin mahdollista käyttää esimerkiksi web-kameraa tai kännykkää robotin "silmänä" siten, että kuva analysoidaan NXT:n ulkopuolisella laitteella. NXT:lle on olemassa myös kohteiden seuraamiseen pystyvä kameralisäsensori, mutta tämä on varsin tyyris, eikä lopulta kykene samaan mihin tavallinen webcami sopivan ohjelmiston kanssa. Erillisen tietokoneen käyttäminen mahdollistaa lisäksi muiden lisälaitteiden, verkon ynnä muun käyttämisen robotissa. Esimerkiksi Xbox 360 -konsolin Kinect-lisälaitteella saadaan infrapunaprojektiolla ja -kameralla syvyystietoa näkymästä, mikä parantaa havainnointia entisestään. Tästä löytyy lupsakka video.
OpenCV on Intelin kehittämä avoimen lähdekoodin konenäkökirjasto, jossa on runsaasti toiminnallisuutta kaikenlaiseen kuvankäsittelyyn ja kuvien tulkitsemiseen:
OpenCV (Open Source Computer Vision) is a library of programming functions mainly aimed at real time computer vision.
Example applications of the OpenCV library are Human-Computer Interaction (HCI); Object Identification, Segmentation and Recognition; Face Recognition; Gesture Recognition; Motion Tracking, Ego Motion, Motion Understanding; Structure From Motion (SFM); Stereo and Multi-Camera Calibration and Depth Computation; Mobile Robotics.
OpenCV:n mukana tulee esimerkkiohjelmia, joilla pääsee nopeasti alkuun. Kielenä on C/C++ tai python, mutta Java-wrapperi (JavaCV) on olemassa. Esimerkkiohjelmista huomionarvoisin on facedetect, jota voi käyttää erilaiseen hahmontunnistukseen. Paketin mukana on valmiita luokittelijan treenitiedostoja muun muassa kasvojen ja vartalon osien tunnistamiseen. Toimintaperiaate wikipediassa.
Lisäksi on runsaasti OpenCV:tä laajentavia lisäkirjastoja kuten cvblob tai cvBlobsLib, jotka on tarkoitettu erilaisten muotojen ja kappaleiden tunnistamiseen kuvasta.
OpenCV:n asennus
OpenCV kannattanee asentaa paketinhallinnasta (Linux) tai lähdekoodista kääntämällä, johon ohjeet esimerkiksi tällä sivulla on todettu toimiviksi. Lähdekoodista kääntäminen voi olla tarpeen jos aikoo käyttää JavaCV:tä, koska tämän kirjoittamisen hetkellä JavaCV ei toiminut uusimman 2.2.0-version kanssa, mutta 2.1.0:n kyllä. JavaCV:n kanssa huomattavaa on myös, että SSE-tuki pitää kytkeä käännösvaiheessa pois (ccmake ja valikosta kaikki SSE-optiot pois ennen kääntämistä).
Kun OpenCV on asennettu, kannattaa kokeilla mukana tulleita ja netistä löytyviä esimerkkejä. facedetect-ohjelmaa kutsutaan seuraavasti:
./facedetect --cascade=/usr/share/opencv/haarcascades/haarcascade_frontalface_alt.xml --scale=3 0
Tässä määritellään käytettävä tiedosto luokittelijalle ja annetaan tunnistusikkunan koko (--scale=3), isompi luku nopeuttaa laskemista, mutta kasvojen pitää näkyä kuvassa suurempina jotta ne tunnistetaan, 1 on miniläppärillä melko hidas. Jälkimmäinen numero on kameran indeksi, jonka voi jättää pois ellei halua jonkin muun kuin ensimmäisen kytketyn kameran käyttöön. Lisäksi on mahdollista määritellä syvemmän tason luokittelutiedosto (esim. kasvoista silmät) parametrilla --nested-cascade=/usr/share/opencv/haarcascades/haarcascade_eye.xml.
Suoraviivainen tapa käyttää konenäköä robotissa on muokata esimerkiksi facedetect-ohjelmaa välittämään koordinaatit robotille tai toiselle ohjelmalle. Pikaisesti testaus onnistuu esimerkiksi välittämällä havaittujen kohteiden koordinaatit tai muu tieto komentorivillä tekstinä ja parsia se robottia ohjaavassa toisessa ohjelmassa (leJOSin tapauksessa), joka voi komentaa robottia LCP-komennoilla USB:ta tai Bluetoothia käyttäen. Parempi tapa on kirjoittaa NXT:lle ohjelma, joka pyytää koneelta senhetkiset tiedot ja toimii niiden mukaisesti, jotta esimerkiksi moottorien regulointia on mahdollista käyttää ja hyödyntää muita sensoreita ilman viiveitä.
- Pikareferenssi perustoiminnoille: Introduction to programming with OpenCV.
- OpenCV Beginners/Newbie Frequently Asked Questions
- Video tunneilla esitetystä häkkyrästä, joka pyrkii tähtäämään kameralla kasvoja
- Real Time Face Tracking with pose estimation on tv clips - OPENCV (Video)
OpenCV:n voi lisäksi asentaa esimerkiksi N900-puhelimeen ja Symbian-puhelimiin on olemassa myös Nokia CV, joka on Nokian mobiilikonenäkökirjasto S60:lle.