3.5 KiB
Pet Monitor con Raspberry Pi 5 & Hailo-8L (AI HAT) Sistema de monitorización inteligente para mascotas utilizando aceleración por hardware NPU (chip Hailo-8L) para visión por computador a 30 FPS y detección de audio local en CPU para ladridos/sonidos anómalos.
- Hardware Utilizado Placa: Raspberry Pi 5. Coprocesador IA: Raspberry Pi AI HAT (Hailo-8L, 13 TOPS). Cámara: Módulo de cámara Raspberry Pi (CSI). Entrada de audio: Micrófono USB (pendiente de conectar).
- Configuración del Sistema y Hardware
Habilitar PCIe Gen 3
Para maximizar el ancho de banda con el chip Hailo-8L, se configuró el bus PCIe en
/boot/firmware/config.txt:
dtparam=pciex1
dtparam=pciex1_gen=3
Paquetes del Sistema Instalados Se instalaron las utilidades de cámara, controladores del kernel y librerías dinámicas de audio requeridas por el sistema operativo:
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y hailo-all rpicam-apps libportaudio2 portaudio19-dev libasound2-dev python3-picamera2
Verificación de hardware
NPU Hailo: lspci muestra el coprocesador Hailo Technologies y hailortcli fw-control identify responde con el firmware cargado.
Cámara: rpicam-hello --list-cameras detecta correctamente el sensor CSI.
- Entorno de Desarrollo Python (
uv) Se configuró el entorno virtual utilizandouvcon acceso a los paquetes del sistema (--system-site-packages) para reutilizar los bindings compilados depicamera2yhailo_platforminstalados por Debian/Raspberry Pi OS:
cd ~/pet_monitor
# Creación del entorno con acceso a librerías nativas
uv venv --system-site-packages
# Instalación de librerías en el entorno virtual
uv pip install sounddevice numpy scipy requests onnxruntime
Nota técnica: Se seleccionó
onnxruntimeen lugar detflite-runtimepara garantizar compatibilidad con versiones modernas de Python en ARM64 sin necesidad de compilar desde fuente.
- Estado Actual del Software
pet_speed.py: Script de visión artificial que: InicializaPicamera2a 1280x720 a 30 FPS. Carga el pipeline oficial de Hailo (/usr/share/rpi-camera-assets/hailo_yolov8_inference.json). Filtra detecciones de COCO para gato (id: 15) y perro (id: 16). Calcula el centroide del animal y evalúa el desplazamiento entre frames consecutivos para alertar si la velocidad supera el umbral de carrera (SPEED_THRESHOLD = 0.30). Ejecución actual:
uv run python pet_speed.py
- Próximos Pasos (Hoja de Ruta) Fase A: Integración de Audio (Ladridos y Sonidos) Conectar el micrófono USB. Identificar el índice del dispositivo con:
uv run python -m sounddevice
Descargar el modelo YAMNet en formato ONNX (yamnet.onnx) y el diccionario de clases de AudioSet (yamnet_classes.csv).
Desarrollar el listener en un hilo secundario (threading.Thread) analizando fragmentos de audio de 0.975 segundos en busca de la clase Bark.
Fase B: Sistema de Alertas y Notificaciones
Crear un bot en Telegram con @BotFather y obtener el TELEGRAM_BOT_TOKEN y CHAT_ID.
Programar un despachador asíncrono con control de enfriamiento (cooldown de 30-60 s) para evitar spam.
Guardar una captura JPEG con la caja delimitadora en el momento de la carrera o ladrido y enviarla a Telegram.
Fase C: Despliegue Autónomo (Systemd)
Crear una unidad de servicio /etc/systemd/system/pet_monitor.service.
Habilitar arranque automático al encender la Raspberry Pi:
sudo systemctl enable --now pet_monitor.service