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

Gezichtsvolgcamera

Componenten en benodigdheden

Arduino UNO
× 1
webcam
× 1
elastiekje
× 1
9V 1A schakelende muurvoeding
× 1
MG-90s servo's
× 2
2.1*5.5mm jackplug
× 1
Lineaire regelaar (7805)
× 1
M2*10 mm zelftappende schroeven
× 15
paperclip
× 1
Aansluitkabelset, 22 AWG
× 1
pin-header
× 1
5 mm LED:rood
× 1
5 mm LED:groen
× 1
5 mm LED:geel
× 1
Weerstand 220 ohm
× 3
krimpkous
× 1

Benodigde gereedschappen en machines

Draadstripper en snijder, 18-10 AWG / 0,75-4 mm² Capaciteit Draden
Tang, lange neus
Soldeerbout (algemeen)
multimeter
schroevendraaier
3D-printer (algemeen)

Apps en online services

Microsoft Windows 10

Over dit project


Een paar maanden geleden heb ik voor de lol het hoofd van een van mijn collega's gemodelleerd en afgedrukt. Ik dacht dat het grappig zou zijn om de grap door te drukken en een mechanisme voor dit hoofd te bouwen dat mensen kan detecteren en naar hen kan blijven staren terwijl ze door de kamer bewegen.

Ik had moeite om het mechanisme klein genoeg te maken om in mijn 3D-print te passen, dus in plaats van het project voor altijd in een kast op te sluiten en het te vergeten, besloot ik een eenvoudig te monteren model te maken met gebruiksvriendelijke software waar iedereen van kan genieten en op kan bouwen .

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

Hoe werkt het?

De camera beweegt met behulp van twee servo's aangedreven door een Arduino Uno. De camera is aangesloten op een computer waar software probeert gezichten te vinden in de beelden die van de camera zijn ontvangen.

Als er een gezicht wordt gevonden, stuurt de software een bericht naar de Arduino om de camera te laten bewegen om het gedetecteerde gezicht in het midden van de afbeelding te krijgen.

Als er geen gezicht wordt gevonden, stuurt de software een bericht naar de Arduino om deze naar een willekeurige positie te verplaatsen.

Ik heb geprobeerd de software behoorlijk flexibel te maken met opties zoals:

  • aanpasbare servobereiken
  • mogelijkheid om de rotatie van de servo's om te keren
  • handmatige bediening

Hopelijk maakt dit het gemakkelijk om het voor andere doeleinden te hergebruiken.

Ik heb ook 3 LED's toegevoegd die de status van de detectie weergeven, rood voor geen detectie, geel wanneer een gezicht wordt gedetecteerd maar niet in het midden van het beeld, en groen wanneer een gezicht wordt gedetecteerd en in het midden van het beeld.

De LED's zijn op zichzelf niet erg interessant, maar het zou gemakkelijk moeten zijn om het apparaat aan te passen om een ​​nuttige actie uit te voeren in plaats van alleen een paar lampjes AAN en UIT te zetten.

De communicatie tussen de Arduino en de software verloopt via seriële communicatie (via USB).

De gezichtsherkenningssoftware is geschreven in Python. Ik heb alle Python-bestanden op GitHub achtergelaten voor het geval je de code wilt bekijken (waarschuwing:het is waarschijnlijk niet geweldig, ik leer het alleen) of hergebruik ze voor je eigen project.

Als Python niet jouw ding is, kun je de uitvoerbare versie ook downloaden op mijn website.

Als je er zelf een wilt bouwen, bekijk dan de volgende video's. Ik heb geprobeerd ze zo gemakkelijk mogelijk te volgen, ik hoop dat ik dat goed heb gedaan.

Alles wat je nodig hebt

Montage

Bedrading

Software en configuratie


Code

  • Arduino-code
