Inhoudsopgave:

GEZICHTSTRACKING MET ARDUINO !!!: 7 stappen
GEZICHTSTRACKING MET ARDUINO !!!: 7 stappen

Video: GEZICHTSTRACKING MET ARDUINO !!!: 7 stappen

Video: GEZICHTSTRACKING MET ARDUINO !!!: 7 stappen
Video: We introduceren onze collectie magnetische accessoires 2024, November
Anonim
GEZICHTSTRACKING MET ARDUINO !!!
GEZICHTSTRACKING MET ARDUINO !!!

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:

Dingen die je nodig hebt
Dingen die je nodig hebt
Dingen die je nodig hebt
Dingen die je nodig hebt
Dingen die je nodig hebt
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:

  1. Python 2.7 (moet worden geïnstalleerd, Linux OS heeft het meestal vooraf geïnstalleerd)
  2. OpenCV (u kunt het apart downloaden of installeren met behulp van 'pip install' wordt verder uitgelegd)
  3. pyserial (Kan worden geïnstalleerd met pip)
  4. numpig.
  5. Haarcascade.

Nadat alles is verzameld, kunnen we doorgaan naar de installatiestap …

Stap 2: Python-omgeving instellen:

Python-omgeving instellen
Python-omgeving instellen
Python-omgeving instellen
Python-omgeving instellen
Python-omgeving instellen
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:

Python-script
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:

Arduino-code
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: -

Pan-tilt-mechanisme
Pan-tilt-mechanisme
Pan-tilt-mechanisme
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:

Connecties maken
Connecties maken
Connecties maken
Connecties maken

Het circuit is vrij eenvoudig. Bevestig gewoon twee servo's aan Arduino.

  1. Verticaal naar pin 5
  2. Horizontaal naar pin 6
  3. Vermogen tot +5V
  4. 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: