Innehållsförteckning:
- Steg 1: KRAV:
- Steg 2: ARBETSPRINCIP:
- Steg 3: INSPELNINGSFANGST OCH BEHANDLING:
- Steg 4:
- Steg 5:
- Steg 6: BEHANDLINGSDEL:
- Steg 7:
- Steg 8:
- Steg 9:
- Steg 10:
- Steg 11:
- Steg 12: RÖRELSESKONTROLL:
- Steg 13:
Video: Gesture Hawk: Hand Gesture Controlled Robot Using Image Processing Based Interface: 13 Steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Gesture Hawk presenterades i TechEvince 4.0 som ett enkelt bildbehandlingsbaserat gränssnitt mellan människa och maskin. Dess användbarhet ligger i det faktum att inga ytterligare sensorer eller bärbara förutom en handske krävs för att styra robotbilen som körs på differentialdrivningsprincip. I denna instruktör tar vi dig igenom arbetsprincipen bakom objektspårning och gestdetektering som används i systemet. Källkoden för detta projekt kan laddas ner från Github via länk:
Steg 1: KRAV:
- L298N motorförare
- DC -motorer
- Robots bilchassi
- Arduino Uno
- LiPo -batterier
- Arduino USB -kabel (lång)
- OpenCV -bibliotek med Python
Steg 2: ARBETSPRINCIP:
Gesture Hawk är ett trefasbearbetningssystem som du kan se i diagrammet ovan.
Steg 3: INSPELNINGSFANGST OCH BEHANDLING:
Inmatningsfångst kan förstås i de större kategorierna som ges i diagrammet ovan.
För att extrahera handformen från miljön måste vi använda maskering eller filtrering av en bestämd färg (i detta fall - violettblått). För att göra det måste du konvertera bilden från BGR till HSV -format som kan göras med följande kodavsnitt.
hsv = cv2.cvtColor (ram, cv2. COLOR_BGR2HSV)
Nu är nästa steg att hitta det önskade intervallet av HSV -parametrar för att extrahera handen via mask eller filter. För detta är det bästa sättet att använda spårstänger för att hitta ett lämpligt område. Här är skärmdumpen av en spårfält som används för detta projekt.
Steg 4:
Steg 5:
Här finns ett kodavsnitt nedan för att göra ett sådant spår för maskkonstruktion:
importera cv2
importera numpy som npdef ingenting (x): skicka cv2.namedWindow ('bild') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, ingenting) cv2.createTrackbar ('l_S ',' image ', 50, 255, ingenting) cv2.createTrackbar (' l_V ',' image ', 50, 255, ingenting) cv2.createTrackbar (' h_H ',' image ', 130, 255, ingenting) cv2. createTrackbar ('h_S', 'image', 255, 255, ingenting) cv2.createTrackbar ('h_V', 'image', 255, 255, ingenting) medan (1): _, frame = img.read ()
hsv = cv2.cvtColor (ram, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_ 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lägre_R = np. array ([lH, lS, lV]) higher_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Steg 6: BEHANDLINGSDEL:
Tja, vi har den geometriska formen på en hand, nu är det dags att utnyttja den och använda den för att räkna ut handgesten.
Konvex skrov:
Genom konvext skrov försöker vi passa en ungefärlig polygon via extrema punkter som finns i formen. Bilden till vänster visar den ungefärliga polygonen som hade tilldelats formen med de konvexa punkterna markerade med rött.
Konvexa punkter är de punkter i formen som är längst bort från en sida av denna approximerade polygon. Men problemet med konvex skrov är att vi under beräkningen kommer att få en rad med alla konvexa punkter men det vi behöver är den blåspetsiga konvexa punkten. Vi kommer att berätta varför det krävs.
För att hitta denna konvexa punkt måste vi tillämpa den vinkelräta avståndsformeln för att hitta avståndet för den konvexa punkten med närmaste sida. Vi observerade att den blåspetsiga punkten har maximalt avstånd från sidan och så får vi denna punkt.
Steg 7:
Steg 8:
Därefter måste vi hitta lutningen för linjen som förenar tummen (eller extrempunkten) med denna konvexa punkt med horisontell.
Steg 9:
I ovanstående fall bör vinkeln α vara mellan 0 till 90 grader om gesten är för vänster sväng. Det är tan (α) bör vara positivt.
Steg 10:
I ovanstående fall bör vinkeln α vara mellan 180 och 90 grader om gesten är för höger sväng. Det är tan (α) bör vara negativ.
Om Tan α är positiv, vänster sväng. Om Tan α är negativ, höger sväng. Nu är det dags att se hur man upptäcker det viktigaste stoppkommandot.
Här undersöks ett specificerat förhållande (hittat genom träff och prövning) och i maximala fall kvarstår detta förhållande av avstånd inom detta specifika område.
Steg 11:
Äntligen analyseras förflyttningsrörelsen med matchShape () -funktionen i OpenCV. Denna funktion jämför formen på två räknare, i det här fallet, mellan träningsexempel på tright i bilden ovan med konturen på vänster sida av bilden ovan. Det returnerar ett värde som sträcker sig från 0 till 2 eller 3, beroende på variationen som finns i form av två konturer. För samma kontur returnerar den 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Här är cn1 och cnt2 de två konturerna som ska jämföras.
Steg 12: RÖRELSESKONTROLL:
PySerial:
Vi använde PySerial -biblioteket för python för att konvertera den bearbetade data till seriell data för att kommuniceras till Arduino Uno via Arduino USB -kabel. När en viss gest detekterades av opencv skapade vi en tillfällig variabel som säger 'x' och tilldelade den ett unikt värde och konverterade det till seriell ingång med följande kommandorad:-
importera serie #för att importera Pyserial -bibliotek
serial. Serial ('', baudrate = '9600', timeout = '0') # inställning av serieutmatning.. PORTNAMN är namnet på porten med vilken dataöverföring kommer att ske.
serial.write (b'x ') # x är alfabetet som skickas till porten … b är att konvertera denna sträng till byte.
Arduino -bearbetning:
Nu är arduino kodat på ett sådant sätt att varje olika seriell x linjärt mappas till viss handling som är ansvarig för en smidig rörelse av roboten (säg att detektering av vänster gest kommer att utlösa motorerna på höger för att svänga vänster). Vi kan styra varje hjuls rörelse såväl translationellt som roterande genom att ändra koden korrekt.
L298N Motorförare:-
Motordrivrutin används som medlare mellan motor och strömkälla eftersom motorer inte kan drivas direkt på grund av låga spänningsbetyg. Li-Po-batteriet är anslutet till dess 12V-ingång och vi ansluter arduinos 5V-uttag till motorförarens 5V-ingångsuttag som slutligen ansluter marken för Li-Po samt arduino i ett gemensamt jorduttag för motorföraren.
Nu är motorernas terminaler anslutna till de angivna uttagen. Slutligen ansluter vi ingångsterminaler för motor till PWM -uttag på arduino så att vi kan bestämma rörelsens rotations- och översättningsaspekter exakt.
Rekommenderad:
DC MOTOR Hand Gesture Control Speed & Direction Using Arduino: 8 Steg
DC MOTOR Hand Gesture Control Speed & Direction Using Arduino: I den här självstudien lär vi oss hur man styr en DC -motor med handgester med arduino och Visuino.Se videon
IOT BASERAD GESTURE CONTROLLED ROBOT: 10 steg (med bilder)
IOTBASERAD GESTURKONTROLLERAD ROBOT: Denna robot är en geststyrd robot som kan styras var som helst med hjälp av internet. I detta projekt används accelerometer MPU 6050 för att samla in data om våra handrörelser. Det mäter accelerationen av vår hand i tre
ESP 8266 Nodemcu Ws 2812 Neopixel Based LED MOOD Lamp Controlled Using Webserver: 6 Steps
ESP 8266 Nodemcu Ws 2812 Neopixel Based LED MOOD Lamp Controlled Using Webserver: I detta projekt gör vi en MOOD Lamp från nodemcu & neopixel och som kan styras av valfri webbläsare med hjälp av lokal webbserver
Hand Gesture Controlled RC Car: 15 steg
Hand Gesture Controlled RC Car: Hello World! Detta är min första instruerbara om du har några frågor - tveka inte att fråga. Målgrupp: Detta projekt är tillämpligt på alla som har en passion när det gäller teknik. Oavsett om du är en expert eller en absolut början
Third Hand ++: en hjälpande hand för flera användningsområden för elektronik och annat känsligt arbete. 14 steg (med bilder)
Tredje handen ++: en hjälpande hand för flera användningsområden för elektronik och andra känsliga arbeten.: Tidigare har jag använt de tredje händerna/hjälpande händerna som finns på elektronikbutiker i kedjan och har varit frustrerad över deras användbarhet. Jag kunde aldrig få klippen exakt där jag ville ha dem eller det tog mer tid än det egentligen borde för att få installation