Detección de productos en estanterías con Raspberry Pi 5 y Hailo-8
Detecta productos, supervisa cambios de inventario y consulta retiradas y alertas de pocas existencias desde un panel web con Hailo-8 en Raspberry Pi 5.
Detección de productos en estanterías con Raspberry Pi 5 y Hailo-8
Este proyecto utiliza una Raspberry Pi 5 y un acelerador Hailo-8 para detectar productos en estanterías, realizar el seguimiento del inventario y mostrar en el vídeo los eventos de retirada y de pocas existencias. Dos modelos HEF de Hailo-8 detectan los productos de la estantería y los productos sostenidos por una persona, mientras que un panel FastAPI/MJPEG permite acceder desde un navegador en la red local.
Código fuente: https://github.com/Seeed-Projects/reComputer-AI-Lab-Project/tree/main/pi_project/retail_shelf_detection
Funciones
- Inferencia acelerada por Hailo-8 en Raspberry Pi 5
- Detección de productos en estanterías y productos sostenidos mediante dos modelos HEF
- Regiones de estantería y asignación de tipos de producto configurables
- Superposición del recuento de inventario, eventos de retirada y estado de pocas existencias
- Vista previa MJPEG e información de inventario desde el navegador en el puerto 8000
- Vídeo de demostración, modelos y herramientas de validación del dispositivo incluidos
- Opciones de despliegue nativo y con Docker
Hardware y software
| Componente | Requisito |
|---|---|
| Placa | Raspberry Pi 5, ARM de 64 bits |
| Acelerador | Hailo-8 M.2 Key M 2280 |
| HailoRT | 4.23.x |
| Sistema operativo nativo | Debian de 64 bits o Raspberry Pi OS |
| Entorno de contenedores | Docker compatible con arm64 |
El controlador, el firmware, la biblioteca compartida y el paquete de Python del host deben utilizar versiones compatibles de HailoRT. Los modelos incluidos están destinados a Hailo-8, no a Hailo-8L.
Inicio rápido con Docker
Descargue la imagen linux/arm64 precompilada desde GHCR:
sudo docker pull \
ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latestEjecute el vídeo incluido y el panel web:
sudo docker run --rm \
--name rpi5-hailo8-retail-shelf-detection \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latest \
python web_detection.py \
--config configs/runtime.json \
--video_path input/demo.mp4 \
--host 0.0.0.0 \
--port 8000Abra la siguiente dirección desde un navegador conectado a la misma red:
http://<PI_IP>:8000El panel muestra el vídeo anotado, los FPS de inferencia, el inventario total y el estado de existencias de cada región de la estantería.
Obtener el proyecto
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-ProjectEjecutar en Raspberry Pi OS
Instale las dependencias de la placa y cree un entorno virtual de Python:
cd pi_project/retail_shelf_detection
chmod +x scripts/*.sh
./scripts/install_rpi5.shDespués de instalar los paquetes de Hailo, reinicie el dispositivo si el instalador lo solicita. A continuación, verifique el acelerador, el entorno de ejecución, la configuración y los modelos HEF:
./scripts/probe.sh
python3 tools/check_deployment.pyInicie el panel del navegador con el vídeo incluido:
python3 web_detection.py \
--config configs/runtime.json \
--video_path input/demo.mp4Para generar un MP4 procesado sin iniciar el panel web, ejecute:
./scripts/run_demo.shEl resultado se guarda en outputs/restock_demo_hailo8.mp4.
Compilar el contenedor desde el código fuente
El repositorio incluye el Dockerfile y el wheel aarch64 correspondiente a HailoRT 4.23.0 y Python 3.11. Compile la imagen desde la raíz del repositorio:
sudo docker build \
-f docker/hailo8/retail_shelf_detection.dockerfile \
-t retail_shelf_detection:latest \
pi_project/retail_shelf_detectionSi HailoRT está instalado en otra ruta del host, ajuste los dos montajes de bibliotecas compartidas y mantenga compatibles las versiones del host y del contenedor.
API web
GET /: panel del navegadorGET /api/video_feed: flujo de vídeo MJPEG anotadoGET /api/status: estado de inferencia, inventario, regiones y eventosGET /healthz: estado del servicio y de la inferencia
Validar únicamente la configuración
Utilice --check-config para comprobar las rutas y la estructura de configuración sin cargar HailoRT:
cd pi_project/retail_shelf_detection
python3 app/infer_video_hailo.py --check-configUtilizar otro vídeo o diseño de estantería
Actualice configs/runtime.json para seleccionar otras rutas de entrada y salida. Si cambian la posición de la cámara, la resolución del vídeo, la geometría de la estantería o la colocación de los productos, actualice también los archivos de regiones y asignación de productos dentro de configs/.
Estructura del proyecto
pi_project/retail_shelf_detection/
├── app/ # Punto de entrada de inferencia de vídeo
├── configs/ # Configuración de modelos, regiones, productos y eventos
├── input/ # Vídeo de demostración incluido
├── models/hef/ # Modelos HEF de Hailo-8
├── runtime/ # Integración con HailoRT y posprocesamiento de YOLO
├── shelf_monitor/ # Lógica de inventario, eventos, regiones y dibujo
├── scripts/ # Scripts de instalación, comprobación y demostración
├── tools/ # Comprobaciones de despliegue
└── web_detection.py # Panel FastAPI y flujo MJPEG