
客流统计不是“数人头”,而是一个典型的多目标检测 + 跟踪 + 事件触发问题。
核心链路:
Video → Detection → Tracking → ROI → Line Crossing → Filter → Output目标很明确:
Camera → Edge Device → Inference → Tracking → Counting → API / Server1. 输入(Camera)
2. 边缘推理(Edge)
3. 跟踪(Tracking)
4. 计数逻辑
5. 输出
实际不会对整帧做检测:
roi = frame[y1:y2, x1:x2]作用:
if frame_id % 2 != 0:
continue说明:
detections = model(roi)
tracks = tracker.update(detections)关键点:
if track.cross(line):
if track.direction == "in":
in_count += 1
else:
out_count += 1问题:人在边界晃动 → 被重复计数
if abs(curr_y - prev_y) < threshold:
ignore = True不要用单帧判断:
direction = sum(last_n_frames) / nif current_time - last_count_time < 3:
ignore = True常见错误:
❌ 全画面检测 + 单线 ✅ ROI限制 + 双线缓冲区
参数 | 数值 |
|---|---|
输入分辨率 | 1080p |
推理模型 | YOLOv8n |
推理帧率 | ~8 FPS |
延迟 | 100–150ms |
准确率 | 92%–96% |
现象: 👉 2个人 → 统计1个
原因:
现象: 👉 同一个人被统计3次
原因:
原因:
现象: 👉 人消失 or 检测失败
现象: 👉 数据严重偏高
解决:
模型 | 优点 | 缺点 |
|---|---|---|
YOLOv8n | 快 | 精度一般 |
YOLOv8s | 平衡 | 稍慢 |
YOLOv8m | 精度高 | 延迟高 |
优化建议:
实际项目瓶颈通常在:
优化方向:
{
"timestamp": "2026-03-17T10:00:00",
"device_id": "cam_01",
"in_count": 125,
"out_count": 118,
"confidence": 0.94
}补充建议:
客流统计能不能用,关键看三点:
实际问题大多出在:
👉 边界处理 + 轨迹判断 + 去重策略
而不是模型本身。
如果你做过类似项目,应该会有同感:
👉 真正难的不是“把人检测出来” 👉 而是“在复杂场景下只数一次”
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。