基于Python计算机视觉识别应急门人员违规进入的技术咨询
应急门违规进入识别方案(Python+计算机视觉)
核心逻辑
核心是通过目标轨迹的方向判定区分合规外出与违规进入:预先定义门的边界线,将画面划分为「门内区」和「门外区」,跟踪人员的移动轨迹,若出现从「门外区」到「门内区」的穿越行为,即判定为违规进入。
具体实施步骤
- 第一步:划定门的边界与区域
在视频帧上标记一条虚拟边界线(对应门的物理出入口),通过坐标定义线的两端点(如line_start=(x1,y1)、line_end=(x2,y2)),以此区分门内、门外区域。 - 第二步:目标检测与持续跟踪
用你熟悉的目标检测模型(如YOLO系列)识别画面中的人员,搭配跟踪算法(如DeepSORT、ByteTrack)为每个人员分配唯一ID,持续记录其位置坐标,保证轨迹的连续性。 - 第三步:轨迹方向判断
保留每个跟踪目标的最近2-3个坐标点,计算其穿越边界线前后的区域归属:- 若目标之前在门外区、之后进入门内区,触发违规告警;
- 若从门内区到门外区,判定为合规外出,忽略即可。
可通过向量叉乘或区域坐标范围判断,快速确定点所属区域。
- 第四步:违规事件处理
检测到违规时,记录时间戳、截取当前帧保存,或联动硬件触发声光告警(若有需求)。
关键代码片段示例
import cv2 import numpy as np # 自定义门的边界线(根据实际场景调整坐标) line_start = (300, 100) line_end = (300, 500) # 判断点位于门线的哪一侧:1=门内,-1=门外 def get_region(point, line_s, line_e): cross_product = (line_e[0] - line_s[0])*(point[1] - line_s[1]) - (line_e[1] - line_s[1])*(point[0] - line_s[0]) return 1 if cross_product > 0 else -1 # 存储跟踪目标的历史轨迹:key=跟踪ID,value=坐标点列表 track_history = {} # 读取视频(可替换为实时摄像头流:cv2.VideoCapture(0)) cap = cv2.VideoCapture("door_monitor.mp4") while cap.isOpened(): ret, frame = cap.read() if not ret: break # -------------------------- # 此处替换为实际目标检测代码(YOLO等) # 示例:模拟人员检测框,格式为(x1,y1,x2,y2) person_bboxes = [(240, 160, 290, 310), (360, 180, 410, 330)] # -------------------------- # 处理每个检测到的人员 for idx, bbox in enumerate(person_bboxes): track_id = idx + 1 # 计算检测框中心作为跟踪点 center = ((bbox[0]+bbox[2])//2, (bbox[1]+bbox[3])//2) # 更新轨迹历史 if track_id not in track_history: track_history[track_id] = [] track_history[track_id].append(center) # 用最近2个点判断方向 if len(track_history[track_id]) >= 2: prev_point = track_history[track_id][-2] curr_region = get_region(center, line_start, line_end) prev_region = get_region(prev_point, line_start, line_end) # 判定违规:从门外到门内 if prev_region == -1 and curr_region == 1: print(f"[告警] 检测到违规进入,跟踪ID: {track_id}") cv2.putText(frame, "UNAUTHORIZED ENTRY!", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) # 绘制门线便于可视化 cv2.line(frame, line_start, line_end, (0,255,0), 2) cv2.imshow("Door Monitor", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
优化建议
- 场景校准:首次部署时需反复调整门线坐标,确保区域划分准确,避免因边界模糊导致误判。
- 遮挡处理:若门附近有遮挡物,可延长轨迹判断窗口(如连续3帧确认方向一致),降低误报率。
- 光照适配:室外门需考虑昼夜光照差异,可使用红外摄像头,或在检测前添加图像增强(如直方图均衡化)预处理。
- 模型选型:优先选择轻量型检测模型(如YOLOv8n)搭配高效跟踪算法(如ByteTrack),保证实时性。
内容的提问来源于stack exchange,提问作者PVic
相关产品推荐
相关产品推荐

