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

Gezicht volgen met Arduino

Componenten en benodigdheden

Arduino UNO
× 1
webcam
× 1
Micro-servo's
× 2
Pan-Tilt
× 1
Broodplank (algemeen)
× 1

Apps en online services

Python 2.7
OpenCV

Over dit project

In een eerdere tutorial 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 je de kleur van een object kunt detecteren en het op het scherm kunt volgen, bekijk dat hier:KLEURDETECTIE MET OPENCV EN PYTHON.

In deze tutorial laat ik je zien hoe je gezichten kunt volgen met Arduino en Python en hoe je 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:

Harwarevereisten:

  • Arduino UNO (u kunt andere boards gebruiken)
  • Webcam (miniwebcam)
  • Servo's x 2 (ik gebruik microservo's, maar je kunt ook standaardservo's gebruiken)
  • Breadboard (voor prototyping)
  • Servo Pan Tilt Kit (Je kunt er een bouwen als je wilt)

Softwarevereisten:

  • 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)
  • numpy.
  • 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. Typ in CMD >> python en druk op enter, Python-interface zou moeten worden weergegeven.

Als u een fout ziet in CMD, geen paniek, u moet waarschijnlijk een omgevingsvariabele instellen. Je kunt deze tutorialHier volgen om omgevingsvariabele in te stellen.

Installatie van 'pyserial', 'OpenCV' en 'numpy' in Python:

Om deze modules te installeren gebruiken we pip install,

Open eerst CMD en typ de volgende codes:-

>pip install serial
>pip install opencv-python
>pip install numpy

deze commando's zullen de benodigde modules installeren. Nu kunnen we naar het codeergedeelte 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. Maak dus een nieuwe map aan en noem deze alles wat u maar 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) :

#import alle benodigde modules
import numpy as np
import serial
import tijd
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 webcam.
cap =cv2.VideoCapture(0)
#Lees de vastgelegde afbeelding, converteer deze naar een grijze afbeelding en vind 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)
#detect the face and maak er een rechthoek omheen.
for (x,y,w,h) in vlakken:
cv2.rectangle(img,(x,y),(x+w,y+h),( 0,255,0),5)
roi_gray =grijs[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)
center =(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)
#Display de stream.
cv2.imshow('img',img)
#Druk op 'Esc' om de uitvoering te beëindigen
k =cv2.waitKey(30) &0xff
if k ==27:
pauze

Zodra dit is gebeurd, gaat u verder met het schrijven van de code voor Arduino...

haarcascade_frontalface_default.xml face.py

Stap 4:Arduino-code

Nadat het python-script klaar is, hebben we arduino-schets nodig om de servo te besturen. Raadpleeg de onderstaande code, plak deze in Arduino IDE en sla deze 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.)

#include
Servo servoVer; //Verticale servo
Servo servoHor; //Horizontal Servo
int x;
int y;
int prevX;
int prevY;
void setup()
{
Serieel .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 =map(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.write(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();
}
}
}
servo.ino

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 je instructies wilt over hoe je dat moet doen, kun je die hier vinden.

Stap 6:Verbindingen maken

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

  • Verticaal naar pin 5
  • Horizontaal aan pin 6
  • Voeding tot +5V
  • Aarde naar GND

Controleer het schakelschema ter referentie.

Stap 7:Testen

  • Nadat alles is gedaan, is het laatste wat u hoeft te 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 als je het object verplaatst. Bevestig nu gewoon de camera aan de servo's zodat deze meebeweegt met de servo's.

Hoop dat je het leuk vindt. en leer iets nieuws.

Bedankt!

Code

  • servo.ino
  • Codefragment #2
  • Codefragment #3
servo.inoArduino
Fout bij openen bestand.
Codefragment #2Platte tekst
#import alle vereiste modulesimport numpy as npimport serialimport timeimport sysimport 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 gezichtsdetectieface_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#Om de videostream van webcam.cap =cv2.VideoCapture vast te leggen (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)) # Midden van roi (Rechthoek) xx =int(x+(x+h))/2 yy =int(y+(y+w))/2 print (xx) print (yy) midden =(xx,yy)# verzenden data 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)#Druk op 'Esc' om de uitvoering te beëindigen k =cv2.waitKey(30) &0xff if k ==27:break
Codefragment #3Platte tekst
#includeServo servoVer; //Verticale ServoServo servoHor; //Horizontal Servoint x;int y;int prevX;int prevY;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(); } }}

Productieproces

  1. Python- en Raspberry Pi-temperatuursensor
  2. Realtime gezichtsherkenning:een end-to-end project
  3. Automatisch volgen van zichtobjecten
  4. DTMF-decoder met alleen Arduino
  5. Maak Monitor Ambilight met Arduino
  6. Aanwezigheidssysteem met Arduino en RFID met Python
  7. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  8. DIY voltmeter met Arduino en smartphone
  9. Hartslagmeter met IoT
  10. WebServerBlink met Arduino Uno WiFi
  11. IoT-thermometer met Python