Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Gesichtsverfolgung mit Arduino

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Webcam
× 1
Mikroservos
× 2
Pan-Tilt
× 1
Breadboard (generisch)
× 1

Apps und Onlinedienste

Python 2.7
OpenCV

Über dieses Projekt

In einem früheren Tutorial habe ich geteilt, wie Sie mit dem 'pyserial'-Modul zwischen Arduino und Python kommunizieren und eine LED steuern können. Wenn Sie es noch nicht gesehen haben, schauen Sie hier:KOMMUNIKATION ZWISCHEN ARDUINO &PYTHON!

Und wie Sie die Farbe eines Objekts erkennen und auf dem Bildschirm verfolgen können, lesen Sie hier:FARBERKENNUNG MIT OPENCV UND PYTHON.

In diesem Tutorial zeige ich Ihnen, wie Sie Gesichter mit Arduino und Python verfolgen und die Kamera dazu bringen, dem Gesicht zu folgen. Das mag schwierig klingen, aber glauben Sie mir, es ist nicht. Alles, was Sie brauchen, sind Grundkenntnisse in Arduino und Python.

Fangen wir also an...

Schritt 1:Dinge, die Sie brauchen

Die Anforderungen sind minimal. Hier habe ich eine Stückliste von allem bereitgestellt, was Sie brauchen:

Hardwareanforderungen:

  • Arduino UNO (Sie können andere Boards verwenden)
  • Webcam (Mini-Webcam)
  • Servos x 2 (ich werde Mikro-Servos verwenden, aber Sie können Standard-Servos verwenden)
  • Breadboard (für Prototyping)
  • Servo Pan Tilt Kit (Sie können eines bauen, wenn Sie möchten)

Softwareanforderungen:

  • Python 2.7 (Sollte installiert sein, Linux-Betriebssysteme haben es normalerweise vorinstalliert)
  • OpenCV (Sie können es separat herunterladen oder mit 'pip install' installieren. Weitere Erklärungen)
  • pyserial (Kann mit pip installiert werden)
  • numpy.
  • Haarkaskade.

Nachdem alles zusammengetragen wurde, können wir mit dem Installationsschritt fortfahren...

Schritt 2:Python-Umgebung einrichten

Python installieren:

Zuerst müssen wir also Python 2.7 zum Laufen bringen. Um dies zu tun, laden Sie zuerst Python 2.7.14 herunter und installieren Sie es. Um zu überprüfen, ob es richtig installiert ist, gehen Sie zu:Windows-Suche>> Geben Sie "IDLE" ein>> Drücken Sie die Eingabetaste. Es sollte eine Python-Shell erscheinen.

ODER

Geben Sie in der Suche "CMD" ein und drücken Sie die Eingabetaste, um die Eingabeaufforderung zu öffnen. Geben Sie in CMD >> Python ein und drücken Sie die Eingabetaste, Die Python-Schnittstelle sollte angezeigt werden.

Wenn Sie einen Fehler in CMD sehen, keine Panik, müssen Sie wahrscheinlich die Umgebungsvariable setzen. Sie können diesem TutorialHier folgen um die Umgebungsvariable einzurichten.

Installieren von "pyserial", "OpenCV" und "numpy" in Python:

Um diese Module zu installieren, verwenden wir pip install,

Öffnen Sie zuerst CMD und geben Sie die folgenden Codes ein:-

>pip install seriell
>pip install opencv-python
>pip install numpy

Mit diesen Befehlen werden die erforderlichen Module installiert. Jetzt können wir zum Codierungsteil übergehen...

Schritt 3:Python-Skript

Bevor Sie mit dem Schreiben von Code beginnen, müssen Sie zunächst einen neuen Ordner erstellen, da der gesamte Code in demselben Ordner gespeichert werden muss. Erstellen Sie also einen neuen Ordner und benennen Sie ihn nach Belieben. und lade die 'Haarcascade' von unten herunter und füge sie in den Ordner ein.

Öffnen Sie nun den Notizblock und schreiben Sie das unten angegebene Skript. Speichern Sie es als 'face.py' im selben Ordner wie haarcascade. (Sie können den Code herunterladen, den ich in der Datei unten bereitgestellt habe) :

#importieren Sie alle erforderlichen Module
import numpy as np
import serial
import time
import sys
import cv2
#Setup Kommunikationspfad für Arduino (Anstelle von 'COM5' setzen Sie den Port, an den Ihr Arduino angeschlossen ist)
arduino =serial.Serial('COM5', 9600)
time.sleep(2)
print("Connected to arduino...")
#Importieren der Haarcascade für die Gesichtserkennung
face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#So erfassen Sie den Videostream von webcam.
cap =cv2.VideoCapture(0)
#Das aufgenommene Bild lesen, in ein Graubild konvertieren und Gesichter finden
während 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)
grey =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces =face_cascade.detectMultiScale(gray, 1.3)
#detect the face and mache ein Rechteck darum.
für (x,y,w,h) in Gesichtern:
cv2.rectangle(img,(x,y),(x+w,y+h),( 0,255,0),5)
roi_gray =grau[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))
# Zentrum des roi (Rechteck)
xx =int(x+(x+h))/2
yy =int(y+(y+w))/2
print (xx)
print (yy)
center =(xx,yy)
# Daten an Arduino senden
print("Center of Rectangle is :", center)
data ="X{0:d}Y{1:d}Z".format(xx, yy)
print ("output ='" +data+ "'")
arduino.write( data)
#Anzeige des Streams.
cv2.imshow('img',img)
#Drücken Sie 'Esc', um die Ausführung zu beenden
k =cv2.waitKey(30) &0xff
if k ==27:
break

