基于树莓派 5 和 Hailo-8 的零售货架商品检测
在树莓派 5 上使用 Hailo-8 加速检测货架商品、跟踪库存变化,并通过浏览器仪表板查看取货事件和低库存提醒。
基于 Raspberry Pi 5 和 Hailo-8 的零售货架检测
本项目使用 Raspberry Pi 5 和 Hailo-8 加速器检测零售货架上的商品、跟踪货架库存,并在视频中呈现商品取走和低库存事件。两个 Hailo-8 HEF 模型分别检测货架商品和手持商品,FastAPI/MJPEG 仪表板则通过局域网提供浏览器访问。
功能
- 在 Raspberry Pi 5 上使用 Hailo-8 加速推理
- 使用两个 HEF 模型检测货架商品和手持商品
- 支持配置货架区域和商品类型映射
- 在画面中叠加库存数量、取货事件和低库存状态
- 在 8000 端口提供基于浏览器的 MJPEG 预览和库存状态
- 包含演示视频、模型文件和设备验证工具
- 支持原生部署和 Docker 部署
硬件与软件
| 组件 | 要求 |
|---|---|
| 开发板 | Raspberry Pi 5,64 位 ARM |
| 加速器 | Hailo-8 M.2 Key M 2280 |
| HailoRT | 4.23.x |
| 原生系统 | 64 位 Debian 或 Raspberry Pi OS |
| 容器运行时 | 支持 arm64 的 Docker |
主机驱动、固件、共享库和 Python 软件包必须使用兼容的 HailoRT 版本。项目包含的模型面向 Hailo-8,而不是 Hailo-8L。
使用 Docker 快速启动
从 GHCR 拉取预构建的 linux/arm64 镜像:
sudo docker pull \
ghcr.io/seeed-projects/recomputer-ai-lab-project/retail_shelf_detection:latest运行内置视频和 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 8000在同一网络的浏览器中打开以下地址:
http://<PI_IP>:8000仪表板会显示标注后的视频、推理 FPS、库存总量以及各货架区域的库存状态。
获取项目
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-Project在 Raspberry Pi OS 上运行
安装开发板依赖并创建 Python 虚拟环境:
cd pi_project/retail_shelf_detection
chmod +x scripts/*.sh
./scripts/install_rpi5.sh安装 Hailo 软件包后,如果安装程序提示重启,请重新启动设备。然后验证加速器、运行时、配置和 HEF 模型:
./scripts/probe.sh
python3 tools/check_deployment.py使用内置视频启动浏览器仪表板:
python3 web_detection.py \
--config configs/runtime.json \
--video_path input/demo.mp4如需在不启动 Web 仪表板的情况下生成处理后的视频,请运行:
./scripts/run_demo.sh处理结果保存到 outputs/restock_demo_hailo8.mp4。
从源代码构建容器
仓库包含 Dockerfile,以及匹配 HailoRT 4.23.0、Python 3.11 和 aarch64 的 wheel。请在仓库根目录构建镜像:
sudo docker build \
-f docker/hailo8/retail_shelf_detection.dockerfile \
-t retail_shelf_detection:latest \
pi_project/retail_shelf_detection如果 HailoRT 安装在主机的其他路径,请调整两个共享库挂载路径,同时确保主机与容器中的版本兼容。
Web API
GET /:浏览器仪表板GET /api/video_feed:带标注的 MJPEG 视频流GET /api/status:推理、库存、区域和事件状态GET /healthz:服务与推理健康状态
仅验证配置
使用 --check-config 可在不加载 HailoRT 的情况下检查路径和配置结构:
cd pi_project/retail_shelf_detection
python3 app/infer_video_hailo.py --check-config使用其他视频或货架布局
修改 configs/runtime.json 以选择其他输入和输出路径。如果摄像头位置、视频分辨率、货架几何结构或商品摆放发生变化,还需要更新 configs/ 下的货架区域和商品映射文件。
项目结构
pi_project/retail_shelf_detection/
├── app/ # 视频推理入口
├── configs/ # 模型、区域、商品和事件配置
├── input/ # 内置演示视频
├── models/hef/ # Hailo-8 HEF 模型
├── runtime/ # HailoRT 集成与 YOLO 后处理
├── shelf_monitor/ # 库存、事件、区域和绘制逻辑
├── scripts/ # 安装、检测和演示脚本
├── tools/ # 部署检查工具
└── web_detection.py # FastAPI 仪表板与 MJPEG 视频流