AcademiaComandante

Visión artificial con OpenCV y Picamera2

Captura imágenes de la Camera Module 3 y detecta movimiento en tiempo real.

NivelComandante
Tiempo45 min
Costo est.~$30
Pasos5

Picamera2 es la librería oficial de cámara; OpenCV es el kit de visión más popular del mundo. Juntos impulsan cámaras de seguridad, rovers seguidores de línea y rastreadores de objetos.

Video tutorial

▶ DIY Engineers · Video in English — turn on auto-translated subtitlesVer en YouTube ↗

Video de DIY Engineers, insertado desde YouTube. Los pasos escritos abajo son nuestros y coinciden con la lista de piezas.

Pasos de la misión

  1. Conecta la cámara

    Apaga el Pi. En un Pi 5 usa el cable de 22 a 15 pines; levanta el seguro del conector, mete la cinta con los contactos en la dirección correcta y cierra el seguro.

  2. Pruébala

    Corre rpicam-hello para ver 5 segundos de vista previa (en el escritorio) o rpicam-still -o test.jpg para tomar una foto.

  3. Instala OpenCV

    Instala python3-opencv y python3-picamera2 desde apt; están optimizados para el Pi.

  4. Detecta movimiento

    El script compara cada imagen con la anterior y avisa cuando cambian suficientes píxeles.

  5. Sube de nivel

    Después agrega un Hailo AI HAT+ para detectar objetos reales, o usa las imágenes para dirigir un robot.

Código

sudo apt install -y python3-opencv python3-picamera2
rpicam-still -o test.jpg
import cv2, time
from picamera2 import Picamera2

cam = Picamera2()
cam.configure(cam.create_video_configuration(main={"format": "RGB888", "size": (640, 480)}))
cam.start(); time.sleep(1)

prev = None
while True:
    gray = cv2.GaussianBlur(cv2.cvtColor(cam.capture_array(), cv2.COLOR_BGR2GRAY), (21, 21), 0)
    if prev is not None:
        diff = cv2.threshold(cv2.absdiff(prev, gray), 25, 255, cv2.THRESH_BINARY)[1]
        if cv2.countNonZero(diff) > 5000:
            print(time.strftime("%H:%M:%S"), "motion!")
    prev = gray

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

¿Puedo usar una webcam USB?

Sí. Usa cv2.VideoCapture(0) en lugar de Picamera2. La Camera Module da mejor imagen y usa menos CPU.