In de eerdere blogposts die door Bart van Uden geschreven zijn over Valid-Hello, is het nu echt tijd om dieper op de technische details te gaan. Valid-Hello is zoals eerder gezegd een smeltkroes tussen IoT, AI en Mobile App development. In dit eerste deel gaan we dieper in op het gebruik van IoT, de hardware en de uitdagingen die we zijn tegengekomen tijdens het ontwikkelen, het tweede deel zal meer van technische aard zijn met voorbeeld van code, het ontwikkelproces en het distribueren van de modules.
Indien je de vorige post nog niet gelezen hebt, het doel van de Valid-Hello showcase is om met behulp van IoT en AI de bedrijfshulpverleners (BHV-ers) van de V-tower (ons hoofdkantoor in Eindhoven) bij binnenkomst en vertrek te herkennen en hun aanwezigheidsstatus automatisch bij te werken. Hiervoor worden twee Raspberry Pi’s, uitgerust met een webcam, geplaatst bij de draaideur van ons hoofdkantoor, de V-tower. Eén gericht op inkomend, de ander op uitgaand verkeer. Wanneer op de camerabeelden een BHV-er herkend wordt zal de aanwezigheidsstatus automatisch bijgewerkt worden op een scherm bij de receptie.
De webcam is vanzelfsprekend het hart van het hele proces. Zonder een webcam kunnen we de medewerkers bij binnenkomst of bij het verlaten van het pand niet registreren. De webcam verzamelt de beelden en stuurt deze naar Azure Cognitive Services voor analyse.
Deze webcam beelden verzamelen we met de “LifeCam HD-3000” van Microsoft. We hebben voor deze webcam gekozen omdat Microsoft deze geverifieerd heeft als een compatible hardware component voor IoT projecten. Het voordeel van deze webcam is dat deze via een USB poort aangesloten kan worden. Gelukkig heeft de mini computer, de Raspberry Pi 3b, standaard USB aansluitingen waar we de webcam op kunnen aansluiten.
Voordat we echt met Valid-Hello zijn begonnen hebben we eerst onderzoek gedaan welke hardware we moeten aanschaffen om te ontdekken hoe alles met elkaar gekoppeld kan worden. We hebben de hardware comptabiliteit lijst en handleidingen van Microsoft doorgenomen en kwamen uit op de Raspberry Pi 3b.
We hebben bewust niet voor de Raspberry Pi 3b+ gekozen omdat in het begin van het project geen ondersteuning vanuit Microsoft gegeven werd om Windows 10 IoT Core erop te gebruiken. Inmiddels zijn er insider builds beschikbaar waarbij Windows 10 IoT Core met de Raspberry Pi 3b+ kan werken.
We wilden graag Windows 10 IoT Core gebruiken omdat bij Valid het motto “Microsoft eerst, tenzij …” is, dus hebben we een component gekozen die dit wel, ook vanuit Microsoft, ondersteunt. Naarmate het project vorderde kwamen we erachter dat Windows 10 IoT Core toch niet geschikt was voor onze ideeën. De reden? Die zullen we even wat nader gaan toelichten.
Tijdens onze tests viel ons op dat de Raspberry Pi maar liefst 6 beelden per seconden naar Azure Cognitive Services opstuurt om BHV personeel te herkennen (ook als er geen personeel op de camera te zien was). Een snelle rekensom leert ons dat we per maand ongeveer 7500+ euro kwijt zijn om alleen camera beelden te laten analyseren. Om deze kosten te drukken is het belangrijk dat we een oplossing op de Raspberry Pi krijgen die zelfstandig beslist of de beelden naar Azure Cognitive Services doorgestuurd moeten worden of niet. Een nieuwe oplossing kwam al snel bij ons op: we gaan IoT Edge gebruiken.
IoT Edge geeft de mogelijkheid om intelligentie, door middel van virtuele containers, naar de Raspberry Pi 3b te brengen zodat voor het naar Azure Cognitive Services opgestuurd wordt, offline beslissingen genomen kunnen worden.
De intelligentie die wij voor IoT Edge hebben ontwikkeld geeft ons eigenlijk antwoord op één vraag, namelijk: Staat er een persoon met een gezicht in beeld waar analyses op uitgevoerd kunnen worden? Door deze ene simpele vraag konden wij de 6 beelden per seconden reduceren naar 2 tot 4 beelden per seconde, met de conditie dat dus ook iemand met een gezicht in beeld moet staan.
Voor deze intelligentie maken wij gebruik van OpenCV, een pakket dat over bijna alle platformen functioneert en dat zelfs onder een open-source licentie gebruikt mag worden. Verder maken we gebruik van een standaard getraind model. We hebben ook mogelijkheden om zelf een model te trainen maar waarom het wiel opnieuw uitvinden? Het model dat wij gebruiken is hier terug te vinden.
Je hebt nog altijd een antwoord van mij te goed over waarom we niet voor Windows 10 IoT Core hebben gekozen. Dit komt doordat IoT Edge (nog) niet beschikbaar is voor Windows 10 IoT Core en voornamelijk in combinatie met een ARM chipset. De Raspberry Pi 3b heeft alleen maar een ARM chipset, dus hebben we uiteindelijk een ander besturingssysteem genaamd “Raspbian Stretch” moeten gebruiken om onze ontwikkelde module naar de Pi te kunnen brengen. Voor meer informatie, klik hier.
Binnen Europa wordt privacy steeds belangrijker, Microsoft gaat hierin ook mee en zorgt ervoor dat de producten GDPR compliant zijn. Het zou handig zijn als Microsoft de Azure Cognitive Services naar IoT Edge zou gaan brengen. Dit betekent dan dat geen beeldmateriaal buiten het bedrijfsnetwerk komt. Gelukkig is Microsoft ook hiermee bezig en er zijn op dit moment een aantal Azure Cognitive Services Edge modules beschikbaar. Echter de Face API, die voor ons het belangrijkste is, wordt via een privé container register van Microsoft aangeboden en daarvoor moet je iets meer moeite doen om met deze te kunnen werken. Meer informatie omtrent de Face API container kun je hier terug vinden.
Toch zijn wij de uitdaging aangegaan en hebben toegang gekregen tot de privé container register om de Face API container te gebruiken. Echter, tijdens ons onderzoek zijn we tegen een aantal nadelen aangelopen, waar ik even kort bij stil wil staan:
Op basis van bovenstaande nadelen hebben we besloten om op dit moment gebruik te maken van de cloud diensten van Microsoft.
Daarnaast bieden wij via Valid-Hello een laagdrempelige manier om jezelf te registreren maar ook je gegevens weer te verwijderen (vanwege privacy redenen). Echter zal dit in een andere blogpost uitgelegd worden waarbij we dieper ingaan op het registreren van gebruikers via een mobiel en hoe het BHV-bord gedigitaliseerd is.
In dit deel hebben we geprobeerd om uit te leggen welke hardware is gebruikt en welke beslissingen wij hebben genomen tijdens de ontwikkeling van Valid-Hello. In het volgende deel gaan we de Raspberry Pi 3b daadwerkelijk installeren en voorbereiden als IoT Edge device en hoe we de eigen ontwikkelde edge module op de Pi gaan zetten. Mocht je nog vragen of opmerkingen hebben, laat het in de comments weten!