零基础边缘端智能安防训练营 | Lesson 5

5个课时,落地AI应用!

欢迎大家来到AidLux零基础边缘端智慧安防训练营~

零基础边缘端智能安防训练营 | Lesson 5_第1张图片

在第三节课,我们学习了用目标检测yolov5训练一个人体检测模型。

在第四节课,又将Yolov5+目标追踪Bytetrack结合,进行了2种算法的串联。

有了检测和追踪的结合,我们就可以实现AI项目中的很多功能了。

比如越界识别,判断在某块区域的监测过程中,是否有人越过这个区域。

在很多智能相机中,常常会内置这个功能,应用的场景非常多。

比如客流统计,通过对人流的追踪,判断越过某条统计线段进出的有多少人。

比如车辆违停检测,统计停靠在某个区域的车辆停留时间,判断是否违规停放。

tips:上面的举例中使用的目标检测和目标追踪算法功能原理上是一样的,只是检测的目标和设置的业务功能不同。

本次训练营,主要针对越界识别的功能进行讲解和实现,在最后的作业环节,大家可以跟着实现客流统计的功能。本节课的内容框架:

1 越界监测区域绘制

2 越界识别功能实现

3 越界识别&系统告警

4 业务逻辑和代码实现

5 AidLux认证开发者

课程五

1. 越界监测区域绘制

想要实现越界识别,需要检测是否有人违规进入某个限定区域。

举个例子,我们想要实现一个预防坠湖的功能,首先需要在沿湖范围设置一个限定区域。

当在我们限定区域内识别到人体的时候,就需要重点关注,判断风险和异常。

零基础边缘端智能安防训练营 | Lesson 5_第2张图片

显示生活中,很多园区的各个边界都设置有监测区域,俗称电子栅栏。当识别到出现翻越情况,会在第一时间告警提示。

不难理解,想要实现越界翻越识别业务功能,首先要绘制一个监测区域,即电子栅栏。

在训练营代码中,围栏是手动绘制的,主要基于point这4个点,绘制了一个多边形区域。下方的代码,也在aidlux文件夹的yolov5_overstep.py中。

这四个点是如何确定的呢?我们先讲一下最基础的办法。

通常会从视频文件中保存一张单帧的图片,比如使用aidlux文件夹下面的video_to_image.py文件,运行后会保存一张图片到lesson5_codes文件夹下方,即image.jpg。

零基础边缘端智能安防训练营 | Lesson 5_第3张图片

我们先把图片下载到电脑上,再使用画图软件打开image.jpg。

找到图片中我们想监测的区域,点击4个点的坐标记录下来,即图片上的4个点坐标。

零基础边缘端智能安防训练营 | Lesson 5_第4张图片

然后在video_to_image.py的代码中,添加监测区域信息的代码,查看一下显示区域是否可以。

零基础边缘端智能安防训练营 | Lesson 5_第5张图片

运行后可以看到,我们已经在监控视频中添加上监测的越界区域了。

零基础边缘端智能安防训练营 | Lesson 5_第6张图片

相较于手动绘制监测区域,在实际的业务系统中,通常会做成用户自行配置的界面方式,让用户可以通过拖拽的方式快速配置。

2. 越界识别功能实现

了解完监测区域的绘制后,我们再来整体实现越界识别的功能。

2.1 视频上越界识别绘制

首先将第四节课中用到的代码yolov5_bytetrack.py进行修改,变成yolov5_overstep.py。

并将绘制区域的坐标和功能,写到之前检测追踪代码的后面。

零基础边缘端智能安防训练营 | Lesson 5_第7张图片

这时就可以在之前检测追踪的效果上,也绘制上监测区域了。

2.2 人体检测监测点调整

在实际业务场景中,通常情况下判断人体越界的点,主要用的是脚部的点。

由于不同的目标检测算法,最后的后处理不同,得到的检测框的信息可能是多样化的。

本次训练营中用的yolov5算法,会得到检测框的四个点信息,[左上角点x,左上角点y,宽w,高h]。

所以我们需要通过代码,转换成人体下方的点,即[左上角点x+1/2*宽w,左上角点y+高h]。

