AI-gestuurd automatisch deursysteem: Gezichtsdetectie met een camera
op
Bent u het beu dat infraroodsensoren een deur openen telkens als er iemand voorbijloopt? Met dit project kunt u een AI-gestuurd automatisch deursysteem bouwen dat helpt geluidshinder van buitenaf te minimaliseren en de energie-efficiëntie te verbeteren. Het systeem maakt gebruik van een Maixduino-ontwikkelboard met een Kendryte K210-chip, die AI-gestuurde gezichtsdetectie combineert met een camera en een TFT-scherm om te identificeren wanneer een persoon de deur direct nadert. De software is geschreven in MicroPython, maakt gebruik van de KPU neurale netwerkprocessor voor real-time gezichtsdetectie en bestuurt de deur via GPIO-getriggerde relais.
Een probleem met automatische deuren
Automatische deuren beschermen kantoorpersoneel meestal goed tegen de boze buitenwereld. Ze helpen het kantoor op een optimale temperatuur te houden en bieden toch gemakkelijke toegang aan iedereen die naar binnen of buiten wil. In de meeste gevallen regelt een conventionele infraroodsensor (IR) de deuren zeer effectief.
In lawaaierige industriële omgevingen kan echter een wat meer geavanceerde technologie nodig zijn om meer controle te bieden. In een van de krachtcentrales in India staan drie enorme turbines van 660 MW in een grote turbinehal van 100 meter lang. Deze stoomturbines, gekoppeld aan een generator aan één uiteinde, genereren ongeveer 900 MW; genoeg om een stad twee keer zo groot als San Francisco van stroom te voorzien.
De centrale controlekamer (CCR) van deze belangrijke energiecentrale heeft één hoofdingang, aan de kant van de turbinevloer. De enige ingang is via een tweetal glazen schuifdeuren – een buitendeur en een binnendeur. Dit systeem met twee deuren beschermt de geklimatiseerde atmosfeer in de CCR. Wanneer iemand de deur nadert, van binnen of van buiten, gaan de deuren na elkaar open en kan de bezoeker naar binnen of naar buiten.
Deze opstelling met dubbele deuren helpt om de controlekamer koel en stil te houden, omdat de lucht tussen de deuren als isolatie en geluidsbarrière fungeert en de CCR zoveel mogelijk afschermt van het 140dB-lawaai van de turbinegeneratoren.
Er is echter één nadeel dat automatische deuren overal hebben; mensen die langs de deuren lopen kunnen ervoor zorgen dat de bewegingssensoren de deuren openen, zelfs als ze niet van plan zijn om naar binnen of buiten te gaan. In luidruchtige omgevingen zoals deze, kan dit ervoor zorgen dat de technici binnen voortdurend worden gestoord door het lawaai van buiten, doordat de deuren onnodig opengaan terwijl het harde geluid van de turbinevloer naar binnen stroomt.
Een slimmere oplossing
De functie van de naderingssensor is de oorzaak van dit ongewenste probleem omdat deze IR-sensoren zeer beperkte functionele mogelijkheden hebben. Daarom hebben we de traditionele IR-naderingssensoren vervangen door AI-hardware voor gezichtsdetectie en mogelijkheden om de afstand tot de deur te berekenen, zodat de deuren alleen opengaan als er een mens nadert.
Een klein Maixduino-ontwikkelboard (figuur 1) – bijgestaan door een camera, een TFT-display en AI-code – bepaalt of de naderende entiteit een mens is en hoe dicht diens gezicht bij de deur is. Als een bepaalde drempel wordt overschreden, gaat de deur open om toegang te verlenen. Als niet aan de afstandscriteria wordt voldaan, blijft het systeem scannen op gezichten, waardoor wordt voorkomen dat de deuren onnodig opengaan wanneer mensen passeren.
De logische opzet wordt getoond in figuur 2. Let op de ‘Start’- en ‘End’-punten om de achterliggende logica te begrijpen. Aangezien dit AI-gebaseerde gezichtsdetectie betreft, zullen de deuren niet openen als een persoon passeert zonder naar de deur te kijken, zelfs als aan de afstandscriteria is voldaan.
Deuropeningsmechanisme
Wanneer aan de voorwaarden wordt voldaan, activeren twee GPIO-gestuurde relais de deuropeningsmechanismen. Wanneer één deur opent, blijft de andere volledig gesloten. Zodra de eerste deur opengaat en de persoon de ‘sluis’ betreedt, sluit de deur volledig en isoleert de kamer van beide kanten. Dit gebeurt meestal door de GPIO’s na elkaar te triggeren. Er kunnen meer GPIO’s worden gebruikt als dat nodig is, afhankelijk van het deurmechanisme. Dit kan worden aangepast alnaargelang de behoeften ter plaatse.
Berekening van de afstand
Om te bepalen wanneer de deuren geactiveerd moeten worden, detecteert het AI-algoritme het gezicht van een persoon en tekent het een bounding box eromheen in het vastgelegde beeld, in real-time te zien op het TFT-display. De breedte van deze box wordt gebruikt om de afstand tussen het gezicht en de camera te schatten door een wiskundige vergelijking toe te passen, waarbij de parameters door middel van experimenten worden verfijnd om nauwkeurigheid te garanderen.
De brandpuntsafstand van de camera bepaalt de relatie tussen de afstand tot het gezicht en de grootte van de gezichtsbox in het beeld. De verandering in grootte volgt een lineaire relatie binnen het brandpuntsbereik, maar daarbuiten wordt de relatie niet-lineair, waardoor een ingewikkelder berekening nodig is om de nauwkeurigheid te behouden.
Er zijn twee soorten afstandslogica geïmplementeerd: lineair voor afstanden tot 175 cm en kwadratisch daarboven, tot 250 cm. Dit is gedaan om de nauwkeurigheid en efficiëntie van het AI-deursysteem te verbeteren. Het lineaire model zorgt voor een snelle en betrouwbare nabijheidsdetectie, waardoor de deur reageert wanneer er iemand in de buurt is. Het kwadratische model zorgt voor nauwkeurigere afstandsberekeningen op grotere afstanden en houdt rekening met perspectivische vervorming als een persoon van verder weg nadert. Deze combinatie optimaliseert de prestaties bij verschillende afstanden, voorkomt voortijdige activering en verbetert de algehele gebruikerservaring.
Met behulp van de eerste afstandsberekening van maximaal 175 cm worden de breedte en hoogte van de bounding box vervolgens lineair vergeleken met verschillende afstanden vanaf de camera met behulp van een lineair model. De afstand wordt geëxtrapoleerd op basis van de breedte van de objectbox. Dit is vergelijkbaar met hoe de basisrechthoek van een piramide kleiner lijkt naarmate deze omhoog beweegt en uiteindelijk aan de top tot een punt krimpt (figuur 3). Op dezelfde manier wordt de beeldrechthoek kleiner naarmate deze zich van de camera verwijdert.
Tot 175 cm wordt een eenvoudige lineaire vergelijking gebruikt:
Y = M * X + C
X is de basisrechthoek van de piramide (breedte) en Y is de hoogte van de piramide (afstand).
Boven 175 cm wordt echter een kwadratische vergelijking gebruikt:
Y = A * X2 + B * X + C
die nauwkeuriger resultaten geeft tot 250 cm. Met een betere camera of met een grotere brandpuntsafstand kan deze berekening verder worden verfijnd.
Zodra de afstand minder dan 250 cm is, triggert de GPIO en gaat de deur open of dicht.
Hardware
De chip die het hart vormt van het Maixduino-board, een Kendryte K210, is een hooggeïntegreerd systeem-op-chip (SoC) ontworpen voor AI- en IoT-toepassingen, met machine vision en luistermogelijkheden. De K210 is gefabriceerd met behulp van het 28-nm ultra-low-power proces van TSMC en beschikt over dual-core 64-bit RISC-V processoren voor geoptimaliseerde energie-efficiëntie, stabiliteit en betrouwbaarheid. De K210 is ontworpen voor snelle inzet, waardoor ‘drempelloze’ AI-ontwikkeling mogelijk is voor snelle integratie in producten.
Een belangrijk onderdeel is de Knowledge Processing Unit (KPU), een neurale netwerkprocessor voor algemene doeleinden. De KPU ondersteunt convolutie-, batch normalisatie-, activerings- en pooling-lagen, waardoor hij in staat is om objecten en gezichten in real-time te detecteren.
We gebruiken MicroPython als programmeertaal om de code te ontwikkelen, met MaixPy IDE als ontwikkelomgeving, speciaal ontwikkeld voor het Maixduino-board. De bijbehorende MicroPython-code is beknopt, minder dan 50 regels, en maakt gebruik van de KPU voor het grootste deel van de berekeningen. Gezichtsdetectie bestaat uit het vergelijken van rechthoekafmetingen (breedte en hoogte) met vooraf gedefinieerde lineaire modellen om de nabijheid te bepalen. Als de drempelafstand wordt bereikt, worden de GPIO-pinnen (General-Purpose Input/Output) geactiveerd.
In deze toepassing besturen twee GPIO-pinnen (GPIO 13 en 12, zoals getekend in figuur 4) het deurmechanisme via een 5V-relais. De GPIO-pinnen zijn verbonden via een BC547 transistor, waarbij de emitter aan massa ligt en het relais is aangesloten op +5 V. Voor een 12V-relais kan een aparte voeding worden gebruikt via de collector van de transistor, waardoor flexibele voedingsconfiguraties voor deurbesturing mogelijk zijn.
MaixPy FaceDetect-classifier
De MaixPy FaceDetect-classifier gebruikt een voorgetraind AI-model voor objectdetectie, wat de implementatie van gezichtsdetectie vereenvoudigt. Dit kant-en-klare model kan hier worden gedownload .
De MaixPy FaceDetect-classifier is beschikbaar in de vorm van een *.kfpkg-bestand, waarbij * staat voor de naam van het model. Deze modellen zijn zeer efficiënte en snel werkende YOLO-classifiers (You Only Look Once) versie 2. Elke scène wordt door het model verwerkt en de uitvoer wordt gecontroleerd aan de hand van de gedefinieerde classifiers. Dankzij de snelheid van YOLO v2 kan het snel een menselijk gezicht op het scherm identificeren en er een kader omheen tekenen. Het classificatiemodel dat hier wordt gebruikt is facedetect.kfpkg.
Naast eenvoudigere gezichtsdetectie is het ook mogelijk om de MaixPy-classifier voor gezichtsherkenning te gebruiken, maar het moet opgemerkt worden dat dit programma momenteel alleen gezichtsherkenning voor maximaal 10 gezichten ondersteunt. Een krachtiger ontwikkelboard zou nodig zijn om een robuuster gezichtsherkenningsmodel te draaien.
Aan de slag: Een project uploaden met MaixPy
Door deze stappen in de gegeven volgorde uit te voeren, kunt u de software configureren en de benodigde bestanden installeren voordat u de projectcode uitvoert.
MicroPython installeren op het MaixPy-board
- Sluit eerst uw MaixPy-board aan op uw laptop via USB.
- Download kflash_gui, het flash-tool dat nodig is om software op het board te installeren, van deze link .
- Open kflash_gui en selecteer de juiste seriële poort voor uw board (figuur 5).
- Als MicroPython niet is geïnstalleerd, download dan het firmwarebestand (bijvoorbeeld maixpy_v0.6.2_75_g973361c0d.bin) van de MaixPy GitHub-repository .
- Laad het firmwarebestand in kflash_gui en klik op de knop Download om MicroPython op het MaixPy-apparaat te installeren.
Het gezichtsdetectiemodel installeren
- Na het installeren van MicroPython moet u het voorgetrainde gezichtsdetectiemodel (facedetect.kfpkg) selecteren en uploaden.
- Selecteer in kflash_gui het bestand facedetect.kfpkg en druk op Download om het AI-model op het board te installeren. U kunt ook het flash-list.json-bestand aanpassen om het geregistreerde modelnummer (0x300000) te wijzigen.
Laad een project met MaixPy IDE
- Download en installeer vervolgens de MaixPy IDE . Ga voor een complete handleiding voor MaixPy IDE naar de MaixPy-wiki .
- Open MaixPy IDE en sluit uw MaixPy-board aan door op het ketensymbool linksonder in het scherm te drukken.
- Laad het Python-programma (bijvoorbeeld doorman_mod3.py zoals in figuur 6) door File te selecteren en het te openen in het IDE-venster.
- Druk op play linksonder om het programma uit te voeren.
Automatisch afspelen bij opstarten
- Om het programma automatisch te laten starten elke keer dat het MaixPy-board wordt aangezet, gaat u naar Tools in de MaixPy IDE en selecteert u Transfer File to Board. Dit kopieert het Python-script naar het board als boot.py, zodat het automatisch wordt gestart bij het inschakelen.
- U kunt ook het Python-bestand naar de hoofdmap van een SD-kaart kopiëren en het boot.py noemen. Als u de kaart in de MaixPy steekt, wordt deze ook automatisch afgespeeld.
Resultaten
AI-gestuurde gezichtsdetectie is vandaag de dag niets nieuws. Het kan eenvoudig worden uitgevoerd met een krachtige computer en camera. Maar de implementatie hiervan op een zelfstandige low-power MaixPy-microcontroller (5 V) laat zien dat AI het leven makkelijker kan maken, niet alleen op krachtige computers maar ook op het niveau van de microcontroller. De kosteneffectieve Maixduino biedt verschillende voordelen, waaronder een klein maar snel TFT-display, de mogelijkheid om kleine AI-projecten en Micropython-code uit te voeren; daarnaast biedt hij ondersteuning voor de sipeed.com-repository.
Deze AI-gestuurde automatische portier werd geïnstalleerd op de CCR-deuren van de energiecentrale waar ik heb gewerkt (figuur 7). In eerste instantie gebruikte ik een lineaire nabijheidstrigger met een bereik van 175 cm , maar later ontdekte ik dat een kwadratische vergelijking een betere nauwkeurigheid biedt voorbij een bepaalde afstand. Deze oplossing is opgenomen in de nieuwste softwareversie die kan worden gedownload van . Na deze verbetering werkte het apparaat de hele tijd dat ik er was foutloos.
Vragen of opmerkingen?
Hebt u technische vragen of opmerkingen naar aanleiding van dit artikel? Stuur een e-mail naar de redactie van Elektor via redactie@elektor.com.
Noot van de redactie: Het artikel “Maixduino AI-Powered Automatic Doorman” (230050-03) verschijnt in Elektor maart/april 2025.
Discussie (0 opmerking(en))