一、行人翻栏识别背景介绍
1.1跨越围栏是人类活动中一个普遍但需要引起警惕的行为。它不仅可能导致各种意外事故,甚至可能对个人的生命安全构成威胁。在交通领域,跨越围栏可能导致严重的交通事故,造成人员伤亡。在公共场所,如公园、广场等,跨越围栏可能破坏公共设施,给他人带来不便。此外,在某些特定场所,如军事禁区或危险区域,跨越围栏可能触犯法律,甚至构成犯罪行为。
为了降低这种危害,我们需要在多个层面进行防范和治理。首先,公众需要提高安全意识,认识到跨越围栏的危害。其次,政府和社会组织应加强监管,制定并执行相关法规,对违规行为进行惩处。最后,技术手段也是防范跨越围栏的有效途径。例如,通过算法识别技术,可以实时监测和预警潜在的跨越围栏行为,从而减少事故的发生。
2、围栏摄像识别介绍
2.1 摄像头结构:围栏监控摄像头通常由镜头、传感器、图像处理器、存储器等组成。镜头负责采集图像,传感器负责将光信号转换为电信号,图像处理器负责处理图像,存储器负责存储视频。
2.2 图像采集:通过镜头和传感器,摄像头采集图像信息。传感器将光信号转换为电信号,然后通过图像处理器进行处理。
2.3 图像处理:图像处理器对采集的图像进行处理,包括清晰度调整、色彩平衡等,以提高图像质量。
2.4 目标识别:通过图像处理,摄像头能够识别特定目标,如人、车辆等。这通常通过特征提取和匹配来实现。
2.5 运动追踪:摄像头可追踪目标的运动轨迹,实时监测。这通常通过目标跟踪算法来实现。
2.6 视频存储:摄像头将采集的视频存储在存储器中,方便后续查看。存储器可以是内置的,也可以是外接的。
2.7 数据分析:通过数据分析技术,可对存储的视频进行分析,提取有价值的信息。例如,可以分析目标的运动轨迹、行为模式等。
2.8 智能警告:当识别到异常情况时,摄像头会触发报警系统,通知管理者。这可以通过声音、光线、短信等方式实现。
2.9 网络传输:摄像头通过网络将采集的视频实时传输到管理平台。这可以通过有线或无线网络实现。
2.10 电源管理:为了确保摄像头的正常运行,需要采取有效的电源管理措施。例如,可以使用太阳能电池板或备用电源等。
二、算法目标
识别指定区域是否有有人进入改区域,并进行生成相应报警逻辑。
三、业务逻辑分析及算法实现
越界识别的功能实现,主要包括行人目标检测、行人追踪及越界识别判断三部分
1) 行人目标检测
这一部分主要利用YOLOv8算法实现。
首先基于YOLOv8目标检测算法训练一个检测行人(person)的权重person.pt。
参考之前代码:
Ctrl CV:YOLOV8血细胞检测
2 )行人目标追踪
目标追踪的实现主要是在实现目标检测的前提下,补充目标追踪功能,即通过追踪并绘制每个目标的track_id信息实现。
Ctrl CV:YOLOv8目标跟踪
Ctrl CV:YOLOv8_VisDrone2019目标跟踪、模型部署
3) 越界识别判断
(1)越界监测区域绘制
实现越界识别,即检测某个感兴趣区域,是否有人违规进入。所以首先需要设置一个感兴趣区域(监测区域),然后结合目标追踪判断是否有人员闯入检测区域内。代码如下:
# 绘制越界监测区域 points = [[593,176],[904,200],[835,323],[507,300]] color_light_green=(144, 238, 144) ##浅绿色 res_img = process_points(frame,points,color_light_green) cvs.imshow(res_img)
(2) 人体检测监测点调整
绘制好监测区域后,结合前面目标检测追踪部分,便可进行越界识别判断。这里需要注意的是在实际业务场景中,通常判断人体越界的点,主要用的是人体脚部的点。使用yolov8算法得到的是人物检测框的四个点信息[x,y,w,h],即目标框的左上角点的x,y坐标和宽w、高h,因此需要通过代码,转换成人体下方的点,即[左上角点x+1/2*宽w,左上角点y+高h]。转换代码如下:
# 2.计算得到人体下方中心点的位置(人体检测监测点调整) pt = [tlwh[0]+1/2*tlwh[2],tlwh[1]+tlwh[3]]
(3) 人体状态追踪判断
获取了人体的坐标信息,需要结合绘制的检测区坐标,判断人体是否在监测区域内,并将将人体的状态进行区分。比如将人体在监测区域内设置为1,不在监测区域内设置为-1。所以代码中需要判断每个人的运动状态,将每个人运动轨迹中,每一帧在图片上的状态统计下来。
# 3. 人体和违规区域的判断(人体状态追踪判断) track_info = is_in_poly(pt, points) if tid not in track_id_status.keys(): track_id_status.update( {tid:[track_info]}) else: if track_info != track_id_status[tid][-1]: track_id_status[tid].append(track_info)
(4)越界行为判断
基于上面对行人在视频中每一帧的移动轨迹中状态的记录,便可进一步判断行人是否越界。比如某个人当前一帧的状态是-1,后一帧的状态变成1时,说明刚刚进入越界区域,此时就将当前的图片进行保存,留作告警记录。代码如下:
# 4. 判断是否有track_id越界,有的话保存成图片 # 当某个track_id的状态,上一帧是-1,但是这一帧是1时,说明越界了 if track_id_status[tid][-1] == 1 and len(track_id_status[tid]) >1: # 判断上一个状态是否是-1,是否的话说明越界,为了防止继续判别,随机的赋了一个3的值 if track_id_status[tid][-2] == -1: track_id_status[tid].append(3) cv2.imwrite("overstep.jpg",res_img)
(5)越界识别&系统告警
一般在实际应用的项目业务系统中,需要对最后检测的报警信息进行通知警告Warning! ID信息,因此可进一步将记录的报警信息进行相应处理,找出越界人员。