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

Gesichtsverfolgungskamera

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Webcam
× 1
Gummiband
× 1
9V 1A Schaltnetzteil
× 1
MG-90s-Servos
× 2
2,1*5,5mm Klinkenstecker
× 1
Linearregler (7805)
× 1
M2*10mm selbstschneidende Schrauben
× 15
Büroklammer
× 1
Anschlusskabelsatz, 22 AWG
× 1
Stiftleiste
× 1
5 mm LED:Rot
× 1
5 mm LED:Grün
× 1
5 mm LED:Gelb
× 1
Widerstand 220 Ohm
× 3
Schrumpfschlauch
× 1

Notwendige Werkzeuge und Maschinen

Abisolierzange und -schneider, 18-10 AWG / 0,75-4 mm² Kapazität Drähte
Zange, lange Nase
Lötkolben (generisch)
Multimeter
Schraubendreher
3D-Drucker (generisch)

Apps und Onlinedienste

Microsoft Windows 10

Über dieses Projekt


Vor ein paar Monaten habe ich zum Spaß den Kopf eines Kollegen modelliert und gedruckt. Ich dachte, es wäre lustig, den Witz voranzutreiben und einen Mechanismus für diesen Kopf zu bauen, der Menschen erkennen und sie anstarren kann, während sie sich im Raum bewegen.

Ich hatte Mühe, den Mechanismus klein genug zu machen, um in meinen 3D-Druck zu passen. Anstatt das Projekt für immer in einem Schrank zu sperren und es zu vergessen, beschloss ich, ein einfach zu montierendes Modell mit einer einfach zu bedienenden Software zu erstellen, auf der alle Spaß haben und darauf aufbauen können .

...............https://www.littlefrenchkev.com/face-tracking-camera-mini.................

Wie funktioniert es?

Die Kamera bewegt sich mit zwei Servos, die von einem Arduino Uno angetrieben werden. Die Kamera ist an einen Computer angeschlossen, auf dem eine Software versucht, Gesichter in den von der Kamera empfangenen Bildern zu finden.

Wenn ein Gesicht gefunden wird, sendet die Software eine Nachricht an den Arduino, um die Kamera zu bewegen, um das erkannte Gesicht in die Mitte des Bildes zu bringen.

Wenn kein Gesicht gefunden wird, sendet die Software eine Nachricht an das Arduino, damit es sich an eine zufällige Position bewegt.

Ich habe versucht, die Software mit Optionen wie den folgenden recht flexibel zu gestalten:

  • veränderbare Servobereiche
  • Möglichkeit, die Servodrehung umzukehren
  • manuelle Steuerung

Hoffentlich wird es dadurch einfacher, es für andere Zwecke wiederzuverwenden.

Ich habe auch 3 LEDs hinzugefügt, die den Status der Erkennung anzeigen, rot für keine Erkennung, gelb, wenn ein Gesicht erkannt wird, aber nicht in der Mitte des Bildes, und grün, wenn ein Gesicht erkannt wird und sich in der Mitte des Bildes befindet.

Die LEDs an sich sind nicht sehr interessant, aber es sollte einfach sein, das Gerät zu modifizieren, um eine nützliche Aktion auszuführen, anstatt nur ein paar Lichter ein- und auszuschalten.

Die Kommunikation zwischen Arduino und Software erfolgt über serielle Kommunikation (über USB).

Die Gesichtserkennungssoftware wurde in Python geschrieben. Ich habe alle Python-Dateien auf GitHub gelassen, falls Sie sich den Code ansehen möchten (Achtung:es ist wahrscheinlich nicht großartig, ich lerne alleine) oder sie für Ihr eigenes Projekt wiederverwenden.

Wenn Python nicht Ihr Ding ist, können Sie die ausführbare Version auch von meiner Website herunterladen.

Wenn Sie Ihre eigenen bauen möchten, sehen Sie sich die folgenden Videos an. Ich habe versucht, ihnen so einfach wie möglich zu folgen, ich hoffe, dass ich das gut gemacht habe.

Alles was Sie brauchen

Montage

Verkabelung

Software und Einrichtung


Code

  • Arduino-Code
