Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Gebaarherkenning met Accelerometer en ESP

Componenten en benodigdheden

Arduino 101
Bevat een ingebouwde versnellingsmeter, dus er zijn geen extra componenten of circuits nodig.
× 1
Arduino UNO
Je kunt een Arduino Uno (of andere Arduino) gebruiken in plaats van de Arduino 101, maar je zult heb ook een versnellingsmeter nodig.
× 1
Adafruit analoge versnellingsmeter:ADXL335
Gebruik dit (of het SparkFun-equivalent) als je een andere Arduino gebruikt dan de Arduino 101 ( die een ingebouwde versnellingsmeter heeft).
× 1
SparkFun Triple Axis Accelerometer Breakout - ADXL335
Gebruik dit (of het equivalent van Adafruit) als je een andere Arduino gebruikt dan de Arduino 101 ( die een ingebouwde versnellingsmeter heeft).
× 1

Over dit project

Overzicht

Deze zelfstudie laat zien hoe u basisbewegingsherkenning in uw Arduino-projecten kunt opnemen met behulp van het ESP-systeem. U herkent bijvoorbeeld verschillende tennisbewegingen, zoals een forehand, backhand en opslag; elementen van een dansroutine; gewichtheffen gebaren; enz. De gebaren worden gedetecteerd met behulp van een versnellingsmeter en verzonden naar de ESP-toepassing die op uw computer draait. ESP gebruikt een eenvoudig machine learning-algoritme om de live accelerometergegevens te matchen met opgenomen voorbeelden van verschillende gebaren, en stuurt een bericht terug naar de Arduino wanneer deze een gebaar herkent dat lijkt op een van de voorbeelden. Het systeem herkent alleen individuele gevallen van discrete gebaren; het geeft geen informatie over hoe het gebaar wordt uitgevoerd. Toch kan het worden gebruikt voor een breed scala aan interactieve toepassingen.

Download de ESP-toepassing voor gebarenherkenning:

  • Mac:ESP-Gestures-Mac-20161028.zip
  • Windows:ESP-Gestures-Win-20161028.zip. Mogelijk hebt u ook de Visual C++ Redistributable (Update 3) van Microsoft nodig.
  • Ubuntu:ESP-Gestures-Ubuntu-20161028.tar.gz
  • Voorbeelden van gebaren:ForehandBackhandServe.grt

Stap 1. Sluit uw versnellingsmeter aan.

Als je de Arduino 101 gebruikt, die een ingebouwde versnellingsmeter heeft, kun je deze stap overslaan. Anders moet u uw versnellingsmeter aansluiten. Om dit te doen, soldeer je eerst mannelijke header-pinnen op het breakout-bord, als je dat nog niet hebt gedaan. Vervolgens sluit je de accelerometer aan op de Arduino.

Als een snelkoppeling kunt u de doorbraak van de versnellingsmeter rechtstreeks aansluiten op de analoge ingangspinnen van de Arduino Uno (of een andere Arduino met dezelfde vormfactor). Vervolgens kunt u in de Arduino-code de juiste pinnen configureren om de versnellingsmeter van stroom en aarde te voorzien.

Als alternatief kunt u uw versnellingsmeter aansluiten op een breadboard en aansluiten op de Arduino, waarbij u de voedings- en aardingspinnen aansluit op de 5V- en GND-pinnen van de Arduino, en de X-, Y- en Z-aspinnen op drie analoge ingangen van het Arduino-bord.

Stap 2. Upload de Arduino-code.

U kunt een van de onderstaande Arduino-programma's gebruiken om gegevens van de accelerometer te lezen en deze via serieel (USB) naar de computer te sturen. Controleer eerst of de pinnen die zijn gespecificeerd in het Arduino-programma overeenkomen met de manier waarop je je accelerometer hebt aangesloten (bijv. die xpin komt overeen met de analoge ingangspin die is aangesloten op de X-as-pin van je accelerometer). (Dit is niet van toepassing als je de Arduino 101 gebruikt, waar de versnellingsmeter intern is aangesloten.) Selecteer vervolgens het juiste bord en de juiste seriële poort in het menu Arduino-tools en upload de Arduino-schets.

Stap 3. Controleer op gegevens in de seriële monitor.

