Tabla de contenido:

SEGUIMIENTO FACIAL USANDO ARDUINO !!!: 7 Pasos
SEGUIMIENTO FACIAL USANDO ARDUINO !!!: 7 Pasos

Video: SEGUIMIENTO FACIAL USANDO ARDUINO !!!: 7 Pasos

Video: SEGUIMIENTO FACIAL USANDO ARDUINO !!!: 7 Pasos
Video: Detección y seguimiento de rostros con OpenCV + Python + Arduino Uno 2024, Noviembre
Anonim
SEGUIMIENTO FACIAL USANDO ARDUINO !!!
SEGUIMIENTO FACIAL USANDO ARDUINO !!!

En un instructivo anterior, compartí cómo puede comunicarse entre Arduino y Python usando el módulo 'pyserial' y controlar un LED. Si no lo has visto, compruébalo aquí: ¡COMUNICACIÓN ENTRE ARDUINO Y PYTHON!

Y cómo puede detectar el color de un objeto y rastrearlo en la pantalla, compruébelo aquí: DETECCIÓN DE COLOR USANDO OPENCV Y PYTHON.

En este Instructable, le mostraré cómo rastrear caras usando Arduino y Python y hacer que la cámara siga la cara. Esto puede parecer difícil, pero créame que no lo es. Todo lo que necesita es un conocimiento básico de Arduino y Python.

Entonces empecemos…

Paso 1: Cosas que necesitará:

Cosas que necesitará
Cosas que necesitará
Cosas que necesitará
Cosas que necesitará
Cosas que necesitará
Cosas que necesitará

Los requisitos son mínimos. Aquí he proporcionado una lista parcial de todo lo que necesita:

Requisito de hardware:

  • Arduino UNO (Amazon EE. UU. / Amazon UE)
  • Cámara web (Amazon EE. UU. / Amazon UE)
  • Servos x 2 (Amazon EE. UU. / Amazon UE)
  • Placa de pruebas (Amazon EE. UU. / Amazon UE)
  • Kit de servo Pan Tilt (Amazon EE. UU. / Amazon UE)

Requisito de software:

  1. Python 2.7 (debe estar instalado, el sistema operativo Linux generalmente lo tiene preinstalado)
  2. OpenCV (Puede descargarlo por separado o instalarlo usando 'pip install' Explicado más adelante)
  3. pyserial (se puede instalar con pip)
  4. numpy.
  5. Haarcascade.

Una vez recopilado todo, podemos pasar al paso de instalación …

Paso 2: Configurar el entorno de Python:

Configuración del entorno de Python
Configuración del entorno de Python
Configuración del entorno de Python
Configuración del entorno de Python
Configuración del entorno Python
Configuración del entorno Python

Instalando Python:

Entonces, primero necesitamos Python 2.7 en funcionamiento. Para hacer esto, primero descargue e instale python 2.7.14. Para comprobar si está instalado correctamente, vaya a: Búsqueda de Windows >> Escriba "IDLE" >> Presione Enter. Debería aparecer un Python Shell.

O

En la búsqueda, escriba 'CMD' y presione enter para abrir el símbolo del sistema. En CMD, escriba >> python y presione enter, debería mostrarse la interfaz de Python.

Si ve un error en CMD, no se preocupe, probablemente necesite establecer la variable de entorno. Puede seguir este tutorial aquí para configurar la variable de entorno.

Instalando 'pyserial', 'OpenCV "y" numpy "en python:

Para instalar estos módulos usaremos use pip install, Primero abra CMD y escriba los siguientes códigos: -

pip instalar serie

pip install opencv-python> pip install numpy

estos comandos instalarán los módulos necesarios. Ahora podemos pasar a la parte de codificación …

Paso 3: secuencia de comandos de Python:

Secuencia de comandos de Python
Secuencia de comandos de Python

Antes de comenzar a escribir código, lo primero que debe hacer es crear una nueva carpeta, ya que todo el código debe almacenarse en la misma carpeta. Así que cree una nueva carpeta, asígnele el nombre que desee. y descargue el 'Haarcascade' desde abajo y péguelo en la carpeta.

Ahora abra el bloc de notas y escriba el script que se indica a continuación, guárdelo como 'face.py' en la misma carpeta que haarcascade. (Puede descargar el código que he proporcionado en el archivo a continuación):

#importar todos los módulos requeridos

