
简介面向智能监控场景基于Yolov5与Qt5的行人范围超界报警系统完整代码包适合具备一定Python、C基础希望完成毕设或安防项目的开发者。压缩包共30个文件其中包含14个Python源码、11个编译后的pyc文件、1个Qt界面ui文件、1个Dockerfile及预训练权重pt文件整体13.45MB包内代码按模型、工具模块、界面和主流程等组织便于定位和二次开发源码覆盖模型训练与推理、目标检测逻辑、距离计算及界面交互权重文件可较快复现检测效果。已有2207人学习下载。资源提供完整的Yolov5行人检测流程、Qt5界面设计代码、自定义目标区域划定、行人与边界距离计算、超界报警触发与实时反馈机制可帮助读者直接运行调试并在此基础上修改模型或阈值快速搭建实用的智能行人越界报警系统。1. 行人范围超界报警不是新算法而是让 YOLOv5 的结果变得可用我见过不少这样的场景工地上的吊装区明明用警戒带围了起来施工人员却经常为了抄近路直接跨过去学校里某个楼顶平台本不该有学生靠近可总有孩子翻过围栏。保安室里挂着九宫格监控画面但人眼盯不了十分钟就会疲劳。基于 YOLOv5 的行人范围超界报警系统就是让电脑来做这件重复劳动每一帧都找出画面里的行人判断他是不是超出了预先划定的活动范围一旦越界马上抓拍并上报告警。它适合有普通海康/大华摄像头、想用现成代码快速验证这个想法的个人开发者也适合园区或项目部想先跑一个原型再决定要不要上商用设备的团队。接下来我会从压缩包结构说起一步一步把“检测 → 判断 → 去抖 → 报警”这条链路跑顺并把你最可能踩的五个坑提前拆开。2. 先把压缩包拆开从依赖到第一个能跑通的 YOLOv5 推理拿到一个“yolov5 行人范围超界报警.zip”这类压缩包时我从来不会双击一个main.py就开始跑而是在 IDE 里先把目录展开确认里面装的是完整项目还是一个残缺的脚本集。很多现场流程的翻车并不是算法出了问题而是依赖版本和模型权重根本没对齐。压缩包里的核心不是代码是权重文件.pt或者.onnx以及定义警戒区域的配置。这一章就把最基础的“检测链路”跑通后面的越界判断才有地方挂。2.1 项目里总能看到哪几类东西先核对模型、配置和依赖一个能落地的 YOLOv5 行人报警项目通常包含了这几类内容检测脚本例如detect.py或main.py、配置文件config.yaml/config.json、模型权重.pt或.onnx以及依赖清单requirements.txt。如果没有 README那就先找模型文件因为权重决定行人检测的底子。压缩包里如果自带的是best.pt这种是经过微调的行人模型如果只有一个yolov5s.pt那么系统跑通之后漏检率会偏高因为 COCO 预训练权重见过的是通用目标不是特定摄像头视角下的行人。拿到包之后先做三件事确认 Python 版本是不是 3.8~3.10确认 torch 是不是 CPU 版还是 CUDA 版然后看一眼model.conf这个参数在配置里的默认值。YOLOv5 官方推理默认conf0.25但很多报警项目为了让演示看起来没有大量框会把 conf 拉到 0.5。这在复杂背景下非常容易漏人尤其是行人只有十几像素高的远距离画面。常见做法是先把 conf 调低到 0.25让检测器尽量把人找出来再用跟踪和去抖过滤误报而不是一开始就靠高阈值“硬塞”干净结果。依赖方面t 最好用pip install -r requirements.txt但离线环境中常见的坑是 torch 版本过新导致torch.hub加载失败。我一般会固定torch1.13.1、torchvision0.14.1这个组合和 YOLOv5 的导出、ONNX 转换兼容性最好。如果压缩包里没有 requirements按这个版本装基本不会错太远。压缩包常见内容作用缺失时的临时替换方案best.pt/last.pt微调过的行人权重先用官方yolov5s.pt跑通流程config.yaml警戒区域、报警阈值、冷却时间自己在代码里写常量但不利于现场调试detect.py视频流推理入口从零写一个 20 行的推理脚本requirements.txt依赖列表按 torch 1.13 手动安装2.2 最小推理脚本把 YOLOv5 先当黑匣子用在把报警逻辑加进去前最好先让检测器单独跑起来。我每次接手这类项目都会先写一个最小脚本只打印出“画面里检测到几个 person 框”不画线也不报警。这样可以确认模型能不能加载、摄像头或者视频文件能不能打开、检测结果里的坐标格式是什么。YOLOv5 的results.pandas().xyxy是最直观的输出方式每一行对应一个目标包含xmin, ymin, xmax, ymax, confidence, name列。import torch import cv2 # 如果压缩包里有自定义权重把 yolov5s 换成 custom # 并指定 pathweights/best.pt model torch.hub.load(ultralytics/yolov5, yolov5s, pretrainedTrue) model.conf 0.25 model.iou 0.45 model.max_det 20 frame cv2.imread(test.jpg) results model(frame, size640) # 只保留 person 类别的检测框 df results.pandas().xyxy[0] persons df[df[name] person] for _, row in persons.iterrows(): x1, y1, x2, y2 int(row[xmin]), int(row[ymin]), int(row[xmax]), int(row[ymax]) conf float(row[confidence]) print(person:, conf, (x1, y1, x2, y2))这段代码里最值得说清楚的是size640。行人检测对输入分辨率比较敏感640 是准确率和速度之间的平衡点如果在画面里行人很小我会把size提到 1280但这会让推理时间翻倍树莓派 4B 上基本跑不动。model.conf和model.iou就是 YOLOv5 的推理超参数直接改对象属性就能生效不需要改配置。model.max_det 20是防止画面里人太多的时候NMS 后输出一堆低质量框拖慢后处理。跑通单帧之后再把它接上视频流。视频流接入有个非常容易忽略的点不要每帧都推理。摄像头如果是 25 帧YOLOv5 的推理跟不上就会越积越多最终报警延迟越来越大。常见做法是跳帧每两到三帧推理一次剩余帧纯显示。这样对报警系统完全够用因为一个行人跨出边界线至少需要 0.5 秒以上连续几帧越界才会真正触发报警。2.3 第一次跑通后先量化性能基线很多人在压缩包代码里直接加了一个cv2.VideoCapture循环发现 CPU 占用 100%然后就去怀疑模型太复杂。实际上这里的问题多半是同步推理导致的。单个 640x640 的 YOLOv5s 在普通六核 CPU 上推理一次大约需要 150~300 毫秒25 帧的 RTSP 视频流每秒只能跑 4 帧左右看起来就是卡顿。这不是模型玄学是吞吐不够。我的习惯是先跑一个“离线视频性能测试”用脚本统计处理一帧的平均耗时如果平均耗时在 200 毫秒左右那么跳帧策略就设置为每两帧处理一次如果能到 100 毫秒以内就可以每帧推理。这个基线数据决定了越界判断里的“连续 N 帧”要设多少。报警去抖那章会继续说到。3. 范围超界的核心算法警戒区域与坐标判定检测模型只告诉你“哪里有行人”不告诉你“这个行人有没有超界”。报警系统的核心在于第二件事坐标判定。这一章我会把警戒区域从矩形换成任意多边形然后说清楚为什么判断时要选用“脚底点”而不是“中心点”最后给出一段可以挂进检测循环的报警函数。这套逻辑在所有 YOLOv5 变体上都通用跟模型权重无关。3.1 用鼠标点出一个多边形警戒区不要只画矩形很多新手第一次做越界报警直接用矩形框选警戒区域代码简单但现场往往不配合警戒线是斜的通道是弯曲的矩形会把一半无关区域框进来。正确的做法是把警戒区域定义成任意多边形然后用 OpenCV 的鼠标回调来打点。下面这段代码可以让你在一张背景图上用鼠标点出多个顶点实时画出多边形并保存成坐标列表。import cv2 roi_points [] def mouse_callback(event, x, y, flags, param): global roi_points if event cv2.EVENT_LBUTTONDOWN: roi_points.append((x, y)) # 显示当前点以及已有的边 cv2.circle(canvas, (x, y), 4, (0, 0, 255), -1) if len(roi_points) 1: cv2.line(canvas, roi_points[-2], roi_points[-1], (0, 255, 0), 1) cv2.imshow(set_roi, canvas) canvas cv2.imread(test.jpg) cv2.imshow(set_roi, canvas) cv2.setMouseCallback(set_roi, mouse_callback) print(在画面上单击左键标点标完后在窗口里按任意键结束) cv2.waitKey(0) cv2.destroyAllWindows() print(roi_points)这个交互脚本每次标定完会把多边形顶点按顺序打印出来。注意一点标定的图像必须是和摄像头原始分辨率一致的那一帧不能是缩略图或经过resize的帧。坐标系的混用是超界报警最典型的坑后面避坑章会专门展开。标完之后把这些坐标存进配置项在运行代码里按原来顺序传入cv2.fillPoly或cv2.pointPolygonTest就行。3.2 行人位置取哪个点用脚底点而不是中心点检测框给出的是(x1, y1, x2, y2)在判断“行人是本文还有配套的精品资源点击获取