Open de seriële monitor van Arduino, stel deze in op 9600 baud en controleer of je versnellingsmetergegevens van je Arduino krijgt. U zou drie kolommen met getallen moeten zien die veranderen wanneer u de versnellingsmeter beweegt. Gebruik de Arduino seriële plotter om een ​​grafiek van deze getallen te zien.

Zorg ervoor dat u de seriële monitor en seriële plotter sluit voordat u doorgaat, omdat ze anders de ESP-toepassing blokkeren om met uw Arduino te praten.

Stap 4. Start de ESP-toepassing voor gebarenherkenning en selecteer uw seriële poort.

Download de ESP-toepassing voor gebarenherkenning:

  • Mac:ESP-Gestures-Mac-20160812.zip
  • Windows:ESP-Gestures-Win-20160812.zip

Selecteer de seriële poort die overeenkomt met uw Arduino-bord in het configuratiemenu. (Klik op de kop 'Selecteer een seriële poort' om de lijst met poorten te openen.) 

U zou live gegevens moeten zien binnenstromen op de "Raw Data"-plot. De drie lijnen op de grafiek komen overeen met de drie assen van je versnellingsmeter:de rode lijn komt overeen met de X-as, groen met de Y-as en blauw met de Z-as.

Stap 5. Registreer kalibratiemonsters.

Om de ESP-toepassing te laten begrijpen welk waardenbereik u van uw accelerometer en Arduino kunt verwachten, moet u een kalibratiemonster opnemen. Plaats uw versnellingsmeter op een vlakke ondergrond, met de Z-as naar boven gericht. Houd de toets "1" ongeveer een seconde ingedrukt om het "staande" kalibratiemonster op te nemen. U zou een plot van het monster moeten zien verschijnen. Draai vervolgens uw versnellingsmeter ondersteboven en houd hem plat en stil en houd de toets "2" ingedrukt om het ondersteboven kalibratiemonster te registreren. Het ESP-systeem gebruikt deze gegevens om erachter te komen welke numerieke waarden overeenkomen met 0 g versnelling (op de X- en Y-assen) en welke overeenkomen met 1 g versnelling (op de Z-as).

Stap 6. Neem voorbeeldgebaren op.

Ga naar het tabblad "Training" van de ESP-toepassing door erop te klikken of door een hoofdletter "T" te typen. Op dit tabblad kunt u voorbeelden opnemen of laden van de gebaren die u door het ESP-systeem wilt laten herkennen. U kunt voorbeelden van maximaal negen verschillende gebaren opnemen.

Om een ​​voorbeeld van een gebaar op te nemen, maakt u het gebaar terwijl u op de toets drukt die overeenkomt met het label dat u aan het gebaar wilt koppelen. Om bijvoorbeeld een gebaar met label 1 op te nemen, houdt u de "1"-toets op uw toetsenbord ingedrukt terwijl u het gebaar maakt. (U kunt ook de voorbeeldtennisgebaren laden in ForehandBackhandServe.grt.)

Zorg ervoor dat u de voorbeeldgebaren met de versnellingsmeter opneemt in dezelfde configuratie als later, wanneer u wilt dat het systeem de gebaren herkent. U kunt de versnellingsmeter bijvoorbeeld in een bepaalde richting in uw hand houden, of hem aan een object bevestigen dat u in een bepaalde richting vasthoudt.

Een goed voorbeeld bevat de gegevens die overeenkomen met het hele gebaar, maar zonder veel aanvullende basisgegevens aan het begin of het einde. Dat wil zeggen, het monster moet beginnen en eindigen met een korte periode van relatief vlakke lijnen, niet te lang en ook niet helemaal afwezig. Als uw gebaar op een andere plaats eindigt dan het begint, zorg er dan voor dat niet om de tijd vast te leggen wanneer u de versnellingsmeter terugbrengt naar de startpositie. Als u bijvoorbeeld een veegbeweging naar rechts opneemt, wilt u alleen het deel van het gebaar opnemen wanneer uw hand van links naar rechts beweegt, niet het moment waarop uw hand terugkeert naar de oorspronkelijke positie.