import numpy as np import serial import time import sys import cv2 #Setup Ruta de comunicación para arduino (en lugar de 'COM5' coloque el puerto al que está conectado su arduino) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print ("Conectado a arduino…") #importar el Haarcascade para la detección de rostros face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') #Para capturar el flujo de video desde la cámara web. cap = cv2. VideoCapture (0) # Lee la imagen capturada, conviértela a imagen gris y busca caras mientras 1: ret, img = cap.read () cv2.resizeWindow ('img', 500, 500) 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) gris = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) caras = face_cascade.detectMultiScale (gris, 1.3) # detecta la cara y haz un rectángulo a su alrededor. para (x, y, w, h) en caras: 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] arr = {y: y + h, x: x + w} print (arr) print ('X: '+ str (x)) print (' Y: '+ str (y)) print (' x + w: '+ str (x + w)) print (' y + h: '+ str (y + h)) # Centro de roi (Rectángulo) xx = int (x + (x + h)) / 2 yy = int (y + (y + w)) / 2 print (xx) print (yy) center = (xx, yy) # enviando datos a arduino print ("Center of Rectangle is:", center) data = "X {0: d} Y {1: d} Z".format (xx, yy) print ("output = '" + data + "'") arduino.write (data) #Muestra la secuencia. cv2.imshow ('img', img) # Pulse 'Esc' para finalizar la ejecución k = cv2.waitKey (30) & 0xff si k == 27: break

Una vez hecho esto, continúe escribiendo el código para arduino …

Paso 4: Código Arduino:

Código Arduino
Código Arduino

Después de que el script de Python esté listo, necesitamos un boceto de arduino para controlar el servo. Consulte el código a continuación, péguelo en Arduino IDE y guárdelo como 'servo.ino' en la misma carpeta que face.py y haarcascade. cargue el código y continúe con el siguiente paso para realizar las conexiones.

(Archivo descargable a continuación)

#incluir

Servo servoVer; // Vertical Servo Servo servoHor; // Horizontal Servo int x; int y; int prevX; int prevY; configuración vacía () {Serial.begin (9600); servoVer.attach (5); // Conecte el servo vertical al pin 5 servoHor.attach (6); // Conecte el servo horizontal al pin 6 servoVer.write (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = map (x, 600, 0, 70, 179); int servoY = map (y, 450, 0, 179, 95); servoX = min (servoX, 179); servoX = max (servoX, 70); servoY = min (servoY, 179); servoY = max (servoY, 95); servoHor.write (servoX); servoVer.write (servoY); }} bucle vacío () {if (Serial.available ()> 0) {if (Serial.read () == 'X') {x = Serial.parseInt (); if (Serial.read () == 'Y') {y = Serial.parseInt (); Pos (); }} while (Serial.available ()> 0) {Serial.read (); }}}

Paso 5: Mecanismo de giro e inclinación: -

Mecanismo Pan-Tilt
Mecanismo Pan-Tilt
Mecanismo Pan-Tilt
Mecanismo Pan-Tilt

He utilizado un kit disponible para Pan-Tilt. Si lo desea, puede hacer uno usted mismo utilizando madera / plástico o incluso imprimir uno en 3D.

El que utilicé es bastante barato y muy fácil de montar. Sin embargo, si desea instrucciones sobre cómo hacerlo, puede encontrarlas aquí.

Paso 6: hacer conexiones:

Hacer conexiones
Hacer conexiones
Hacer conexiones
Hacer conexiones

El circuito es bastante simple. Simplemente conecte dos servos a arduino.

  1. Vertical al pin 5
  2. Horizontal al pin 6
  3. Potencia a + 5V
  4. Tierra a GND

Consulte el diagrama del circuito como referencia.

Paso 7: PRUEBAS:

  • Una vez hecho todo, lo último que debe hacer es probar si funciona. Para probar primero, asegúrese de que los servos estén conectados correctamente a arduino y que el boceto esté cargado.
  • Después de cargar el boceto, asegúrese de cerrar el IDE para que el puerto esté libre para conectarse a Python.
  • Ahora abra 'face.py' con Python IDLE y presione 'F5' para ejecutar el código. Tomará unos segundos conectarse a arduino y luego debería poder ver una ventana que transmite la cámara web. Ahora el código detectará tu rostro y los servos lo rastrearán.
  • El Servo debe moverse a medida que mueves el objeto. Ahora simplemente conecte la cámara a los servos para que se mueva junto con los servos.

Gracias.

Recomendado: