Een snoepautomaat kan altijd simpeler
Al enige tijd hebben wij een snoepautomaat bij Infi. Reuze handig om de blikjes cola gekoeld te houden, maar het bestellen moet via een klein toetsenbord waarop je het nummer van de tray ingeeft. Voor de Infinithon kwam het plan om dit te versimpelen: het moet zó simpel worden als voor de automaat gaan staan, een gebaar maken en je favoriete product komt uit de automaat.
We konden het project opdelen in vieren. Dat kwam mooi uit, want we waren ook met 4 personen. René ging werken aan de gezichtsherkenning en Peer aan de gebaarherkenning. Daniel verwerkte deze informatie en maakte de software om een beslissing te maken welk product er dan geselecteerd moest worden, en ik ging er voor zorgen dat de automaat dan ook daadwerkelijk een product ging uitgeven.
Leap motion en python facial recognition
De leap motion heeft heel wat tijd gekost om aan de praat te krijgen. Eerst moesten we erachter komen dat de sensoren een firmware reset nodig hadden voordat windows ze überhaupt kon herkennen. Daarna was het een hele poos trial en error met verschillende SDK versies, maar uiteindelijk konden we aan de slag met de SDK in .net4.5. We waren allemaal verrast hoe nauwkeurig de sensoren individuele vingerbewegingen kon detecteren, en daar hebben we dan ook gebruik van gemaakt in onze code. We hebben detectie van handgebaren van 1 of meer uitgestoken vingers ingebouwd. En als het gebaar matcht met in van onze gestures, dan wordt een signaal doorgestuurd.
Om een persoon te herkennen hebben we gebruik gemaakt van een Python script (gebaseerd op de blogpost van Adrian Rosebrock). Dit script maakt gebruik van opencv en de python facial recognition library. Deze moet getraind worden met een set fotos per te herkennen persoon. Vervolgens kan het programma op basis van visuele input de toegevoegde personen herkennen (in ons geval via een webcam). Zodra een persoon 5 frames consistent in beeld is geweest, wordt er een signaal verstuurd naar de API waar het signaal wordt gematched met mogelijke handbewegingen.
De centrale API ontvangt de herkende persoon en een gebaar. Wanneer deze qua tijd dicht bij elkaar liggen wordt er in de database opgezocht welke lade er bediend moet worden bij dat specifieke gebaar. Een request naar de automaat en het product wordt uitgegeven.
Arduino's maken het werk af
Maar met die simpele request alleen zijn we er niet. De automaat heeft geen WiFi of ethernet aansluiting. Dat moesten we dus zelf inbouwen. De verschillende spiralen met producten worden met individuele motortjes aangestuurd. Wat spanning op een motortje zetten en de spiraal draait. Dit is eenvoudig te doen door met een Arduino een relais te schakelen. En Arduino's kun je ook met een Ethernet shield op het netwerk aansluiten. Een klein stukje code haalt uit de GET request de juiste tray en stuurt dan het bijbehorende relais aan. Om de originele aansturing niet in de war te brengen, en vooral niet te slopen, werkt de oude methode van selectie via het toetsenbord niet meer, maar waarom zou je ook.
Voordeel van de constructie om de automaat aan het netwerk te hangen was ook dat andere projecten de API van de automaat konden gebruiken, waardoor ook project Snips een succes werd.
Wil je nog even meer weten of onze andere Infinithon projecten? Dat kan hier!
[Henri is developer bij Infi]
Wil je op de hoogte blijven van updates over hippe tech, een kijkje achter de schermen, of upcoming events? Schrijf je in voor onze nieuwsbrief!