Arduino-codeC/C++
Dit is de code die wordt geüpload naar de Arduino
//Sketch op basis van het werk van Robin2 op het Arduino-forum//meer info 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, UITGANG); pinMode (geelgekleurde pin, UITGANG); pinMode(greenledPin, OUTPUT); //moveServo(); start_sequence(); vertraging (200); Serial.println(""); // stuur bericht naar computer}//8=============Dvoid loop() { getDataFromPC(); antwoordToPC(); verplaatsServo(); setLED();}//8=============Dvoid getDataFromPC() {// ontvang gegevens van pc en sla deze op in inputBuffer if(Serial.available()> 0) {char x =Serieel.lezen(); // lees char van seriële if (x ==endMarker) {// zoek naar eindmarkering readInProgress =false; //indien gevonden, stel read in progress true in (stopt met het toevoegen van nieuwe byte aan buffer) newDataFromPC =true; // laat Arduino weten dat er nieuwe gegevens beschikbaar zijn inputBuffer [bytesRecvd] =0; // wis invoerbuffer processData (); // verwerk gegevens in buffer} if (readInProgress) { inputBuffer [bytesRecvd] =x; // vul de invoerbuffer in met bytes bytesRecvd ++; // index verhogen als (bytesRecvd ==buffSize) {//wanneer de buffer vol is bytesRecvd =buffSize - 1; //houd ruimte voor eindmarkering}} if (x ==startMarker) {// zoek naar startmaker bytesRecvd =0; // indien gevonden, stel ontvangen byte in op 0 readInProgress =true; // set read in progress true } }}//8=============Dvoid processData() // voor gegevenstype "" { char * strtokIndx; // dit wordt door strtok() gebruikt als een index strtokIndx =strtok(inputBuffer,","); // haal het eerste deel panServoAngle =atof(strtokIndx); // converteer dit deel naar een float strtokIndx =strtok(NULL,","); // haal het tweede deel (dit gaat verder waar de vorige oproep was gebleven) tiltServoAngle =atof(strtokIndx); // converteer dit deel naar een float strtokIndx =strtok(NULL, ","); // haal het laatste deel LED_state =atoi (strtokIndx); // converteer dit deel naar een geheel getal (string naar int)}//8=============Dvoid replyToPC() {if (newDataFromPC) { newDataFromPC =false; Serieel.print("<"); Serial.print(panServo.read()); Serieel.print(","); Serial.print(tiltServo.read()); Serieel.println(">"); }}//8=============Dvoid moveServo() { panServo.write(panServoAngle); tiltServo.write(tiltServoAngle);}void setLED(){ if(LED_state ==2){ digitalWrite(redledPin, LOW); digitalWrite (geelpin, HOOG); digitalWrite (greenledPin, LAAG); } else if(LED_state ==1){ digitalWrite(redledPin, LOW); digitalWrite (geelpin, LAAG); digitalWrite(greenledPin, HOOG); } else if(LED_state ==0){ digitalWrite(redledPin, HIGH); digitalWrite (geelpin, LAAG); digitalWrite (greenledPin, LAAG); } else if(LED_state ==3){ digitalWrite(redledPin, HIGH); digitalWrite (geelpin, HOOG); digitalWrite(greenledPin, HOOG); } else{ digitalWrite(redledPin, LOW); digitalWrite (geelpin, LAAG); digitalWrite (greenledPin, LAAG); } }//8=============D void start_sequence() {panServo.write(90); tiltServo.write(90); vertraging (300); digitalWrite (redledPin, HOOG); vertraging (100); digitalWrite (redledPin, LAAG); digitalWrite (geelpin, HOOG); vertraging (100); digitalWrite (geelpin, LAAG); digitalWrite(greenledPin, HOOG); vertraging (100); digitalWrite (redledPin, LAAG); digitalWrite (geelpin, LAAG); digitalWrite (greenledPin, LAAG); vertraging (100); digitalWrite (redledPin, HOOG); digitalWrite (geelpin, HOOG); digitalWrite(greenledPin, HOOG); vertraging (100); digitalWrite (redledPin, LAAG); digitalWrite (geelpin, LAAG); digitalWrite (greenledPin, LAAG); }
Gezichtsdetectiesoftware
Hier is de repository waar u de bestanden voor de gezichtsdetectiesoftware kunt vinden. U kunt ook een uitvoerbare versie vinden op mijn website .https://github.com/LittleFrenchKev/face_tracking_camera

Aangepaste onderdelen en behuizingen

onderdelen van gezichtsherkenningscamera's
alle onderdelen die nodig zijn om de mini gezichtsvolgcamera te bouwen. Je kunt ze ook hier vinden:https://www.littlefrenchkev.com/downloadCAD bestand op thingiverse.com

Schema's


Productieproces

  1. Pan / Tilt face-tracking met de raspberry pi
  2. Tic Tac Toe-spelvisitekaartje
  3. Multitemperatuursensor
  4. DIY-soldeerboutbesturing voor 862D+
  5. MotionSense
  6. 3D-printer brandveiligheid
  7. IoT-meter met Arduino, Yaler en IFTTT
  8. Arduino afstotende elektromagnetische levitatie
  9. Grijperbot met afstandsbediening
  10. Arduino aangedreven weerballon datalogger
  11. CoroFence - Thermische Detector🖖