Regalwarenerkennung mit Raspberry Pi 5 und Hailo-8
Erkennt Regalwaren, verfolgt Bestandsänderungen und zeigt Entnahmen sowie niedrige Bestände in einem Browser-Dashboard mit Hailo-8 auf dem Raspberry Pi 5 an.
Regalwarenerkennung mit Raspberry Pi 5 und Hailo-8
Dieses Projekt verwendet einen Raspberry Pi 5 und einen Hailo-8-Beschleuniger, um Produkte in Verkaufsregalen zu erkennen, den Lagerbestand zu verfolgen und Entnahmen sowie niedrige Bestände im Video anzuzeigen. Zwei Hailo-8-HEF-Modelle erkennen Produkte im Regal und Produkte, die von einer Person gehalten werden. Ein FastAPI/MJPEG-Dashboard ermöglicht den Zugriff über einen Browser im lokalen Netzwerk.
Funktionen
- Hailo-8-beschleunigte Inferenz auf dem Raspberry Pi 5
- Erkennung von Regalwaren und gehaltenen Produkten mit zwei HEF-Modellen
- Konfigurierbare Regalbereiche und Zuordnung von Produkttypen
- Einblendung von Bestandszahl, Entnahmeereignissen und Warnungen bei niedrigem Bestand
- Browserbasierte MJPEG-Vorschau und Bestandsanzeige auf Port 8000
- Enthaltenes Demovideo, Modelldateien und Werkzeuge zur Gerätevalidierung
- Native Bereitstellung und Docker-Bereitstellung
Hardware und Software
| Komponente | Anforderung |
|---|---|
| Board | Raspberry Pi 5, 64-Bit-ARM |
| Beschleuniger | Hailo-8 M.2 Key M 2280 |
| HailoRT | 4.23.x |
| Natives Betriebssystem | 64-Bit-Debian oder Raspberry Pi OS |
| Container-Laufzeit | Docker mit arm64-Unterstützung |
Host-Treiber, Firmware, gemeinsam genutzte Bibliothek und Python-Paket müssen kompatible HailoRT-Versionen verwenden. Die enthaltenen Modelle sind für Hailo-8 und nicht für Hailo-8L vorgesehen.
Schnellstart mit Docker
Laden Sie das vorgefertigte linux/arm64-Image aus GHCR:
sudo docker pull \
ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latestStarten Sie das enthaltene Video und das Web-Dashboard:
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Öffnen Sie die folgende Adresse in einem Browser im selben Netzwerk:
http://<PI_IP>:8000Das Dashboard zeigt das annotierte Video, die Inferenz-FPS, den Gesamtbestand und den Bestandsstatus jedes Regalbereichs.
Projekt beziehen
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-ProjectUnter Raspberry Pi OS ausführen
Installieren Sie die Board-Abhängigkeiten und erstellen Sie eine virtuelle Python-Umgebung:
cd pi_project/retail_shelf_detection
chmod +x scripts/*.sh
./scripts/install_rpi5.shStarten Sie das Gerät nach der Installation der Hailo-Pakete neu, falls das Installationsprogramm dazu auffordert. Prüfen Sie anschließend Beschleuniger, Laufzeit, Konfiguration und HEF-Modelle:
./scripts/probe.sh
python3 tools/check_deployment.pyStarten Sie das Browser-Dashboard mit dem enthaltenen Video:
python3 web_detection.py \
--config configs/runtime.json \
--video_path input/demo.mp4Führen Sie den folgenden Befehl aus, um eine verarbeitete MP4-Datei ohne Web-Dashboard zu erzeugen:
./scripts/run_demo.shDas Ergebnis wird unter outputs/restock_demo_hailo8.mp4 gespeichert.
Container aus dem Quellcode erstellen
Das Repository enthält das Dockerfile und das passende aarch64-Wheel für HailoRT 4.23.0 und Python 3.11. Erstellen Sie das Image im Stammverzeichnis des Repositorys:
sudo docker build \
-f docker/hailo8/retail_shelf_detection.dockerfile \
-t retail_shelf_detection:latest \
pi_project/retail_shelf_detectionWenn HailoRT auf dem Host unter einem anderen Pfad installiert ist, passen Sie die beiden Einbindungen der gemeinsam genutzten Bibliotheken an und achten Sie auf kompatible Versionen in Host und Container.
Web-API
GET /: Browser-DashboardGET /api/video_feed: annotierter MJPEG-VideostreamGET /api/status: Status von Inferenz, Bestand, Bereichen und EreignissenGET /healthz: Zustand von Dienst und Inferenz
Nur die Konfiguration prüfen
Mit --check-config können Pfade und Konfigurationsstruktur geprüft werden, ohne HailoRT zu laden:
cd pi_project/retail_shelf_detection
python3 app/infer_video_hailo.py --check-configAnderes Video oder Regallayout verwenden
Ändern Sie configs/runtime.json, um andere Ein- und Ausgabepfade auszuwählen. Wenn sich Kameraposition, Videoauflösung, Regalgeometrie oder Produktplatzierung ändern, müssen auch die Dateien für Regalbereiche und Produktzuordnung unter configs/ angepasst werden.
Projektstruktur
pi_project/retail_shelf_detection/
├── app/ # Einstiegspunkt für die Videoinferenz
├── configs/ # Modell-, Bereichs-, Produkt- und Ereigniskonfiguration
├── input/ # Enthaltenes Demovideo
├── models/hef/ # Hailo-8-HEF-Modelle
├── runtime/ # HailoRT-Integration und YOLO-Nachverarbeitung
├── shelf_monitor/ # Logik für Bestand, Ereignisse, Bereiche und Darstellung
├── scripts/ # Installations-, Prüf- und Demoskripte
├── tools/ # Bereitstellungsprüfungen
└── web_detection.py # FastAPI-Dashboard und MJPEG-Stream