本文博主给你一个可直接运行的监控区域人流统计完整示例脚本完全基于文章里提到的ultralyticsTrackZone实现包含视频读取、区域追踪、人数统计、结果可视化与保存。监控区域人流统计完整示例脚本功能说明✅ 自定义多边形监控区域如出入口✅ YOLOv8-nano 实时目标检测 ByteTrack 追踪✅ 仅统计区域内的人class_id0✅ 实时显示当前人数✅ 输出带追踪框和统计信息的视频✅ 支持摄像头 / RTSP流 / 本地视频环境依赖pipinstallultralytics opencv-python完整代码fromultralyticsimportYOLO,solutionsimportcv2# # 1. 基础配置# MODEL_PATHyolo26n.pt# 或 yolov8n.ptVIDEO_PATHvideo.mp4# 可替换为 0摄像头或 RTSP地址OUTPUT_PATHoutput.mp4# 监控区域多边形顶点坐标按顺时针或逆时针# 示例一个矩形出入口区域region_points[(150,150),(1130,150),(1130,570),(150,570)]# # 2. 初始化模型与TrackZone# modelYOLO(MODEL_PATH)trackzonesolutions.TrackZone(modelMODEL_PATH,regionregion_points,classes[0],# 只统计“人”COCO数据集中 class_id0trackerbytetrack.yaml,# 密集场景推荐ByteTrackshowTrue,# 实时显示画面persistTrue# 跨帧保留追踪状态)# # 3. 视频读写准备# capcv2.VideoCapture(VIDEO_PATH)fpsint(cap.get(cv2.CAP_PROP_FPS))wint(cap.get(cv2.CAP_PROP_FRAME_WIDTH))hint(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))outcv2.VideoWriter(OUTPUT_PATH,cv2.VideoWriter_fourcc(*mp4v),fps,(w,h))# # 4. 主循环逐帧处理# whilecap.isOpened():success,framecap.read()ifnotsuccess:break# TrackZone推理resultstrackzone(frame)# 当前区域内人数current_countresults.total_tracks# 在画面上标注人数cv2.putText(frame,fCurrent Count:{current_count},(30,40),cv2.FONT_HERSHEY_SIMPLEX,1.2,(0,255,0),2)# 绘制监控区域轮廓cv2.polylines(frame,[np.array(region_points)],isClosedTrue,color(255,0,0),thickness2)# 写入输出视频out.write(frame)# 按 q 退出ifcv2.waitKey(1)0xFFord(q):break# # 5. 释放资源# cap.release()out.release()cv2.destroyAllWindows()print(f✅ 处理完成结果已保存至:{OUTPUT_PATH})关键参数调优建议场景调整建议人特别多、遮挡严重track_buffer60match_thresh0.85追求实时性加vid_stride2~3夜间/低光照换yolov8n.pt→yolov8n.yaml重新训练或提高track_low_thresh只统计进入人数配合solutions.SpeedEstimator或自定义进出方向判断运行效果蓝色多边形监控区域绿色ID框被追踪的人员左上角Current Count: X输出output.mp4带统计信息的完整视频可扩展方向下一篇教程内容 进出双向计数进1出-1 停留时长统计 越界/区域入侵报警 导出CSV统计数据时间戳 人数