Elk aanvullend voorbeeld dat u opneemt, is een ander voorbeeld waarmee het machine learning-algoritme kan overeenkomen wanneer het gebaren herkent. Dat betekent dat als je wilt dat het systeem verschillende variaties van een gebaar herkent (bijvoorbeeld de verschillende manieren waarop het door verschillende mensen wordt gemaakt), het kan helpen om voorbeelden van elke variatie op te nemen. Aan de andere kant, als je slechte samples hebt, kunnen ze het systeem in de war brengen; meer monsters is niet per se beter. Over het algemeen hebben we veel geluk gehad met het opnemen van ongeveer 5 tot 10 samples voor elk gebaar, hoewel nogmaals, de kwaliteit van de individuele samples belangrijker is dan hun kwantiteit.

Als je een voorbeeld niet leuk vindt (bijvoorbeeld omdat je de toets op het verkeerde moment hebt ingedrukt en de gegevens hebt gemist die overeenkomen met een deel van het gebaar), kun je het verwijderen door in het vak naast het woord "verwijderen" onder het voorbeeld te klikken . U kunt een monster bijsnijden door op de plot van het monster te klikken en te slepen om het deel van het monster te selecteren dat u wilt behouden, en vervolgens op het vak met het label "bijsnijden" te klikken. U kunt tussen de verschillende voorbeelden in een klasse navigeren door op de pijlpictogrammen onder de plot voor het voorbeeld te klikken. Als u een monster in de verkeerde klasse heeft opgenomen, kunt u het verplaatsen door op de knop "opnieuw labelen" te klikken en vervolgens op de toets te drukken die overeenkomt met het label waaraan u het monster wilt toewijzen. Om een ​​gebaar een naam te geven, klikt u op de knop "naam wijzigen", typt u de naam en drukt u op enter.

Stap 7. Train het systeem om gebaren te herkennen.

Nadat u een paar voorbeeldgebaren heeft opgenomen, kunt u het ESP-systeem trainen om die gebaren uit uw voorbeelden te herkennen. Druk op de "t"-toets op uw toetsenbord om het systeem te trainen. U zou het bericht "training succesvol" onder aan het venster moeten zien verschijnen. Wanneer u nu een gebaar maakt dat lijkt op een van uw opgenomen voorbeelden, zou u de naam ervan moeten zien verschijnen op de plot van live sensorgegevens.

Het systeem werkt mogelijk niet goed de eerste keer dat u het traint. Het is handig om het systeem vaak te trainen en te testen terwijl u uw voorbeeldgebaren opneemt, zodat u een idee krijgt van hoe het zich gedraagt.

In het bijzonder, als het systeem gebaren niet herkent waarvan u denkt dat het zou moeten, kunt u extra voorbeelden van dat gebaar opnemen. Als het systeem gebaren herkent terwijl dit niet zou moeten, wilt u misschien voorbeelden verwijderen of bijsnijden die er anders uitzien dan de andere, of die lange perioden met relatief vlakke lijnen bevatten. Zorg ervoor dat u op "t" drukt nadat u uw voorbeelden hebt gewijzigd om het systeem opnieuw te trainen.

Stap 8. Stem de systeemconfiguratie indien nodig af.

Hoewel het aanpassen van uw trainingsvoorbeelden waarschijnlijk de belangrijkste manier is om het systeem te helpen correct te presteren, kunt u met ESP ook enkele onderliggende systeemparameters configureren. Klik hiervoor op het label "klik om configuratie te openen". U zou twee parameters moeten zien:variabiliteit en time-out. Merk op dat u na het wijzigen van deze parameters het systeem opnieuw moet trainen door op "t" te drukken.

De variabiliteitsparameter bepaalt hoe verschillend een gebaar kan zijn van een van de opgenomen voorbeelden en nog steeds kan worden herkend. Hoe hoger het getal, hoe meer verschillend het kan zijn. Als het systeem lijkt te vereisen dat uw gebaren te veel lijken op uw opgenomen voorbeelden, kunt u proberen dit aantal te verhogen. (Je kunt ook proberen extra voorbeelden op te nemen.) Als het systeem onechte gebaren herkent, kun je proberen dit aantal te verlagen, maar je kunt ook proberen alle onaardige trainingsvoorbeelden te verwijderen.

