YOLO v8 目标检测识别翻栏

news/2024/11/7 22:46:02/

一、行人翻栏识别背景介绍

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信息,因此可进一步将记录的报警信息进行相应处理,找出越界人员。


http://www.ppmy.cn/news/1272249.html

相关文章

Redis - 分布式锁、Redisson

分布式锁 分布式锁是控制分布式系统间同步访问共享资源的一种方式,其可以保证共享资源在并 发场景下的数据一致性。 当有多个线程要访问某一个共享资源( DBMS 中的数据或 Redis 中的数据,或共享文件 等)时,为了达…

2023自动化测试框架大对比:哪个更胜一筹?

所谓工欲善其事,必先利其器,在进行自动化测试时,选择一个合适的框架是至关重要的。因为一个好的测试框架可以大大提高测试效率,减少我们很多工作量。在选择框架之前,我们通常需要对不同的框架进行对比,以便…

BabylonJS(一) 前言-为什么想写这个系列

先开篇吐槽下吧,我是奔着6.0和WebGPU来的,网上各种评测也很优秀,社区活跃,打算入坑。 但...... babylonjs中文资料相对于Threejs、Unity简直是太少了.. 之前有个中文站点,好像也没啥人维护了,大部分deep…

基本运算byte b3 = b1 + b2和 b1+=b2

基本赋值运算符&#xff1a; 扩展赋值运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/,%&#xff0c;>>&#xff0c;<<&#xff0c;&… 注意&#xff1a;无论是基本赋值运算符还是扩展赋值运算符都是最后算&#xff0c;并且是把右边的计算的结果最…

k8s中EmptyDir、HostPath、NFS三种基本存储方式介绍

目录 一.数据存储介绍 二.EmptyDir 1.简介 2.案例演示 三.HostPath 1.简介 2.案例演示 &#xff08;1&#xff09;介绍一下type类型 &#xff08;2&#xff09;简单演示 &#xff08;3&#xff09;数据同步功能 四.NFS 1.简介 2.案例演示 &#xff08;1&#xff…

【鸿蒙开发】第六章 ArkTS基础知识 - 类、接口及泛型

1 前言 上一章节我们学习了【鸿蒙开发】第五章 ArkTS基础知识 - 声明变量、常量、类型和函数&#xff0c;大概了解ArkTS的基础类型和用法和ts的大致基本相同&#xff0c;与Java也极其相似。本章节我们继续学习ArkTS类和接口、泛型等相关知识&#xff0c;为后续鸿蒙应用开发夯实…

Vue3+Setup+TypeScript实现主题切换(浅色、深色、跟随系统)

使用 Vue 3 的 Composition API、 TypeScript 以及 <script setup> 语法糖&#xff0c;实现动态主题切换&#xff0c;能够在 ‘light’&#xff08;明亮&#xff09;、‘dark’&#xff08;暗黑&#xff09;和 ‘system’&#xff08;系统&#xff09;主题之间切换&#…

【JavaWeb】往浏览器打印一个hello world

上集:建一个web项目 第一步&#xff1a;建好Servlet类的文件 右键src&#xff0c;建一个class 就行 第二步&#xff1a;编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解&#xff0…