inteintegrity2026-08-11

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.

CVObject DetectionRetailGitHub

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

ComponenteRequisito
PlacaRaspberry Pi 5, ARM de 64 bits
AceleradorHailo-8 M.2 Key M 2280
HailoRT4.23.x
Sistema operativo nativoDebian de 64 bits o Raspberry Pi OS
Entorno de contenedoresDocker 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:

bash
sudo docker pull \
  ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latest

Ejecute el vídeo incluido y el panel web:

bash
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 8000

Abra la siguiente dirección desde un navegador conectado a la misma red:

text
http://<PI_IP>:8000

El 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

bash
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-Project

Ejecutar en Raspberry Pi OS

Instale las dependencias de la placa y cree un entorno virtual de Python:

bash
cd pi_project/retail_shelf_detection
chmod +x scripts/*.sh
./scripts/install_rpi5.sh

Despué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:

bash
./scripts/probe.sh
python3 tools/check_deployment.py

Inicie el panel del navegador con el vídeo incluido:

bash
python3 web_detection.py \
  --config configs/runtime.json \
  --video_path input/demo.mp4

Para generar un MP4 procesado sin iniciar el panel web, ejecute:

bash
./scripts/run_demo.sh

El 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:

bash
sudo docker build \
  -f docker/hailo8/retail_shelf_detection.dockerfile \
  -t retail_shelf_detection:latest \
  pi_project/retail_shelf_detection

Si 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 navegador
  • GET /api/video_feed: flujo de vídeo MJPEG anotado
  • GET /api/status: estado de inferencia, inventario, regiones y eventos
  • GET /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:

bash
cd pi_project/retail_shelf_detection
python3 app/infer_video_hailo.py --check-config

Utilizar 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

text
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