人流量统计设备
本项目是基于 Quectel Pi H1 智能主控板开发的轻量级人流量统计解决方案,集成了目标检测、目标跟踪和行人重识别(ReID)等先进技术,具备以下核心功能:
- 实时人体检测:在视频流中实时识别人体目标
- 稳定目标跟踪:采用 ByteTrack 算法实现高精度目标跟踪
- 智能去重统计:基于 ReID 特征进行人员身份去重
- 多源视频支持:兼容 USB 摄像头、IP 摄像头及本地视频文件
- 多维度统计:提供实时人数、累计去重人数及进出方向统计
开发资源汇总
开发配件清单
说明:以下配件清单仅供参考,实际开发环境可根据需求调整。例如,通过 SSH 远程连接开发时可省略显示器和 USB 扩展坞。
| 配件名称 | 数量 | 规格参数 |
|---|---|---|
| Quectel Pi H1 智能主控板 | 1块 | Quectel Pi H1 智能主控板 |
| 电源适配器 | 1个 | 27W USB Type-C 接口充电器,1.2米线长,PD 快充,适用于树莓派5代 |
| HDMI 线 | 1根 | HDMI 2.0 标准,线长 1m,HDMI-A(公头)转 HDMI-D(公头) |
| 网线 | 1根 | 千兆网线,线长 1m |
| CPU 散热风扇 | 1个 | 树莓派5代官方原装主动散热器(含导热贴) |
| USB 扩展坞 | 1个 | 绿联 USB 3.0 多功能扩展坞 |
| 网络摄像头 | 1个 | Tenda 腾达室内家用监控摄像头 |
| USB摄像头 | 1个 | OV5693 USB摄像头模块 |
| 显示屏 | 1个 | 24 英寸 HDMI 显示器 |
配件实物参考
快速上手
开发准备
Quectel Pi H1 智能主控板出厂预装 Debian 13 系统镜像,无需重新烧录系统,按照以下步骤即可开始开发。
硬件连接
散热风扇安装
- 将散热风扇排线插入主控板的 FAN 插槽
- 将散热器两端固定在主控板预留的安装孔位
显示连接
将 HDMI 线一端连接至主控板 HDMI 接口,另一端连接至显示器 HDMI 接口。
输入设备连接
将 USB 键盘和鼠标分别接入主控板的两个 USB-A 接口。若使用无线输入设备,请将接收器插入 USB 接口。
网络连接
将网线一端接入主控板千兆网口,另一端接入路由器 LAN 口(确保路由器已连接互联网)。
自动开机设置
在主控板左上角标有 AUTO_POWER_ON 字样的排针上安装跳线帽,实现上电自动开机功能。
供电连接
将电源适配器的 USB-C 端连接至主控板 POWER IN 接口,USB-A 端连接至电源适配器。
网络摄像头连接
为网络摄像头接通电源,并确保其与主控板处于同一局域网内。
完整连接示意图
项目部署
网络摄像头配置
首次使用网络摄像头时,需先通过手机连接同一WiFi网络,然后使用腾达APP添加摄像头设备完成网络配置。
重要提示:确保 Quectel Pi H1智能主控板与网络摄像头位于同一局域网,否则无法获取RTSP视频流。
获取项目代码
- 创建项目目录并进入:
mkdir ~/people-counting-device
cd ~/people-counting-device
- 安装Git并克隆项目代码:
sudo apt update
sudo apt install -y git
git clone https://github.com/Quectel-Pi/demo-people-counting-device.git
- 设置目录权限:
sudo chmod -R 755 ~/people-counting-device
创建虚拟环境
为避免依赖冲突,建议在虚拟环境中运行项目:
#创建虚拟环境
python3 -m venv ~/people-counting-env
#激活虚拟环境
source ~/people-counting-env/bin/activate
安装项目依赖
#更新pip到最新版本
pip install --upgrade pip
#安装项目所需依赖包
cd demo-people-counting-device
pip install -r requirements.txt
摄像头参数配置
网络摄像头的IP地址可通过腾达APP的设备信息页面获取。
在主控板系统中打开Firefox浏览器,输入摄像头IP地址,使用默认凭据登录:
- 用户名:
admin - 密码:
admin123456
登录后配置音视频参数并保存设置。
启动应用程序
进入项目源码目录并运行对应脚本:
cd demo-people-counting-device/src
#运行IP摄像头版本
python3 ip_camera_main.py
#或运行USB摄像头版本
python3 usb_camera_main.py
#或运行本地视频测试版本
python3 local_video_main.py --video ../asset/street.mp4
`--video`: 指定视频文件路径(必填)
`--model`: 指定YOLO模型路径(可选,默认使用 `yolov5n_320.onnx`)
模型准备
目标检测模型
项目支持以下YOLOv5n ONNX模型(位于 src/ 目录):
| 模型文件 | 输入尺寸 | 特点 |
|---|---|---|
yolov5n_320.onnx |
320×320 | 速度最快,精度稍低(默认) |
yolov5n_416.onnx |
416×416 | 速度与精度平衡 |
yolov5n_640.onnx |
640×640 | 精度最高,速度较慢 |
注意:所有模型文件已包含在项目中,位于
src/目录下,无需额外下载。
行人重识别模型
- ReID模型:
osnet_x0_25_market1501.onnx(位于src/目录) - 输入尺寸:256×128(宽×高)
- 特征维度:512维归一化特征向量
注意:ReID模型需要从Market1501等ReID数据集微调后的版本,不能直接使用ImageNet预训练模型。
统计逻辑说明
计数类型
- 实时计数(Current Count):当前视频帧中检测到的活跃目标数量
- 累计计数(Total Count):基于唯一track_id的历史累计去重人数
- 进出计数(In/Out Count):基于虚拟检测线的人员进出方向统计
计数原理
- 实时计数:直接统计当前帧中活跃跟踪目标的数量
- 累计计数:每个新生成的track_id对应一个唯一人员标识,确保累计统计的准确性
- 进出计数:通过虚拟检测线(默认为画面中央水平线)判断目标移动方向:
- 进入(In):目标向下移动(Y 坐标增大)
- 离开(Out):目标向上移动(Y 坐标减小)
- 基于目标中心点的历史轨迹判断穿越方向
- 每个 track_id 仅在首次穿越虚拟线时计数,避免重复统计
虚拟线自定义
当前版本支持自定义虚拟检测线的位置和方向:
- 水平检测线:
direction='horizontal',line_position=指定Y坐标 - 垂直检测线:
direction='vertical',line_position=指定X坐标
应用演示
常见问题排查
Q1: 摄像头无法打开
解决方案:
- 将当前用户添加到 video 用户组:
sudo usermod -aG video $USER - 重启系统使用户组权限生效
- 检查摄像头是否被其他进程占用
Q2: 模型文件加载失败
解决方案:
- 确保在
src/目录下运行脚本(所有模型文件均位于此目录) - 不要更改工作目录,直接在
src/目录执行启动命令
Q3: IP 摄像头连接失败
解决方案:
- 测试网络连通性:
ping <摄像头IP地址> - 确认摄像头 ONVIF 服务已启用
Q4: 系统性能卡顿
解决方案:
- 关闭 ReID 功能(在代码中设置
use_reid=False) - 降低显示窗口分辨率
技术支持与贡献
项目开源地址:GitHub - Quectel-Pi/demo-people-counting-device · GitHub
欢迎提交 Issue 反馈问题或 Pull Request 贡献代码改进!