De time-outparameter bepaalt hoe lang na het herkennen van een gebaar het systeem wacht voordat het een nieuw gebaar herkent. Het wordt gemeten in milliseconden (duizendsten van een seconde). Als het systeem bewegingen lijkt te missen die vlak na een ander gebaar zijn gemaakt, probeer dan dit aantal te verlagen. Wees echter voorzichtig, want als u dit aantal te laag maakt, kan het systeem een ​​enkel gebaar meerdere keren herkennen. Als het systeem meerdere gebaren lijkt te herkennen wanneer je maar één gebaar maakt (bijvoorbeeld als het een forehand ziet gevolgd door een backhand als je alleen een forehand hebt gemaakt), kun je proberen deze parameter te verhogen.

Stap 9. Integreer gebarenherkenning in uw Arduino-project.

Wanneer het ESP-systeem een ​​voorspelling doet, stuurt het een bericht naar uw Arduino met het nummer van het gebaar dat het heeft herkend (als ASCII-tekst gevolgd door een nieuwe regel, bijvoorbeeld "1\n"). Door deze voorspellingen op de seriële poort te lezen, kun je je Arduino op verschillende manieren op het gebaar laten reageren.

De voorspellingen worden ook via TCP verzonden naar een server die draait op localhost-poort 5204 (in hetzelfde formaat als naar de Arduino). Dit kan bijvoorbeeld een game zijn die is geschreven in Processing of andere software. Zorg ervoor dat de TCP-server actief is voordat u de ESP-toepassing start.

Hoe het werkt

Deze specifieke ESP-toepassing gebruikt een algoritme genaamd Dynamic Time Warping (of DTW). Dit algoritme vervormt het live sensorsignaal door individuele metingen te elimineren of te dupliceren, een reeks variaties te genereren en te controleren hoe vergelijkbaar ze zijn met de opgenomen samples. Het algoritme zoekt naar het trainingsvoorbeeld dat het dichtst bij de live sensorgegevens ligt. Als het verschil tussen de twee kleiner is dan een bepaalde drempel, beschouwt het het als een overeenkomst en voert het een voorspelling uit die overeenkomt met de trainingsklasse die dat monster bevat. U kunt de vereiste afstand afstemmen met behulp van de parameter "variabiliteit" in het vervolgkeuzemenu voor configuratie.

Gebaarherkenning is slechts één domein waarop het ESP-systeem kan worden toegepast. ESP is gebouwd bovenop de Gesture Recognition Toolkit (GRT), die, ondanks zijn naam, in feite een breed scala aan machine learning-algoritmen bevat die kunnen worden toegepast op een breed scala aan realtime detectietoepassingen. ESP neemt code voor een bepaalde applicatie en vertaalt deze naar een aangepaste gebruikersinterface om met die machine learning-pijplijn te werken. Deze toepassingsspecifieke programma's omvatten een GRT-machine learning-pijplijn, specificatie van sensoringangen, definitie van het kalibratieproces en specificaties voor de afstembare parameters. We hebben ESP-voorbeelden gemaakt voor kleurdetectie, posedetectie met behulp van versnellingsmeters en eenvoudige audioherkenning. Zie de ESP GitHub voor meer informatie.

Code

Arduino ADXL335-code
Deze code leest van een ADXL335 die is aangesloten op een Arduino:de X-as-pin van de versnellingsmeter moet worden aangesloten op pin A5 van de Arduino, de Y-as op A4 en de Z-as op A3. Uitlezingen worden via de seriële (USB)-poort verzonden met 9600 baud, als tab-gescheiden, door een nieuwe regel beëindigde ASCII-gegevens.
Arduino 101 versnellingsmetercode
Leest versnellingsmetergegevens van de ingebouwde versnellingsmeter op een Arduino 101. De metingen worden via de seriële (USB)-poort op 9600 verzonden als door een nieuwe regel beëindigde, door tabs gescheiden ASCII-gegevens.

Productieproces

  1. Aanwezigheidssysteem met Arduino en RFID met Python
  2. Universele afstandsbediening met Arduino, 1Sheeld en Android
  3. DIY voltmeter met Arduino en smartphone
  4. IOT - Smart Jar met ESP8266, Arduino en ultrasone sensor
  5. Frequentie- en werkcyclusmeting met Arduino
  6. Bedien Arduino Rover met Firmata en Xbox One Controller
  7. Sonar met arduino en weergave op verwerkings-IDE
  8. LED-helderheid regelen met Bolt en Arduino
  9. Eenvoudige en slimme robotarm met Arduino
  10. Spraakherkenning en synthese met Arduino
  11. Hoe maak je een kompas met Arduino en Processing IDE?