LEGO třídička – díl třetí, třídička barev

Minule jsem psal o vytřídění kulatých dílů. Dnes se vrátím zpátky k původní třídičce. A i na neuronové sítě dojde.

Šťouchadla

Mám jenom jednu NXT sadu, tj. 3 motory. Přemýšlel jsem, jak upravit šťouchadla, aby shazovala kostky na obě strany pásu a mohl jsem tak třídit do šesti hromádek. Minulá koncepce na to nebyla moc dobrá – šťouchadlo by bylo potřeba přednastavit do správné polohy a to by mohlo shazovat dílky v nevhodnou chvíli. Navíc bych na to potřeboval opravdu dlouhé osy. Nakonec jsem použil konstrukci s LEGO pásy (přeci jen jsou k něčemu dobré 🙂 ). Aby se šťouchadlo lépe strefovalo a dílek před ním nestihl „utéct“, dal jsem k NXT motoru převod 1:3. Dílky to z pásu sestřeluje docela pěkně.

Kamera

Možnosti ovládání původní webkamery byly velmi omezené. Ani obrázky nestály za moc, tak jsem se rozhlížel, čím to nahradit. No a protože jsem se před nějakou dobou zabýval měřením hladin v nádržích pomocí RaspberryPI a protože RaspberryPI má celkem schopnou kameru, byla volba celkem jasná. Použil jsem tedy systémovou RaspberryPi kameru. Krom toho, že se u ní dá kromě jiného nastavit expoziční doba, dokážu z ní tahat 10 snímků za vteřinu (a je tam pravděpodobně ještě rezerva).

Na osvětlení jsem nějakou dobu používal (a vlastně ještě používám) modul Blinkt k Raspberry. Při ladění kamery jsem ale zjistil, že to nestačí, tak jsem přidal jeden díl LED pásky. (Tedy původně jsem přidal asi dvacet centimetrů, ale tím se obraz dokonale přepálil).

Vyhodnocování

Největší změnu jsem ale udělal v softwaru. Zahodil jsem tu srandovní Java knihovnu a začal jsem studovat Python a vícevrstvé neuronové sítě. Na začátku přednášek se říká: „Pořiďte si grafickou kartu Nvidia“. Tu jsem neměl, tak jsem to zkoušel přeprat využitím volné kapacity osmiprocesorového serveru. Večer jsem spustil výpočet a ráno jsem se dozvěděl, že výsledek je nevalný a bude potřeba to spustit znovu a lépe.

Takže jsem si po několika pokusech pronajal v cloudu server s Nvidia kartou. Jeden výpočet sítě trval asi tak 2 minuty, což už bylo zcela postačující (dneska už mám nasbíráno víc obrázků a hraju si se složitějšími sítěmi, ale do hodiny a půl se to zatím vejde).

Vyhodnocení jsem dělal na počítači bez grafické karty, čímž jsem se dostal na zpracování jednoho obrázku za vteřinu. S tím jsem si chvíli hrál, ale nakonec nezbylo, než si sehnat starou Nvidii i domů na vyhodnocování – při jednom snímku za vteřinu toho prostě příiš mnoho projede nepovšimnuto.

Naštěstí měl kolega starou Nvidii, kterou mi půjčil se slovy „mně je k ničemu, na hraní je to už pomalý“. Rychlost zpracování se dostala na deset fotek za vteřinu, což už bohatě stačí. I v tom je rezerva, teď to nejvíc brzdí čtení fotek z kamery.

Celé to teď funguje tak, že Raspberry průběžně snímá fotky a odesílá je na server s Nvidia kartou. Ten provádí vyhodnocení podle předpočítané sítě (a podle jiné sitě odhaduje polohu dílku na obrázku). Z obojího spočte zpoždění a výsledek pošle zpátky do Raspberry. Tam už je pak jen fronta pokynů pro šťouchadla, které se v pravý čas předají NXT kostce. A když se to celé povede, skončí dílek ve správné krabičce.

A jak to dopadlo?

Po několika (mnoho) pokusech se mi podařilo vycvičit vcelku funkční neuronovou síť na rozpoznávání deseti barev – Black, Blue, DBG, DkGreen, Green, L(B)G, MdBlue, Red, White a Yellow. Od dalších barev jsem neměl dost velkou vytříděnou hromádku, aby bylo na čem se učit.

Třídění není dokonalé, dělá to několik typů chyb:

  • Kostky jsou moc blízko u sebe a šťouchadlo strefí dvě najednou (a jednu z nich špatně).
  • Neuronová síť si není dost jistá. V takovém případě nechám kostku radši projet.
  • Neuronová síť barvu nezná a nebyla na ni učena. Tan tak padají do šedých a žlutých, DkRed a Orange do červených atd.
  • Šťouchadlo se prostě netrefí.
  • No a někdy se taky stane, že to neuronová síť určí úplně špatně. To se ale děje zřídka, rozpoznávání barev je jednoduchá úloha.

Výsledek je k vidění tady.

Co dál?

Pořád je to vývojová verze a už teď vím, že několik věcí bude potřeba předělat:

  • Potřebuju vyladit nastavení kamery – teď se nastavuje automaticky. Specielně bílé dílky jsou přepálené.
  • Bude potřeba znovu zvětšit zorné pole kamery a upravit šťouchadla, aby to bylo použitelné i pro větší než malé dílky.
  • Kamera snímá kolmo shora. To není pro třídění podle barev problém – ale pro třídění podle tvarů už ano.
  • No a samozřejmě spousta drobných úprav v programech i v konstrukci.

A to všechno nejspíš znamená, že můžu celou sbírku učících fotek zahodit a začít pěkně znova. 🙂