转换的方式也非常简单,大家看可以参考下方的这一行代码。

零基础边缘端智能安防训练营 | Lesson 5_第8张图片

2.3 人体状态追踪判断

有了监测的人体的坐标信息,我们还需要根据人体是否在监测区域内,将人体的状态进行区分。

因此第三部分的代码,主要是判断每个人的运动状态,将每个人运动轨迹中,每一帧在图片上的状态统计下来。

为了便于演示测试,我们将人体在监测区域内设置为1,不在监测区域内设置为-1。

零基础边缘端智能安防训练营 | Lesson 5_第9张图片

这里主要是第三部分的代码,判断每个人体每一帧的状态,是1还是-1,并将所有的状态,保存到track_id_status里面。

零基础边缘端智能安防训练营 | Lesson 5_第10张图片

2.4 越界行为判断

当在第三部分,知道每个人在移动轨迹中的状态时,就可以知道是否越界了。

比如某个人当前一帧的状态是-1,后一帧的状态变成1时,说明刚刚进入越界区域,这时就将当前的图片进行保存,留作告警记录。

零基础边缘端智能安防训练营 | Lesson 5_第11张图片

3. 越界识别&系统告警

一般在实际应用的项目业务系统中,会出现一个告警弹窗。比如某个位置出现告警信息,便于安排工作人员前去查看。

为了更加贴近实际,我们采用一种简单且实用的方式,即通过微信公众账号提醒等的方式,实现告警弹窗。

在后面大作业人流统计分析中,也会使用到。

3.1 新建账号

(1)注册并创建账号

关注并“注册账号”。

零基础边缘端智能安防训练营 | Lesson 5_第12张图片

(2)注册完成后,回到公众号页面,点击菜单栏的“提醒”,并选择“新建”。

零基础边缘端智能安防训练营 | Lesson 5_第13张图片

(3)填写新建提醒的相关信息,点击最后的“保存”。页面会自动加载,中间的部分会跳出自己账号专属对应的“喵码”和“网址”,后面的代码中主要用到喵码的功能。

零基础边缘端智能安防训练营 | Lesson 5_第14张图片

3.2 代码测试

为了测试效果,我们又写了一个测试代码,放在aidlux/miaotixing.py文件夹中。

需要注意的是,这里的id是测试账号的id,大家需要修改成自己的,否则会收不到推送。

零基础边缘端智能安防训练营 | Lesson 5_第15张图片

另外text信息,可以修改成自己需要的告警文字,我们修改成“有人越界识别!!”的信息。

运行代码后,会在微信上会收到一条“有人越界识别!!”的告警信息。

零基础边缘端智能安防训练营 | Lesson 5_第16张图片

3.3 越界识别+提醒

我们将前面越界告警的代码和提醒功能进行结合,当有人越界的时候,直接推送告警信息到手机上。

零基础边缘端智能安防训练营 | Lesson 5_第17张图片

这时我们就可以通过查看手机及时知道有哪些人越界了。

4. 业务逻辑和代码实现

4.1 业务逻辑实现

到了这里,要恭喜各位同学,大家已经在训练营的课程中:

✔ 实现了利用人体数据集训练人体检测模型;

✔ 并和bytetrack追踪结合,实现检测追踪的效果;

✔ 通过设置监测区域,达到越界识别+喵提醒告警的功能。

大家可以运行前面aidlux文件夹中yolov5_overstep.py测试一下,记得将喵码修改成你自己的。

完成功能后,我们将整个流程全都移植到AidLux边缘设备软件上,实现边缘端越界告警的效果。

零基础边缘端智能安防训练营 | Lesson 5_第18张图片

就像lesson1中讲解的,我们是用电脑和AidLux进行编程结合,实现的算法业务功能。

在实际项目中,获取的主要是摄像头的实时视频流,跟训练营采用视频文件的形式稍有不同,但整体差别不大。

除了找一台闲置的手机一直跑项目之外,还可以用AidBox的边缘设备快速的将自己编写的代码,落地到项目的使用中去。

因为算力更强,可接入的视频流更多。

