Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Cámara de seguimiento facial

Componentes y suministros

Arduino UNO
× 1
webcam
× 1
banda elástica
× 1
Fuente de alimentación de pared conmutada 9V 1A
× 1
Servos MG-90s
× 2
Enchufe jack de 2,1 * 5,5 mm
× 1
Regulador lineal (7805)
× 1
Tornillos autorroscantes M2 * 10 mm
× 15
clip
× 1
Kit de cables de conexión, 22 AWG
× 1
encabezado de pin
× 1
LED de 5 mm:rojo
× 1
LED de 5 mm:verde
× 1
LED de 5 mm:amarillo
× 1
Resistencia 220 ohmios
× 3
tubo termorretráctil
× 1

Herramientas y máquinas necesarias

Pelacables y cortador, 18-10 AWG / 0,75-4 mm² Cables de capacidad
Alicates, punta larga
Soldador (genérico)
multímetro
destornillador
Impresora 3D (genérica)

Aplicaciones y servicios en línea

Microsoft Windows 10

Acerca de este proyecto


Hace unos meses, modelé e imprimí una de las cabezas de mi colega por diversión. Pensé que sería divertido seguir el chiste y construir un mecanismo para esta cabeza que pueda detectar a las personas y seguir mirándolas mientras se mueven por la habitación.

Luché para hacer que el mecanismo fuera lo suficientemente pequeño como para que se ajustara a mi impresión 3D, así que en lugar de guardar el proyecto en un armario para siempre y olvidarme de él, decidí hacer un modelo fácil de ensamblar con un software fácil de usar para que todos puedan disfrutar y construir. .

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

¿Cómo funciona?

La cámara se mueve usando dos servos impulsados ​​por un Arduino Uno. La cámara está conectada a una computadora donde un software intenta encontrar caras en las imágenes recibidas de la cámara.

Si se encuentra una cara, el software enviará un mensaje al Arduino para que la cámara se mueva a fin de obtener la cara detectada en el centro de la imagen.

Si no se encuentra ninguna cara, el software enviará un mensaje al Arduino para que se mueva a una posición aleatoria.

Intenté hacer que el software fuera bastante flexible con opciones como:

  • rangos de servo modificables
  • posibilidad de invertir la rotación de los servos
  • control manual

Con suerte, esto facilitará su reutilización para otros fines.

También agregué 3 LED que muestran el estado de detección, rojo para no detección, amarillo cuando se detecta una cara pero no en el centro de la imagen y verde cuando se detecta una cara y en el centro de la imagen.

Los LED no son muy interesantes por sí mismos, pero debería ser fácil modificar el dispositivo para realizar una acción útil en lugar de simplemente encender y apagar algunas luces.

La comunicación entre el Arduino y el software se realiza mediante comunicación en serie (vía USB).

El software de detección de rostros se escribió en Python. Dejé todos los archivos de Python en GitHub en caso de que quieras echar un vistazo al código (advertencia:probablemente no sea genial, estoy aprendiendo por mi cuenta) o reutilizarlos para tu propio proyecto.

Si Python no es lo tuyo, también puedes descargar la versión ejecutable en mi sitio web.

Si quieres construir el tuyo propio, mira los siguientes videos. Traté de hacerlos lo más fáciles posible de seguir, espero haber hecho un buen trabajo en eso.

Todo lo que necesitas

Ensamblaje

Cableado

Software y configuración


Código

  • código Arduino
Código Arduino C / C ++
Este es el código que se cargará en arduino
 // Sketch basado en el trabajo realizado por Robin2 en el foro arduino // más información aquí // 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; booleano 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, SALIDA); pinMode (yellowledPin, SALIDA); pinMode (greenledPin, SALIDA); // moveServo (); start_sequence (); retraso (200); Serial.println (""); // enviar mensaje a la computadora} // 8 =============Dvoid loop () {getDataFromPC (); replyToPC (); moveServo (); setLED ();} // 8 =============Dvoid getDataFromPC () {// recibir datos de la PC y guardarlos en inputBuffer if (Serial.available ()> 0) {char x =Serial.read (); // lee el carácter de la serie if (x ==endMarker) {// busca el marcador final readInProgress =false; // si se encuentra, establece la lectura en progreso verdadera (dejará de agregar un nuevo byte al búfer) newDataFromPC =true; // deja saber a arduino que hay nuevos datos disponibles inputBuffer [bytesRecvd] =0; // limpiar el búfer de entrada processData (); // procesar datos en el búfer} if (readInProgress) {inputBuffer [bytesRecvd] =x; // llenar el búfer de entrada con bytes bytesRecvd ++; // incrementa el índice if (bytesRecvd ==buffSize) {// cuando el búfer está lleno bytesRecvd =buffSize - 1; // mantener espacio para el marcador de finalización}} if (x ==startMarker) {// buscar el creador de inicio bytesRecvd =0; // si se encuentra, establece el byte recibido en 0 readInProgress =true; // establece la lectura en progreso verdadera}}} // 8 =============Dvoid processData () // para el tipo de datos "" {char * strtokIndx; // strtok () lo usa como índice strtokIndx =strtok (inputBuffer, ","); // obtener la primera parte panServoAngle =atof (strtokIndx); // convierte esta parte en un float strtokIndx =strtok (NULL, ","); // obtener la segunda parte (esto continúa donde se quedó la llamada anterior) tiltServoAngle =atof (strtokIndx); // convierte esta parte en un float strtokIndx =strtok (NULL, ","); // obtener la última parte LED_state =atoi (strtokIndx); // convierte esta parte en un entero (cadena a int)} // 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 (yellowledPin, HIGH); digitalWrite (greenledPin, LOW); } else if (LED_state ==1) {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); } else if (LED_state ==0) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); } else if (LED_state ==3) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); } else {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); }} // 8 =============D void start_sequence () {panServo.write (90); tiltServo.write (90); retraso (300); digitalWrite (redledPin, ALTO); retraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, HIGH); retraso (100); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); retraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); retraso (100); digitalWrite (redledPin, ALTO); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); retraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); } 
Software de detección de rostros
Aquí está el repositorio donde puede encontrar los archivos para el software de detección de rostros. También puede encontrar una versión ejecutable en mi sitio web .https://github.com/LittleFrenchKev/face_tracking_camera

Piezas y carcasas personalizadas

piezas de la cámara de seguimiento facial
todas las piezas necesarias para construir la mini cámara de seguimiento facial. También puede encontrarlos aquí:https://www.littlefrenchkev.com/downloadCAD archivo en thingiverse.com

Esquemas


Proceso de manufactura

  1. Rastreo de rostro con movimiento horizontal / vertical con raspberry pi
  2. Tarjeta de visita del juego Tic Tac Toe
  3. Sensor de temperatura múltiple
  4. Control de cautín de bricolaje para 862D +
  5. MotionSense
  6. Seguridad contra incendios de la impresora 3D
  7. Medidor de IoT con Arduino, Yaler e IFTTT
  8. Levitación electromagnética repulsiva Arduino
  9. Bot de agarre de control remoto
  10. Registrador de datos de globos meteorológicos con tecnología Arduino
  11. CoroFence - Detector térmico🖖