Sobald dies erledigt ist, schreiben Sie den Code für Arduino ...

haarcascade_frontalface_default.xml face.py

Schritt 4:Arduino-Code

Nachdem das Python-Skript fertig ist, benötigen wir eine Arduino-Skizze, um das Servo zu steuern. Beziehen Sie sich auf den folgenden Code, fügen Sie ihn in die Arduino IDE ein und speichern Sie ihn als 'servo.ino' im selben Ordner wie face.py und haarcascade. Laden Sie den Code hoch und fahren Sie mit dem nächsten Schritt fort, um die Verbindungen herzustellen.

(Herunterladbare Datei unten angegeben.)

#include
Servo servoVer; //Vertikal-Servo
Servo-ServoHor; //Horizontaler Servo
int x;
int y;
int prevX;
int prevY;
void setup()
{
Serial .begin(9600);
servoVer.attach(5); // Vertikalen Servo an Pin 5 anbringen
servoHor.attach (6); // Horizontales Servo an Pin 6 anbringen
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

Schritt 5:Pan-Tilt-Mechanismus:-

Ich habe ein leicht erhältliches Kit für den Pan-Tilt verwendet. Wenn Sie möchten, können Sie selbst einen aus Holz / Kunststoff herstellen oder sogar einen 3D-Druck herstellen.

Das von mir verwendete ist ziemlich billig und sehr einfach zu montieren. Wenn Sie jedoch eine Anleitung dazu benötigen, finden Sie sie hier.

Schritt 6:Verbindungen herstellen

Die Schaltung ist ziemlich einfach. Schließen Sie einfach zwei Servos an Arduino an.

  • Vertikal zu Pin 5
  • Horizontal zu Pin 6
  • Strom auf +5V
  • Masse zu GND

Überprüfen Sie den Schaltplan als Referenz.

Schritt 7:Testen

  • Nachdem alles erledigt ist, müssen Sie als letztes testen, ob es funktioniert. Um zuerst zu testen, stellen Sie sicher, dass die Servos richtig mit Arduino verbunden sind und die Skizze hochgeladen wurde.
  • Nachdem die Skizze hochgeladen wurde, schließen Sie die IDE, damit der Port frei mit Python verbunden werden kann.
  • Öffnen Sie nun 'face.py' mit Python IDLE und drücken Sie 'F5', um den Code auszuführen. Es dauert einige Sekunden, um eine Verbindung zu arduino herzustellen, und dann sollten Sie ein Fenster sehen können, in dem die Webcam gestreamt wird. Jetzt erkennt der Code Ihr Gesicht und die Servos werden es verfolgen.
  • Der Servo sollte sich bewegen, wenn Sie das Objekt bewegen. Befestigen Sie jetzt einfach die Kamera an den Servos, damit sie sich mit den Servos mitbewegt.

Hoffe du magst es. und lerne etwas Neues.

Danke!

Code

  • servo.ino
  • Code-Snippet 2
  • Code-Snippet #3
servo.inoArduino
Fehler beim Öffnen der Datei.
Code-Snippet #2Kurztext
#importieren Sie alle erforderlichen Moduleimport numpy as npimport serialimport timeimport sysimport cv2#Setup Kommunikationspfad für arduino (Anstelle von 'COM5' setzen Sie den Port, mit dem Ihr arduino verbunden ist)arduino =serial.Serial('COM5', 9600 ) time.sleep(2)print("Connected to arduino...")#Importieren der Haarcascade für die Gesichtserkennungface_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#Um den Videostream von webcam.cap aufzunehmen =cv2.VideoCapture (0)#Lesen Sie das aufgenommene Bild, konvertieren Sie es in ein Graubild und finden Sie Gesichter während 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) grey =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces =face_cascade.detectMultiScale(gray, 1.3)#erkenne das Gesicht und bilde ein Rechteck darum. für (x,y,w,h) in Flächen:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),5) roi_gray =grau[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)) # Roi-Mitte (Rechteck) xx =int(x+(x+h))/2 yy =int(y+(y+w))/2 print (xx) print (yy) center =(xx,yy)# senden data to arduino print("Center of Rectangle is:", center) data ="X{0:d}Y{1:d}Z".format(xx, yy) print ("output ='" +data+ "' ") arduino.write(data)#Anzeige des Streams. cv2.imshow('img',img)#Hit 'Esc' um die Ausführung zu beenden k =cv2.waitKey(30) &0xff if k ==27:break
Code-Snippet #3Kurztext
#includeServo servoVer; // Vertikaler ServoServo servoHor; // Horizontaler Servoint x;int y;int prevX;int prevY;void setup () { Serial.begin (9600); servoVer.attach(5); // Vertikalen Servo an Pin 5 anbringen servoHor.attach (6); // Horizontales Servo an Pin 6 anschließen 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 (); } }}

Herstellungsprozess

  1. Python- und Raspberry Pi-Temperatursensor
  2. Echtzeit-Gesichtserkennung:Ein End-to-End-Projekt
  3. Automatische Bildverfolgung von Objekten
  4. DTMF-Decoder, der nur Arduino verwendet
  5. Erstellen von Monitor-Ambilight mit Arduino
  6. Anwesenheitssystem mit Arduino und RFID mit Python
  7. ULTRASCHALLLEVITATION-Maschine mit ARDUINO
  8. DIY-Voltmeter mit Arduino und Smartphone
  9. Herzfrequenzmesser mit IoT
  10. WebServerBlink mit Arduino Uno WiFi