Hanzo Huang2026-09-14

使用 Raspberry Pi 5 和 Hailo-8 实现区域 PPE 检测

在 Raspberry Pi 5 上借助 Hailo-8 加速检测,通过浏览器查看指定区域内人员的安全帽、反光背心和口罩佩戴情况。

CVObject DetectionPPEGitHub

什么是 PPE 检测?

PPE(个人防护装备)检测利用计算机视觉识别人员及其佩戴的安全帽、反光背心、口罩等防护装备。本项目运行在配备 Hailo-8 加速器的 Raspberry Pi 5 上,可通过浏览器查看检测结果。你可以划定并保存一个多边形区域,只检查区域内人员是否佩戴了指定装备,专注于需要关注的作业范围。

区域 PPE 检测演示

控制面板支持上传图片、在浏览器中播放视频,以及接入 USB 摄像头或 RTSP/RTSPS 网络摄像头。系统根据人员检测框底边的中点判断该人员是否位于区域内。区域外的人员以灰色显示,不计入合规或违规人数。

对于区域内的人员,应用会将检测到的防护装备与对应人员关联。如果某项必需装备没有被检测为已佩戴,就视为缺失。如果“已佩戴”和“未佩戴”的标签同时出现,则以置信度较高的标签为准。因此,统计结果取决于模型检测结果和你设置的规则。

PPE 模型与数据集

项目的模型说明引用了 Kaggle 上的 Construction Site Safety Image Dataset Roboflow 数据集。Kaggle 链接指向的是数据集;实际推理使用项目仓库中已导出的模型,按下方步骤运行演示时无需下载数据集。

演示默认加载 models/ppe_hailo_model/ppe.hef。这是通过 Ultralytics 导出的 Hailo-8 模型,包含按类别进行的非极大值抑制(NMS)。其元数据中定义的输入尺寸为 640 × 640,类别标签如下:

ID类别标签
0Hardhat
1Mask
2NO-Hardhat
3NO-Mask
4NO-Safety Vest
5Person
6Safety Cone
7Safety Vest
8machinery
9vehicle

你可以在控制面板中选择需要检查的装备:安全帽、反光背心、口罩,或其中的任意组合。模型中的其他检测类别不属于可配置的 PPE 要求。

快速开始

以下步骤依据项目的环境配置指南和 PPE 演示说明整理。

1. 准备 Raspberry Pi 和 Hailo 运行环境

准备一台配备 Hailo-8 加速器的 Raspberry Pi 5,并安装 64 位 Raspberry Pi OS Bookworm。安装 Hailo 软件包:

bash
sudo apt update
sudo apt install hailo-all
sudo reboot

重启后打开终端,检查设备和系统架构:

bash
hailortcli fw-control identify
ls /dev/hailo0
uname -m

架构输出必须为 aarch64。仓库附带的 Python wheel 适用于 64 位 ARM Linux,要求 HailoRT 4.23 和 CPython 3.12。安装前请检查运行环境版本:如果驱动对应的是其他 HailoRT 版本,请按照项目指南,从 Hailo Developer Zone 获取匹配的 wheel。

2. 获取代码并创建 Python 环境

bash
git clone https://github.com/Hanzo-Huang/pi-ai-demos.git
cd pi-ai-demos

项目指南推荐通过 Miniforge 安装 Python 3.12,这样无需替换系统自带的 Python。如果尚未安装 Miniforge,请运行:

bash
sudo apt install curl
curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh

安装时使用默认路径,并允许安装程序初始化 shell。关闭并重新打开终端,回到克隆下来的 pi-ai-demos 目录,然后创建并激活环境:

bash
conda config --set auto_activate_base false
conda create --name pi-hailo python=3.12 pip -y
conda activate pi-hailo
python --version
python -m pip install -r requirements.txt
python -m pip install runtime/wheels/hailort-4.23.0-cp312-cp312-linux_aarch64.whl

python --version 应显示 Python 3.12.x。接下来检查依赖是否可用:

bash
python -c "import cv2, fastapi, hailo_platform, numpy; print('Python dependencies: OK')"
hailortcli fw-control identify

3. 启动项目

确保环境已激活,在仓库根目录运行以下命令,以不启用 USB 摄像头的方式启动:

bash
python examples/cv/ppe-detection/run.py --camera-id -1

在同一网络中的浏览器里打开 http://<pi-ip>:8000,将 <pi-ip> 替换为 Raspberry Pi 的 IP 地址。如果要使用第一个 USB 摄像头,先按 Ctrl+C 停止服务,再运行:

bash
python examples/cv/ppe-detection/run.py --camera-id 0

在 Raspberry Pi 上另开一个终端,检查后端状态:

bash
curl http://127.0.0.1:8000/api/health

开始分析前,响应中应包含 "model_exists":true 和 "hailo_platform_importable":true。默认模型路径为 models/ppe_hailo_model/ppe.hef。每次在新终端中运行演示前,都需要重新激活 pi-hailo 环境。

4. 选择输入源和检测区域

  1. 上传图片或视频、使用 USB 摄像头,或输入完整的 rtsp:// 或 rtsps:// 地址并点击 Connect RTSP(连接 RTSP)。
  2. 点击 Edit area(编辑区域),绘制一个至少包含三个顶点的多边形;也可以点击 Full frame(全画面),检查整个画面。
  3. 点击 Save area(保存区域)。分析始终使用最近保存的多边形;只有在编辑模式下才能修改画布上的区域。
  4. 选择需要佩戴的装备:安全帽、反光背心和/或口罩。
  5. 查看画面上的检测标注,以及保存区域内的合规、违规人数。

5. 测试 PPE 判断规则

项目提供了无需额外依赖的测试,用于检查区域判断和合规规则。在仓库根目录运行:

bash
python -m unittest discover examples/cv/ppe-detection/tests -v