Construa um Sistema de Rastreamento Facial em Tempo Real com Arduino e OpenCV
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| Webcam (mini) | 1 |
| Micro servos (SG90 ou similar) | 2 |
| Kit Pan-Tilt | 1 |
| Protoboard | 1 |
Aplicativos e Serviços Online
- Python 2.7
- OpenCV
Sobre o Projeto
Em tutoriais anteriores, mostrei comunicação Arduino-Python via pyserial (controle de LED) e detecção de cor com OpenCV. Agora, rastreamento facial: a câmera segue o rosto. Parece difícil, mas não é – basta conhecimento básico de Arduino e Python.
Passo 1: Materiais Necessários
Hardware: Arduino UNO (ou outro), Webcam, 2x Servos (micro ou standard), Protoboard, Kit Pan-Tilt (ou construa um).
Software: Python 2.7, OpenCV (pip install opencv-python), pyserial (pip install serial), numpy (pip install numpy), Haarcascade (XML).
Passo 2: Configurando Ambiente Python
- Instale Python 2.7.14. Verifique com
pythonno CMD ou IDLE. - Se erro no CMD, configure variável de ambiente PATH.
- Instale módulos via pip:
> pip install serial > pip install opencv-python > pip install numpy
Passo 3: Script Python (face.py)
Crie pasta, coloque haarcascade_frontalface_default.xml nela. Salve o script abaixo como face.py na mesma pasta.
import numpy as np
import serial
import time
import sys
import cv2
# Porta serial do Arduino (ajuste COM5)
arduino = serial.Serial('COM5', 9600)
time.sleep(2)
print("Conectado ao Arduino...")
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while 1:
ret, img = cap.read()
cv2.resizeWindow('img', 500, 500)
# Linhas de referência central
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 do retângulo (ROI)
xx = int(x + (x + w)) / 2
yy = int(y + (y + h)) / 2
center = (xx, yy)
print("Centro do Retangulo:", center)
# Envia para Arduino: "XxxYyyZ"
data = "X{0:d}Y{1:d}Z".format(xx, yy)
print("output = '" + data + "'")
arduino.write(data.encode())
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k == 27: break # ESC sai
cap.release()
cv2.destroyAllWindows()
Passo 4: Código Arduino (servo.ino)
#include <Servo.h>
Servo servoVer; // Vertical (pino 5)
Servo servoHor; // Horizontal (pino 6)
int x, y, prevX, prevY;
void setup() {
Serial.begin(9600);
servoVer.attach(5);
servoHor.attach(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 = constrain(servoX, 70, 179);
servoY = constrain(servoY, 95, 179);
servoHor.write(servoX);
servoVer.write(servoY);
}
}
void loop() {
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(); // limpa buffer
}
}
Passo 5: Mecanismo Pan-Tilt
Usei kit pronto (barato, fácil montar). Pode fazer em madeira, plástico ou impressão 3D.
Passo 6: Conexões
- Servo Vertical → Pino 5
- Servo Horizontal → Pino 6
- VCC → +5V, GND → GND
Passo 7: Testando
- Conecte servos, suba sketch, feche IDE (libera porta serial).
- Execute
face.pyno IDLE (F5). - Aguarde conexão, janela da webcam abre, detecta rosto e servos rastreiam.
- Fixe a webcam no pan-tilt para mover junto.
Arquivos Adicionais
haarcascade_frontalface_default.xml(classificador Haar)face.py(script Python)servo.ino(sketch Arduino)
Processo de manufatura
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Reconhecimento Facial em Tempo Real no Raspberry Pi – Guia Completo
- Rastreamento Automatizado de Objetos Baseado em Visão com Raspberry Pi e OpenCV
- Construa um Decodificador DTMF Usando Apenas um Arduino – Sem CIs Externos
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Sistema de Presença RFID Confiável com Arduino e Python
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
- Servidor Web Arduino Uno WiFi: Controle LED via Navegador