零基础边缘端智能安防训练营 | Lesson 5_第19张图片

4.2 人流统计代码实现

来到本次训练营的末尾阶段,我们给大家准备了一个完整的实战作业:

使用人体检测+人体追踪+线段统计的方式,针对视频实现人流统计,并通过喵提醒告知人流统计的数量。

比如下方图片中,绘制了统计的线段,针对此线段往来的人群,进行客流统计。

零基础边缘端智能安防训练营 | Lesson 5_第20张图片

最终达到下方视频截图的效果。

零基础边缘端智能安防训练营 | Lesson 5_第21张图片

其实整体实现的逻辑也很简单,和前面越界识别的实现很相似,主要分为五个部分:

(1)人流统计越界线段绘制

前面是绘制越界区域,这里则是绘制统计人流的线段,主要采用cv2.line的方式。

零基础边缘端智能安防训练营 | Lesson 5_第22张图片

(2)人体检测统计点调整

前面讲了分析人体检测框下方中心点,和越界区域的位置关系,这里也是一样的。

主要分析人体下方中心点,和人流统计线段的位置关系,因此也再修改一下统计区域。

零基础边缘端智能安防训练营 | Lesson 5_第23张图片

(3)人体和线段的位置状态判断

这里主要分析人体下方点,和统计线段的位置关系,这部分的代码在utils.py的is_passing_line函数中:

当人体在线段的下方时,人体状态是-1;

当人体在线段的上方时,人体状态是1。

零基础边缘端智能安防训练营 | Lesson 5_第24张图片

我们这里主要统计从-1到1区域的人流的数量。

零基础边缘端智能安防训练营 | Lesson 5_第25张图片

实现的代码如下:

零基础边缘端智能安防训练营 | Lesson 5_第26张图片

前面还需要有一些初始化的函数:

零基础边缘端智能安防训练营 | Lesson 5_第27张图片

(4)人流统计分析判断

当人体的状态,从-1变化到1的时候,就统计为人员越线了。

并在图片的左上方,统计人流计数的实时效果。

零基础边缘端智能安防训练营 | Lesson 5_第28张图片

(5)提醒发送

当整个视频跑完后,就可以得到客流统计整体的数据。

为了及时知道客流的信息状态,我们也可以将最后的结果,以喵提醒的方式进行发送。

这部分的代码,放在最前面的图片采集中。

零基础边缘端智能安防训练营 | Lesson 5_第29张图片

前面还有两个库(times、requests)引用:

零基础边缘端智能安防训练营 | Lesson 5_第30张图片

在这里已经给出了比较明显的人流统计的代码提示了。

大家可以按照整体的业务逻辑,编写一个人流统计的代码,将各个板块进行串联,调试,里面的各种颜色也都可以调整。

最终统计得到的效果是:

零基础边缘端智能安防训练营 | Lesson 5_第31张图片

在视频运行完后,手机上还会收到一个提醒提示。

零基础边缘端智能安防训练营 | Lesson 5_第32张图片

4.3 训练营作业发布

本节课的内容基本结束了,为了巩固学习成果,大家可以完成一个作业任务。

4.3.1 作业流程

作业最终实现的是使用人体检测+人体追踪+业务逻辑,完成人流统计的业务功能。

完成作业的整个流程,主要分为两个部分:

(1)代码实现

大家可以参考前面的代码示意,完成整体人流统计项目的开发和实现。

(2)文章编写&分享

将完成整体人流统计项目的开发和实现的过程发布。

(3)文章参考

参考作品模板看这里

4.3.2 作业奖励

完成本次训练营的学习并完成最终作业的同学,可以分享作品。

5. AidLux认证开发者

AidLux认证开发者计划正式开启

零基础边缘端智能安防训练营 | Lesson 5_第33张图片

大家可以在这里交流互动,还有本节课所需的数据集、资料包。

本次智慧安防训练营到此结束了,感谢大家的学习,也期待大家的作品。

用AidLux,每个人都能轻松落地AI应用。

你可能感兴趣的:(AidLux,人工智能,计算机视觉,深度学习)