Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Caméra de suivi du visage

Composants et fournitures

Arduino UNO
× 1
webcam
× 1
bande en caoutchouc
× 1
Alimentation murale à découpage 9V 1A
× 1
Servos MG-90s
× 2
Prise jack 2.1*5.5mm
× 1
Régulateur linéaire (7805)
× 1
Vis autotaraudeuses M2*10mm
× 15
trombone
× 1
Kit de fil de connexion, 22 AWG
× 1
en-tête de broche
× 1
LED 5 mm :Rouge
× 1
LED 5 mm :Vert
× 1
LED 5 mm :Jaune
× 1
Résistance 220 ohm
× 3
Tube thermorétractable
× 1

Outils et machines nécessaires

Dénudeur et coupe-fil, 18-10 AWG / 0.75-4mm² Fils de capacité
Pince, bec long
Fer à souder (générique)
multimètre
tournevis
Imprimante 3D (générique)

Applications et services en ligne

Microsoft Windows 10

À propos de ce projet


Il y a quelques mois, j'ai modélisé et imprimé une tête de mon collègue pour le plaisir. J'ai pensé que ce serait amusant de pousser la blague et de construire un mécanisme pour cette tête qui peut détecter les gens et continuer à les regarder pendant qu'ils se déplacent dans la pièce.

J'ai eu du mal à rendre le mécanisme suffisamment petit pour s'adapter à mon impression 3D, donc au lieu de verrouiller le projet dans un placard pour toujours et de l'oublier, j'ai décidé de créer un modèle facile à assembler avec un logiciel facile à utiliser pour que tout le monde puisse en profiter et s'appuyer sur .

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

Comment ça marche ?

La caméra se déplace à l'aide de deux servos pilotés par un Arduino Uno. L'appareil photo est connecté à un ordinateur sur lequel un logiciel essaie de trouver des visages dans les images reçues de l'appareil photo.

Si un visage est trouvé, le logiciel enverra un message à l'Arduino pour faire bouger la caméra afin d'obtenir le visage détecté au centre de l'image.

Si aucun visage n'est trouvé, le logiciel enverra un message à l'Arduino pour le déplacer vers une position aléatoire.

J'ai essayé de rendre le logiciel assez flexible avec des options telles que :

  • plages d'asservissement modifiables
  • possibilité d'inverser la rotation des servos
  • contrôle manuel

Espérons que cela facilitera sa réutilisation à d'autres fins.

J'ai également ajouté 3 LED qui indiquent l'état de la détection, rouge pour aucune détection, jaune lorsqu'un visage est détecté mais pas au centre de l'image, et verte lorsqu'un visage est détecté et au centre de l'image.

Les LED ne sont pas très intéressantes en elles-mêmes mais il devrait être facile de modifier l'appareil pour effectuer une action utile au lieu de simplement allumer et éteindre quelques lumières.

La communication entre l'Arduino et le logiciel se fait par communication série (via USB).

Le logiciel de détection de visage a été écrit en Python. J'ai laissé tous les fichiers Python sur GitHub au cas où vous voudriez jeter un œil au code (attention :ce n'est probablement pas génial, j'apprends tout seul) ou les réutiliser pour votre propre projet.

Si Python n'est pas votre truc, vous pouvez également télécharger la version exécutable sur mon site Web.

Si vous souhaitez créer le vôtre, regardez les vidéos suivantes. J'ai essayé de les rendre aussi faciles que possible à suivre, j'espère avoir fait du bon travail.

Tout ce dont vous avez besoin

Assemblage

Câblage

Logiciel et configuration


Code

  • Code Arduino
