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

Sistema de Seguimiento Facial en Tiempo Real con Arduino y OpenCV

Componentes y suministros

ComponenteCantidad
Arduino UNO1
Webcam (mini USB)1
Micro servos (SG90 o similar)2
Kit Pan-Tilt (soporte para 2 servos)1
Protoboard1

Aplicaciones y servicios online

Sobre el proyecto

En tutoriales previos vimos comunicación Arduino-Python con pyserial y detección de color con OpenCV. Ahora integramos detección facial Haar Cascade para mover una cámara montada en pan-tilt y que siga tu rostro.

Requisitos mínimos: conocimientos básicos de Arduino y Python.

Paso 1: Hardware necesario

Paso 2: Entorno Python

  1. Instala Python 2.7.14 (verificar con python en CMD o IDLE).
  2. Configura variable de entorno PATH si falla.
  3. Instala módulos: pip install pyserial opencv-python numpy
  4. Descarga haarcascade_frontalface_default.xml y ponlo en la carpeta del proyecto.

Paso 3: Script Python (face.py)

import numpy as np
import serial, time, sys, cv2

# Puerto serie Arduino (cambia 'COM5' al tuyo)
arduino = serial.Serial('COM5', 9600)
time.sleep(2)
print("Conectado a Arduino...")

# Clasificador Haar
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# Captura vídeo
cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    cv2.resizeWindow('img', 500, 500)
    
    # Cruces de referencia en centro (250,250)
    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)
    
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3)
    
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 5)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        
        # Centro del rectángulo
        xx = int(x + (x + w)) // 2
        yy = int(y + (y + h)) // 2
        center = (xx, yy)
        print("Centro:", center)
        
        # Enviar a Arduino: formato "X{xx}Y{yy}Z"
        data = "X{0:d}Y{1:d}Z".format(xx, yy)
        print("Output:", data)
        arduino.write(data.encode())
    
    cv2.imshow('img', img)
    if cv2.waitKey(30) & 0xFF == 27:  # ESC para salir
        break

cap.release()
cv2.destroyAllWindows()

Paso 4: Código Arduino (servo.ino)

#include <Servo.h>

Servo servoVer;  // Vertical (pin 5)
Servo servoHor;  // Horizontal (pin 6)

int x, y, prevX, prevY;

void setup() {
  Serial.begin(9600);
  servoVer.attach(5);
  servoHor.attach(6);
  servoVer.write(90);  // Centro
  servoHor.write(90);
}

void updatePosition() {
  if (prevX != x || prevY != y) {
    // Mapear coordenadas imagen (0-600, 0-450) a ángulos servo
    int servoX = map(x, 600, 0, 70, 179);   // Invertido horizontal
    int servoY = map(y, 450, 0, 179, 95);   // Rango vertical limitado
    
    servoX = constrain(servoX, 70, 179);
    servoY = constrain(servoY, 95, 179);
    
    servoHor.write(servoX);
    servoVer.write(servoY);
    
    prevX = x; prevY = y;
  }
}

void loop() {
  if (Serial.available() > 0) {
    if (Serial.read() == 'X') {
      x = Serial.parseInt();
      if (Serial.read() == 'Y') {
        y = Serial.parseInt();
        updatePosition();
      }
    }
    // Limpiar buffer
    while (Serial.available() > 0) Serial.read();
  }
}

Paso 5: Mecanismo Pan-Tilt

Kit comercial barato y fácil de montar. Instrucciones en el enlace del proyecto original.

Paso 6: Conexiones

Ver diagrama de circuito adjunto.

Paso 7: Pruebas

  1. Sube sketch a Arduino, cierra IDE (libera puerto COM).
  2. Ejecuta face.py con Python IDLE (F5).
  3. Ventana OpenCV muestra vídeo con detección facial.
  4. Los servos mueven la cámara siguiendo tu rostro.
  5. Monta la webcam en el pan-tilt para que se mueva con los servos.

Archivos adjuntos

Proceso de manufactura

  1. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  2. Reconocimiento Facial en Tiempo Real en Raspberry Pi – Guía Completa
  3. Seguimiento Automático de Objetos por Visión Artificial con Raspberry Pi y OpenCV
  4. Construye un Decodificador DTMF Solo con Arduino – Sin CI Externos
  5. Crea un Impresionante Sistema Ambilight para Monitor con Arduino
  6. Sistema de Asistencia RFID Fiable con Arduino y Python
  7. Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
  8. Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
  9. Monitor de Frecuencia Cardíaca IoT en Tiempo Real con Arduino y MAX30100
  10. Servidor Web Arduino Uno WiFi: Controla un LED desde el Navegador
  11. Construir un termómetro IoT con Python: Guía completa