开源项目-人流量统计设备

人流量统计设备

本项目是基于 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 系统镜像,无需重新烧录系统,按照以下步骤即可开始开发。

硬件连接

散热风扇安装

  1. 将散热风扇排线插入主控板的 FAN 插槽
  2. 将散热器两端固定在主控板预留的安装孔位

显示连接

将 HDMI 线一端连接至主控板 HDMI 接口,另一端连接至显示器 HDMI 接口。

输入设备连接

将 USB 键盘和鼠标分别接入主控板的两个 USB-A 接口。若使用无线输入设备,请将接收器插入 USB 接口。

网络连接

将网线一端接入主控板千兆网口,另一端接入路由器 LAN 口(确保路由器已连接互联网)。

自动开机设置

在主控板左上角标有 AUTO_POWER_ON 字样的排针上安装跳线帽,实现上电自动开机功能。

供电连接

将电源适配器的 USB-C 端连接至主控板 POWER IN 接口,USB-A 端连接至电源适配器。

网络摄像头连接

为网络摄像头接通电源,并确保其与主控板处于同一局域网内。

完整连接示意图

项目部署

网络摄像头配置

首次使用网络摄像头时,需先通过手机连接同一WiFi网络,然后使用腾达APP添加摄像头设备完成网络配置。

重要提示:确保 Quectel Pi H1智能主控板与网络摄像头位于同一局域网,否则无法获取RTSP视频流。

获取项目代码

  1. 创建项目目录并进入:
mkdir ~/people-counting-device
cd ~/people-counting-device
  1. 安装Git并克隆项目代码:
sudo apt update
sudo apt install -y git
git clone https://github.com/Quectel-Pi/demo-people-counting-device.git
  1. 设置目录权限:
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预训练模型。

统计逻辑说明

计数类型

  1. 实时计数(Current Count):当前视频帧中检测到的活跃目标数量
  2. 累计计数(Total Count):基于唯一track_id的历史累计去重人数
  3. 进出计数(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 贡献代码改进!