Code ArduinoC/C++
C'est le code qui sera téléchargé sur l'arduino
//Sketch basé sur le travail effectué par Robin2 sur le forum arduino//plus d'infos ici//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, SORTIE); pinMode(jaune Pin, SORTIE); pinMode(greenledPin, SORTIE); //moveServo(); start_sequence(); retard (200); Serial.println(""); // envoyer un message à l'ordinateur}//8=============Dvoid loop() { getDataFromPC(); réponseAuPC(); moveServo(); setLED();}//8=============Dvoid getDataFromPC() { // recevoir les données du PC et les enregistrer dans inputBuffer if(Serial.available()> 0) { char x =Serial.read(); //lire le caractère de la série if (x ==endMarker) { //recherche le marqueur de fin readInProgress =false; //si trouvé, définir la lecture en cours true (arrêtera d'ajouter un nouvel octet au tampon) newDataFromPC =true; //fait savoir à l'arduino que de nouvelles données sont disponibles inputBuffer[bytesRecvd] =0; //effacer le tampon d'entrée processData(); // traiter les données dans le tampon } if(readInProgress) { inputBuffer[bytesRecvd] =x; //remplir le tampon d'entrée avec des octets bytesRecvd ++ ; //incrémenter l'index if (bytesRecvd ==buffSize) { //quand le tampon est plein bytesRecvd =buffSize - 1; //garder de l'espace pour le marqueur de fin } } if (x ==startMarker) { // rechercher le start maker bytesRecvd =0; // s'il est trouvé, définit l'octet reçu sur 0 readInProgress =true ; // définit la lecture en cours true } }}//8=============Dvoid processData() // pour le type de données "" { char * strtokIndx; // ceci est utilisé par strtok() comme index strtokIndx =strtok(inputBuffer,","); // récupère la première partie panServoAngle =atof(strtokIndx); // convertit cette partie en flottant strtokIndx =strtok(NULL,","); // récupère la deuxième partie (cela continue là où l'appel précédent s'est arrêté) tiltServoAngle =atof(strtokIndx); // convertit cette partie en flottant strtokIndx =strtok(NULL, ","); // récupère la dernière partie LED_state =atoi(strtokIndx); // convertir cette partie en entier (chaîne en entier)}//8=============Dvoid replyToPC() { 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(jaune Pin, HAUT); digitalWrite(greenledPin, LOW); } else if(LED_state ==1){ digitalWrite(redledPin, LOW); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, HIGH); } else if(LED_state ==0){ digitalWrite(redledPin, HIGH); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, LOW); } else if(LED_state ==3){ digitalWrite(redledPin, HIGH); digitalWrite(jaune Pin, HAUT); digitalWrite(greenledPin, HIGH); } else{ digitalWrite(redledPin, LOW); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, LOW); } }//8=============D void start_sequence() { panServo.write(90); tiltServo.write(90); retard (300); digitalWrite(redledPin, HAUT); retard (100); digitalWrite(redledPin, LOW); digitalWrite (jaune Pin, HAUT); retard (100); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, HIGH); retard (100); digitalWrite(redledPin, LOW); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, LOW); retard (100); digitalWrite(redledPin, HAUT); digitalWrite(jaune Pin, HAUT); digitalWrite(greenledPin, HIGH); retard (100); digitalWrite(redledPin, LOW); digitalWrite(jaune Pin, LOW); digitalWrite(greenledPin, LOW); }
Logiciel de détection de visage
Voici le référentiel où vous pouvez trouver les fichiers du logiciel de détection de visage .Vous pouvez également trouver une version exécutable sur mon site Web .https://github.com/LittleFrenchKev/face_tracking_camera

Pièces et boîtiers personnalisés

pièces de caméra de suivi du visage
toutes les pièces nécessaires pour construire la mini caméra de suivi du visage. Vous pouvez également les retrouver ici :https://www.littlefrenchkev.com/download Fichier CAD sur thingverse.com

Schémas


Processus de fabrication

  1. Pan/Tilt Face Tracking avec le raspberry pi
  2. Carte de visite du jeu Tic Tac Toe
  3. Capteur de température multiple
  4. Contrôle de fer à souder DIY pour 862D+
  5. MotionSense
  6. Sécurité incendie des imprimantes 3D
  7. Jauge IoT avec Arduino, Yaler et IFTTT
  8. Lévitation électromagnétique répulsive Arduino
  9. CoroFence - Détecteur thermique🖖