Arduino-CodeC/C++
Dies ist der Code, der auf der Grundlage der Arbeit von Robin2 im Arduino-Forum in das arduino
//Skizze hochgeladen wird//weitere Informationen hier//https://forum.arduino.cc/index.php?topic=225329.msg1810764#msg1810764#include Servo panServo;Servo TiltServo; byte redledPin =2;byte yellowledPin =3;byte greenledPin =4;const byte buffSize =40;char inputBuffer[buffSize];const char startMarker ='<';const char endMarker ='>';byte bytesRecvd =0;boolean readInProgress =false;boolean newDataFromPC =false;float panServoAngle =90.0;float TiltServoAngle =90.0;int LED_state =0;//8=============Dvoid setup() { Serial.begin(115200); panServo.attach(8); TiltServo.attach(9); pinMode (redledPin, AUSGANG); pinMode (gelber Pin, AUSGANG); pinMode (grünledPin, AUSGANG); //moveServo(); start_sequence(); Verzögerung (200); Serial.println(""); // Nachricht an Computer senden}//8=============Dvoid loop () { getDataFromPC (); antwortenToPC(); moveServo(); setLED();}//8=============Dvoid getDataFromPC() { // Daten vom PC empfangen und in inputBuffer speichern if(Serial.available()> 0) { char x =Serial.read(); // char aus seriellen lesen if (x ==endMarker) { // nach Endmarker suchen readInProgress =false; // wenn gefunden, setze den Lesevorgang auf true (beendet das Hinzufügen neuer Bytes zum Puffer) newDataFromPC =true; // arduino wissen lassen, dass neue Daten verfügbar sind inputBuffer [bytesRecvd] =0; // Eingabepuffer löschen processData(); // Daten im Puffer verarbeiten} if(readInProgress) { inputBuffer[bytesRecvd] =x; // Eingabepuffer mit Bytes füllen bytesRecvd ++; //Inkrementiere den Index if (bytesRecvd ==buffSize) { //wenn der Puffer voll ist bytesRecvd =buffSize - 1; // Platz für Endmarker behalten}} if (x ==startMarker) { // Suche nach Starthersteller bytesRecvd =0; // wenn gefunden, setze das empfangene Byte auf 0 readInProgress =true; // setze den Lesevorgang auf true }}}//8=============Dvoid processData() // für den Datentyp "" { char * strtokIndx; // dies wird von strtok() als Index verwendet strtokIndx =strtok(inputBuffer,","); // Holen Sie sich den ersten Teil panServoAngle =atof(strtokIndx); // diesen Teil in einen Float umwandeln strtokIndx =strtok(NULL,","); // Holen Sie sich den zweiten Teil (dieser geht weiter, wo der vorherige Aufruf aufgehört hat) TiltServoAngle =atof(strtokIndx); // diesen Teil in einen Float umwandeln strtokIndx =strtok(NULL, ","); // Holen Sie sich den letzten Teil LED_state =atoi (strtokIndx); // diesen Teil in eine ganze Zahl umwandeln (String in int)}//8=============Dvoid responseToPC() { if (newDataFromPC) { newDataFromPC =false; Serial.print("<"); Serial.print (panServo.read ()); Serial.print (","); Serial.print (tiltServo.read ()); Serial.println(">"); }}//8=============Dvoid moveServo () { panServo.write (panServoAngle); TiltServo.write (tiltServoAngle);}void setLED () { if (LED_state ==2) { digitalWrite (redledPin, LOW); digitalWrite (gelber Pin, HIGH); digitalWrite (grünledPin, LOW); aufrechtzuerhalten. Sonst if (LED_state ==1) { DigitalWrite (redledPin, LOW); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, HIGH); aufrechtzuerhalten. Sonst if (LED_state ==0) { DigitalWrite (redledPin, HIGH); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, LOW); aufrechtzuerhalten. Sonst if (LED_state ==3) { DigitalWrite (redledPin, HIGH); digitalWrite (gelber Pin, HIGH); digitalWrite (grünledPin, HIGH); aufrechtzuerhalten. Sonst { DigitalWrite (redledPin, LOW); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, LOW); aufrechtzuerhalten.}}//8=============D void start_sequence() {panServo.write (90); TiltServo.write(90); Verzögerung (300); digitalWrite (redledPin, HIGH); Verzögerung (100); digitalWrite (redledPin, LOW); digitalWrite (gelber Pin, HIGH); Verzögerung (100); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, HIGH); Verzögerung (100); digitalWrite (redledPin, LOW); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, LOW); Verzögerung (100); digitalWrite (redledPin, HIGH); digitalWrite (gelber Pin, HIGH); digitalWrite (grünledPin, HIGH); Verzögerung (100); digitalWrite (redledPin, LOW); digitalWrite (gelber Pin, LOW); digitalWrite (grünledPin, LOW); }
Gesichtserkennungssoftware
Hier ist das Repository, in dem Sie die Dateien für die Gesichtserkennungssoftware finden. Eine ausführbare Version finden Sie auch auf meiner Website. https://github.com/LittleFrenchKev/face_tracking_camera

Kundenspezifische Teile und Gehäuse

Gesichtsverfolgungskamerateile
Alle Teile, die zum Bau der Gesichtsverfolgungskamera Mini benötigt werden. Sie finden sie auch hier:https://www.littlefrenchkev.com/downloadCAD-Datei auf thingiverse.com

Schaltpläne


Herstellungsprozess

  1. Schwenk-/Neige-Gesichtsverfolgung mit dem Himbeer-Pi
  2. Visitenkarte des Tic-Tac-Toe-Spiels
  3. Multi-Temperatursensor
  4. DIY Lötkolbensteuerung für 862D+
  5. MotionSense
  6. 3D-Drucker Brandschutz
  7. IoT-Messgerät mit Arduino, Yaler und IFTTT
  8. Arduino Repulsive Electromagnetic Levitation
  9. Greifer-Bot mit Fernbedienung
  10. CoroFence - Wärmedetektor🖖