Cámara pan-tilt que sigue tu rostro
Detecta un rostro con OpenCV y mueve dos servos para mantenerlo centrado: el primer paso hacia un robot con ojos.
Es un ciclo de control que puedes ver: la cámara encuentra un rostro, mide qué tan lejos está del centro y mueve los servos para corregir. Todo se procesa en el Pi; ninguna imagen sale del equipo.
Video tutorial

Video de MLAB Embedded Solutions, insertado desde YouTube. Los pasos escritos abajo son nuestros y coinciden con la lista de piezas.
Pasos de la misión
Arma el pan-tilt
Construye el kit de soporte con dos micro servos y monta la cámara arriba. Centra ambos servos a 90° primero.
Conecta los servos
Pan al canal 0 del PCA9685, tilt al canal 1, energía de servos desde un UBEC de 5 V e I2C al Pi.
Instala las herramientas
Instala python3-opencv y python3-picamera2 con apt y adafruit-circuitpython-servokit en un entorno virtual con paquetes del sistema.
Corre el rastreador
El script usa el detector de rostros integrado de OpenCV y mueve los servos una fracción del error en cada imagen (un controlador proporcional).
Ajústalo
Si se pasa, baja la ganancia; si está lento, súbela. Agrega una zona muerta para que deje de temblar cuando estás centrado.
Código
import cv2, time
from picamera2 import Picamera2
from adafruit_servokit import ServoKit
kit = ServoKit(channels=16); pan, tilt = 90.0, 90.0
cam = Picamera2(); cam.configure(cam.create_video_configuration(main={"format": "RGB888", "size": (640, 480)})); cam.start()
face = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
GAIN, DEAD = 0.04, 20
while True:
gray = cv2.cvtColor(cam.capture_array(), cv2.COLOR_BGR2GRAY)
faces = face.detectMultiScale(gray, 1.2, 5, minSize=(60, 60))
if len(faces):
x, y, w, h = max(faces, key=lambda f: f[2] * f[3])
ex, ey = (x + w / 2) - 320, (y + h / 2) - 240
if abs(ex) > DEAD: pan = min(180, max(0, pan - ex * GAIN))
if abs(ey) > DEAD: tilt = min(180, max(0, tilt + ey * GAIN))
kit.servo[0].angle, kit.servo[1].angle = pan, tilt
time.sleep(0.02)Code comments are in English, like most libraries and docs — a good habit for makers.
Preguntas
¿cv2.data existe en la versión de apt?
En algunas versiones no. Si da error, usa la ruta completa /usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml.