inteintegrity2026-08-11

Détection de produits en rayon avec Raspberry Pi 5 et Hailo-8

Détectez les produits, suivez les variations de stock et consultez les retraits et alertes de stock faible dans un tableau de bord Web avec Hailo-8 sur Raspberry Pi 5.

CVObject DetectionRetailGitHub

Détection de produits en rayon avec Raspberry Pi 5 et Hailo-8

Ce projet utilise un Raspberry Pi 5 et un accélérateur Hailo-8 pour détecter les produits en rayon, suivre les stocks et afficher sur la vidéo les retraits ainsi que les alertes de stock faible. Deux modèles HEF Hailo-8 détectent les produits présents sur les rayons et ceux tenus par une personne, tandis qu'un tableau de bord FastAPI/MJPEG permet un accès depuis un navigateur sur le réseau local.

Code source : https://github.com/Seeed-Projects/reComputer-AI-Lab-Project/tree/main/pi_project/retail_shelf_detection

Fonctionnalités

  • Inférence accélérée par Hailo-8 sur Raspberry Pi 5
  • Détection des produits en rayon et des produits tenus grâce à deux modèles HEF
  • Zones de rayon et correspondance des types de produits configurables
  • Superposition du nombre d'articles, des événements de retrait et des alertes de stock faible
  • Aperçu MJPEG et état du stock dans le navigateur sur le port 8000
  • Vidéo de démonstration, modèles et outils de validation du matériel inclus
  • Déploiement natif ou avec Docker

Matériel et logiciel

ComposantConfiguration requise
CarteRaspberry Pi 5, ARM 64 bits
AccélérateurHailo-8 M.2 Key M 2280
HailoRT4.23.x
Système natifDebian 64 bits ou Raspberry Pi OS
Environnement de conteneursDocker compatible arm64

Le pilote, le micrologiciel, la bibliothèque partagée et le paquet Python de l'hôte doivent utiliser des versions compatibles de HailoRT. Les modèles fournis ciblent Hailo-8 et non Hailo-8L.

Démarrage rapide avec Docker

Téléchargez l'image linux/arm64 précompilée depuis GHCR :

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

Exécutez la vidéo fournie et le tableau de bord 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

Ouvrez l'adresse suivante depuis un navigateur connecté au même réseau :

text
http://<PI_IP>:8000

Le tableau de bord affiche la vidéo annotée, le nombre d'images par seconde de l'inférence, le stock total et l'état de chaque zone du rayon.

Obtenir le projet

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

Exécution sous Raspberry Pi OS

Installez les dépendances de la carte et créez un environnement virtuel Python :

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

Après l'installation des paquets Hailo, redémarrez si le programme d'installation le demande. Vérifiez ensuite l'accélérateur, l'environnement d'exécution, la configuration et les modèles HEF :

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

Démarrez le tableau de bord avec la vidéo fournie :

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

Pour générer une vidéo MP4 traitée sans démarrer le tableau de bord Web, exécutez :

bash
./scripts/run_demo.sh

Le résultat est enregistré dans outputs/restock_demo_hailo8.mp4.

Construire le conteneur depuis les sources

Le dépôt contient le Dockerfile et le wheel aarch64 correspondant à HailoRT 4.23.0 et Python 3.11. Construisez l'image depuis la racine du dépôt :

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

Si HailoRT est installé à un autre emplacement sur l'hôte, adaptez les deux montages de bibliothèques partagées tout en conservant des versions compatibles entre l'hôte et le conteneur.

API Web

  • GET / : tableau de bord du navigateur
  • GET /api/video_feed : flux vidéo MJPEG annoté
  • GET /api/status : état de l'inférence, du stock, des zones et des événements
  • GET /healthz : état du service et de l'inférence

Valider uniquement la configuration

Utilisez --check-config pour vérifier les chemins et la structure de configuration sans charger HailoRT :

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

Utiliser une autre vidéo ou disposition de rayon

Modifiez configs/runtime.json pour sélectionner d'autres chemins d'entrée et de sortie. Si la position de la caméra, la résolution, la géométrie du rayon ou la disposition des produits change, mettez également à jour les fichiers de zones et de correspondance des produits dans configs/.

Structure du projet

text
pi_project/retail_shelf_detection/
├── app/                 # Point d'entrée de l'inférence vidéo
├── configs/             # Configuration des modèles, zones, produits et événements
├── input/               # Vidéo de démonstration fournie
├── models/hef/          # Modèles HEF Hailo-8
├── runtime/             # Intégration HailoRT et post-traitement YOLO
├── shelf_monitor/       # Logique du stock, des événements, des zones et du dessin
├── scripts/             # Scripts d'installation, de vérification et de démonstration
├── tools/               # Vérifications du déploiement
└── web_detection.py     # Tableau de bord FastAPI et flux MJPEG