Inhoudsopgave:
- Stap 1: Dingen die je nodig hebt:
- Stap 2: Python-omgeving instellen:
- Stap 3: Python-script:
- Stap 4: Arduino-code:
- Stap 5: Pan-tilt-mechanisme: -
- Stap 6: Verbindingen maken:
- Stap 7: TESTEN:
Video: GEZICHTSTRACKING MET ARDUINO !!!: 7 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
In een vorige instructable heb ik gedeeld hoe je kunt communiceren tussen Arduino en Python met behulp van een 'pyserial'-module en een LED kunt besturen. Als je het nog niet hebt gezien, bekijk het dan hier: COMMUNICATIE TUSSEN ARDUINO & PYTHON!
En hoe u de kleur van een object kunt detecteren en het op het scherm kunt volgen, bekijk dat hier: KLEURDETECTIE MET OPENCV EN PYTHON.
In deze Instructable laat ik je zien hoe je gezichten kunt volgen met Arduino en Python en de camera het gezicht kunt laten volgen. Dit klinkt misschien moeilijk, maar geloof me, dat is het niet. Je hebt alleen basiskennis van Arduino en Python nodig.
Dus laten we beginnen…
Stap 1: Dingen die je nodig hebt:
De eisen zijn minimaal. Hier heb ik een deellijst gegeven van alles wat je nodig hebt:
Hardwarevereiste:
- Arduino UNO (Amazon VS / Amazon EU)
- Webcam (Amazon VS / Amazon EU)
- Servo's x 2 (Amazon VS / Amazon EU)
- Breadboard (Amazon VS / Amazon EU)
- Servo Pan Tilt Kit (Amazon VS / Amazon EU)
Softwarevereiste:
- Python 2.7 (moet worden geïnstalleerd, Linux OS heeft het meestal vooraf geïnstalleerd)
- OpenCV (u kunt het apart downloaden of installeren met behulp van 'pip install' wordt verder uitgelegd)
- pyserial (Kan worden geïnstalleerd met pip)
- numpig.
- Haarcascade.
Nadat alles is verzameld, kunnen we doorgaan naar de installatiestap …
Stap 2: Python-omgeving instellen:
Python installeren:
Dus eerst moeten we Python 2.7 up and running hebben. Download en installeer hiervoor eerst python 2.7.14. Om te controleren of het correct is geïnstalleerd Ga naar: Windows Search >> Typ "IDLE" >> Druk op Enter. Er zou een Python Shell moeten verschijnen.
OF
Typ 'CMD' in de zoekopdracht en druk op enter om de opdrachtprompt te openen. In CMD type >> python en druk op enter, Python-interface zou moeten weergeven.
Als u een fout in CMD ziet, geen paniek, u moet waarschijnlijk een omgevingsvariabele instellen. U kunt deze tutorial hier volgen om de omgevingsvariabele in te stellen.
'pyserial', 'OpenCV' en 'numpy' installeren in python:
Om deze modules te installeren gebruiken we pip install, Open eerst CMD en typ de volgende codes: -
pip serieel installeren
pip install opencv-python >pip install numpy
deze commando's zullen de benodigde modules installeren. Nu kunnen we naar het coderingsgedeelte gaan …
Stap 3: Python-script:
Voordat u begint met het schrijven van code, moet u eerst een nieuwe map maken, omdat alle code in dezelfde map moet worden opgeslagen. Dus maak een nieuwe map aan, noem het zoals je wilt. en download de 'Haarcascade' van onderaf en plak deze in de map.
Open nu Kladblok en schrijf het onderstaande script, Sla het op als 'face.py' in dezelfde map als haarcascade. (U kunt de code downloaden die ik het onderstaande bestand heb verstrekt):
#importeer alle benodigde modules
import numpy as np import serial import time import sys import cv2 #Setup Communicatiepad voor arduino (plaats in plaats van 'COM5' de poort waarop je arduino is aangesloten) arduino = serial. Serial('COM5', 9600) time.sleep (2) print("Verbonden met arduino…") #importeren van de Haarcascade voor gezichtsdetectie face_cascade = cv2. CascadeClassifier('haarcascade_frontalface_default.xml') #Om de videostream van de webcam vast te leggen. cap = cv2. VideoCapture(0) #Lees de vastgelegde afbeelding, converteer deze naar een grijze afbeelding en zoek gezichten terwijl 1: ret, img = cap.read() cv2.resizeWindow('img', 500, 500) cv2.line(img, (500, 250), (0, 250), (0, 255, 0), 1) cv2.line(img, (250, 0), (250, 500), (0, 255, 0), 1) cv2.circle(img, (250, 250), 5, (255, 255, 255), -1) grijs = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(grijs, 1.3) # detecteer het gezicht en maak er een rechthoek omheen. voor (x, y, w, h) in vlakken: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5) roi_gray = grey[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] arr = {y:y+h, x:x+w} print (arr) print ('X:' +str(x)) print ('Y:'+str(y)) print ('x+w:' +str(x+w)) print ('y+h:' +str(y+h)) # Middelpunt van roi (Rechthoek) xx = int(x+(x+h))/2 yy = int(y+(y+w))/2 print (xx) print (yy) midden = (xx, yy) # gegevens verzenden naar arduino print ("Center of Rectangle is:", center) data = "X{0:d}Y{1:d}Z".format(xx, yy) print ("output = '" +data+ "'") arduino.write(data) #Geef de stream weer. cv2.imshow('img', img) #Hit 'Esc' om de uitvoering te beëindigen k = cv2.waitKey (30) & 0xff als k == 27: breken
Zodra dit is gebeurd, gaat u verder met het schrijven van de code voor arduino …
Stap 4: Arduino-code:
Nadat het python-script klaar is, hebben we arduino-schets nodig om de servo te besturen. Verwijs naar onderstaande code, plak deze in Arduino IDE en sla hem op als 'servo.ino' in dezelfde map als face.py en haarcascade. upload de code en ga verder met de volgende stap om de verbindingen te maken.
(Downloadbaar bestand hieronder)
#erbij betrekken
Servo servoVer; //Verticale Servo Servo servoHor; // Horizontale servo int x; int y; int prevX; int vorige; void setup() { Serial.begin(9600); servoVer.attach(5); // Bevestig verticale servo aan pin 5 servoHor.attach (6); // Bevestig horizontale servo aan Pin 6 servoVer.write (90); servoHor.write(90); } void Pos() {if(prevX!= x || prevY!= y) {int servoX = map(x, 600, 0, 70, 179); int servoY = kaart (y, 450, 0, 179, 95); servoX = min(servoX, 179); servoX = max(servoX, 70); servoY = min(servoY, 179); servoY = max(servoY, 95); servoHor.write(servoX); servoVer.schrijven(servoY); } } void loop() { if(Serial.available() > 0) { if(Serial.read() == 'X') { x = Serial.parseInt(); if(Serial.read() == 'Y') { y = Serial.parseInt(); Pos(); } } while(Serial.available() > 0) { Serial.read(); } } }
Stap 5: Pan-tilt-mechanisme: -
Ik heb een gemakkelijk verkrijgbare kit voor de Pan-Tilt gebruikt. Als je wilt, kun je er zelf een maken met hout/kunststof of zelfs een 3D-print.
Degene die ik heb gebruikt is vrij goedkoop en zeer eenvoudig te monteren. Maar als u instructies wilt over hoe u dat moet doen, kunt u deze hier vinden.
Stap 6: Verbindingen maken:
Het circuit is vrij eenvoudig. Bevestig gewoon twee servo's aan Arduino.
- Verticaal naar pin 5
- Horizontaal naar pin 6
- Vermogen tot +5V
- Geaard naar GND
Controleer het schakelschema ter referentie.
Stap 7: TESTEN:
- Nadat alles is gedaan, is het laatste wat u moet doen, testen of het werkt. Om eerst te testen, zorg ervoor dat servo's correct zijn aangesloten op Arduino en dat de schets is geüpload.
- Nadat de schets is geüpload, moet u de IDE sluiten, zodat de poort vrij is om verbinding te maken met python.
- Open nu 'face.py' met Python IDLE en druk op 'F5' om de code uit te voeren. Het duurt een paar seconden om verbinding te maken met Arduino en dan zou je een venster moeten kunnen zien dat de webcam streamt. Nu zal de code je gezicht detecteren en de servo's zullen het volgen.
- De servo moet bewegen terwijl u het object verplaatst. Bevestig nu gewoon de camera aan de servo's zodat deze meebeweegt met servo's.
Bedankt.
Aanbevolen:
DIY slimme weegschaal met wekker (met wifi, ESP8266, Arduino IDE en Adafruit.io): 10 stappen (met afbeeldingen)
DIY Slimme Weegschaal Met Wekker (met Wi-Fi, ESP8266, Arduino IDE en Adafruit.io): In mijn vorige project ontwikkelde ik een slimme weegschaal met Wi-Fi. Het kan het gewicht van de gebruiker meten, het lokaal weergeven en naar de cloud sturen. U kunt hier meer informatie over krijgen op onderstaande link: https://www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
PCB-ontwerp met eenvoudige en gemakkelijke stappen: 30 stappen (met afbeeldingen)
PCB-ontwerp met eenvoudige en gemakkelijke stappen: HELLO VRIENDEN Het is een zeer nuttige en gemakkelijke tutorial voor diegenen die PCB-ontwerp willen leren, laten we beginnen
Een video met gesplitst scherm maken in vier stappen: 4 stappen (met afbeeldingen)
Een video met gesplitst scherm maken in vier stappen: we zien vaak dezelfde persoon twee keer in een scène in een tv-toneelstuk. En voor zover we weten heeft de acteur geen tweelingbroer. We hebben ook gezien dat er twee zangvideo's op één scherm worden gezet om hun zangkunsten te vergelijken. Dit is de kracht van spl