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.
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
| Composant | Configuration requise |
|---|---|
| Carte | Raspberry Pi 5, ARM 64 bits |
| Accélérateur | Hailo-8 M.2 Key M 2280 |
| HailoRT | 4.23.x |
| Système natif | Debian 64 bits ou Raspberry Pi OS |
| Environnement de conteneurs | Docker 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 :
sudo docker pull \
ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latestExécutez la vidéo fournie et le tableau de bord 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 8000Ouvrez l'adresse suivante depuis un navigateur connecté au même réseau :
http://<PI_IP>:8000Le 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
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-ProjectExécution sous Raspberry Pi OS
Installez les dépendances de la carte et créez un environnement virtuel Python :
cd pi_project/retail_shelf_detection
chmod +x scripts/*.sh
./scripts/install_rpi5.shAprè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 :
./scripts/probe.sh
python3 tools/check_deployment.pyDémarrez le tableau de bord avec la vidéo fournie :
python3 web_detection.py \
--config configs/runtime.json \
--video_path input/demo.mp4Pour générer une vidéo MP4 traitée sans démarrer le tableau de bord Web, exécutez :
./scripts/run_demo.shLe 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 :
sudo docker build \
-f docker/hailo8/retail_shelf_detection.dockerfile \
-t retail_shelf_detection:latest \
pi_project/retail_shelf_detectionSi 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 navigateurGET /api/video_feed: flux vidéo MJPEG annotéGET /api/status: état de l'inférence, du stock, des zones et des événementsGET /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 :
cd pi_project/retail_shelf_detection
python3 app/infer_video_hailo.py --check-configUtiliser 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
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