Když jsem si ověřil, že první verze třídičky docela dobře funguje, dal jsem se do vylepšování.

Fotky

Nejdřív jsem začal vylepšovat kvalitu fotek. Fotky byly rozmazané pohybem, takže do každé kostky bylo přimícháno trochu tmavě šedé. To opravdu není žádná sláva:

Rozmazaná žlutá kostka Rozmazaná zelená kostka Rozmazaná červená kostka Rozmazaná modrá kostka

Hledal jsem, jestli jde nějak přes API knihovny nastavit rychlost závěrky kamery (dobře, vím že tam žádná závěrka ve skutečnosti není, ale dá se pracovat s počtem snímků za vteřinu). Nejde to. A typicky to tyhle malé webkamerky ani neumožňují, prostě to zařizují automaticky. Dá se to ale udělat nepřímo – zlepšit osvětlení. Kamera pak usoudí, že má dost světla na to, aby si mohla dovolit zvýšit framerate. Takže jsem zahodil tu lampičku, co byla v minulé verzi, a dal jsem tam 2W cyklosvítilnu. To zabralo, kamera začala snímat rychlostí 30 snímků za vteřinu, což je podle specifikace její maximum. Výsledek se o dost zlepšil:

Modrá kostka Zelená kostka Červená kostka Bílá kostka Žlutá kostka

A zlepšily se tak i výsledky. Pořád ale byly problémy s rozlišováním žluté a bílé, což při pohledu na obrázky nepřekvapí. Myslel jsem, že prostě potřebuju lepší kameru s větším dynamickým rozsahem, která nebude pro světlé barvy dávat tak přepálené obrázky. Pak mi došlo, že i jas kamera reguluje automaticky bez možnosti to přímo ovlivnit. Ale opět to jde nepřímo. V měřící krabici jsem měl vedle pásu černé pozadí, aby nerušilo. Na oříznutých fotkách není vidět, ale kamera ho samozřejmě zabírá. Když jsem tuto část nahradil bílými plates a tiles, celkový jas o dost klesnul, a výsledky byly zase o něco lepší:

Modrá kostka Zelená kostka Červená kostka Bílá kostka Šedá kostka Žlutá kostka Černá kostka

Rozšíření neuronové sítě

Tak jsem si troufl neuronovou síť rozšířit a přidat další barvy – modrou, černou a světle šedou (specielně rozmazaná světle šedá původně nešla na šedém pozadí poznat ani očima). Výsledky byly opět dobré, problém zůstal v rozlišování světle šedé a bílé, tam se plete pořád. Obávám se, že na to už dvouvrstvá síť stačit nebude.

Vylepšení vlastního třídění

Když jsem dosáhl lepších výsledků při třídění v počítači, začal jsem ještě upravovat vlastní třídičku. Prodloužil jsem pás a postavil ještě dvě šťouchadla (mám jen jednu NXT sadu, takže jsem omezen na 3 motory). To umožnilo vytřídit 3 barvy.  Aktuálně je to nastaveno na vytřídění červených, zelených a modrých.

Původní program běžel v jednom vlákně – když narazil na červenou kostku, prostě chvíli počkal a pak šťouchnul. To už bylo teď nevhodné – dokud program čekal, nedělal nic jiného. Upravil jsem program na dvouvláknový – jedno vlákno snímá obrázky a pokud narazí na něco, co bude třeba shodit z pásu, založí do seznamu požadavek a nastaví mu patřičné zpoždění. Druhé vlákno pak kontroluje, jestli je už v seznamu něco, co potřebuje zpracovat. Pokud ano, vydá příslušnému motoru pokyn k sešťouchnutí.

Třídička verze 2

Méně úspěšné pokusy…

Ne vše se samozřejmě dařilo. Zkusil jsem upravit šťouchadla na oboustranná, abych mohl třídit 6 barev, ale se stávající konstrukcí jsem neuspěl. Musel bych výrazně prodloužit osy, po kterých šťouchadla jezdí. Tedy dát tam osy aspoň šestnáctkové, které nemám, navíc by se to už dost prohýbalo. Vymyslel jsem si kostrukci s dvanáctkovými osami, kterých mám fůru, ale nakonec na ni nedošlo, použil jsem jiné řešení – o tom příště.

Rozmýšlel jsem se ještě nad lepším pásem – ten originální LEGO má příliš výraznou strukturu, což bude nejspíš u složitějších sítí na závadu. Zkusil jsem vyrobit hladký z duše do kola, ale zatím z toho není rozumný výsledek.

Co chci vyzkoušet dál:

  • Oboustranná šťouchadla (to už vypadá slibně).
  • Udělat lepší pás.
  • Použít lepší kameru.
  • Pustit do třídičky i jiné dílky než Technic brick 1×1 a 1×2.
  • Pro vyhodnocení nepoužít jen jeden obrázek, ale víc. To by mělo snížit chybovost, pokud je ten první špatně (je vidět jenom kousek), u těch dalších to obvykle dopadne líp – ale teď se použije ten první.
  • Vyzkoušet vícevrstvé neuronové sítě (a začít experimentovat s tříděním podle tvaru).
  • No a machrovinka by byla použít jako vstup NXT barevné čidlo, spočítanou síť nahrát do NXT kostky a udělat čistě LEGO třídičku bez připojeného počítače a kamery.

No a nezbytné video…