基于AidLux实现家庭安防告警系统,快速构筑家庭安全防线

(本案例来自于AidLux开发者江大白)

人工智能技术在图像CV领域中应用场景有很多,比如智慧安防、工业视觉、自动驾驶等。

而在这些领域中,目前应用比较广,和我们生活息息相关的,主要是智慧安防。比如马路上用到的各种球机、枪机摄像头,再比如我们上班打卡时,常用的人脸打卡机,都在此范畴内。

随着大众安全意识的日益提升,智慧安防中的AI家庭安防受到的重视也愈发显著。

近几年的数据显示,从中国智能家居产品用户需求度情况来看,家庭安防最为突出,需求度高达92%。

家庭安防系统听上去颇为繁琐,但随着AI技术的不断提升,特别是有了AidLux这种降低AI应用开发和部署门槛的平台之后,大家用一部安卓手机就能轻松实现AI识别非法潜入,并将告警信息第一时间推送给业主等智能安防功能。

目录

1 系统架构:家庭智慧告警系统

2 目标检测:yolov5推理测试

2.1 Yolov5代码下载

2.2 安装Pycharm+Conda+Python

2.3 Yolov5推理测试

2.4 Yolov5图片及视频检测

3 图片云服务:七牛云图片上传下发

3.1 注册并创建空间

3.2 图片上传及外链获取代码测试

4 微信提醒:喵提醒服务开发

4.1 注册并创建提醒

4.2 喵提醒代码测试

5 PC代码整合:人体检测+七牛云+喵提醒

5.1 图片检测告警操作

5.2 视频检测告警操作

6 Android部署:Aidlux平台软件部署

6.1 下载安装Aidlux软件

6.2 Aidlux边缘侧使用案例

7 Android部署:Yolov5在Aidlux中优化加速

7.1 上传代码到Aidlux

7.2 安装相应的依赖库

7.3 代码查看对比

7.4 自有模型移植部署

7.5 运行代码查看效果

8 实现产品:家庭AI安防系统

8.1 AI相关产品应用

8.2 AI边缘设备应用

1.系统架构:家庭安防告警系统

为了便于大家理解,我们将整个家庭安防告警系统绘制了一张系统架构图。

上面是整体的告警系统流程图,主要分成三个部分:

(1)目标检测:这里的检测算法主要采用Yolov5,在框架中,大家可以看到最终是采用手机端检测的方式,而我们通常工作中是采用PC端推理的方式,因此通常情况下,会涉及到从PC端往手机端系统的移植过程。

但是不同系统的移植是一个比较麻烦的事情,因此这里采用一个多系统转换的神器Aidlux,快速移植部署。

(2)云端服务器:当发生外部人员入侵时,我们肯定想看到实时告警图片。但是手机是终端机器,无法直接将图片推送到我们的微信上。

因此我们可以采用七牛云的服务器作为中转的方式,将异常图片快速上传到云端服务器上,并将图片转化成可以直接查看的url链接。

(3)微信查看异常:我们的个人微信是没有办法直接接收外部的图片url链接推送的,因此这里采用喵提醒的公众号推送功能,第一时间将图片链接推送出来。

这时,就可以直接点击图片链接,查看异常告警,被检测出来的人员图像。

整体的功能,还是比较简单,不过其中会涉及到一些步骤,大家可以一步步查看尝试。

2.目标检测:Yolov5推理测试

Yolo系列是CV行业应用最广泛的目标检测算法,如果有想要深入学习的同学,可以参考以下内容。

(1)Yolov3:深入浅出Yolo系列之Yolov3算法

视频链接:https://www.jiangdabai.com/video/%e5%8f%91%e5%b8%83%e8%a7%86%e9%a2%91%e6%b5%8b%e8%af%95-2-2-2-2-2-3

(2)Yolov4:深入浅出Yolo系列之Yolov4算法

视频链接:https://www.jiangdabai.com/video/%e5%8f%91%e5%b8%83%e8%a7%86%e9%a2%91%e6%b5%8b%e8%af%95-2-2-2-2-2-2-2-3

文章链接:https://zhuanlan.zhihu.com/p/143747206

(3)Yolov5:深入浅出Yolo系列之Yolov5算法

文章链接:https://zhuanlan.zhihu.com/p/172121380

(4)Yolox:深入浅出Yolo系列之Yolox算法

文章链接:https://zhuanlan.zhihu.com/p/397993315

在本次开发的家庭安防作品中,应用的主要是Yolov5算法。当然,开发前期主要在PC端进行测试,为了便于大家理解学习,这里会重新编写一个人体检测的代码,具体主要包含四个部分:

Yolov5代码下载->window电脑搭建conda环境->Yolov5推理测试->Yolov5图片及视频检测。

2.1 Yolov5代码下载

Yolov5的官方链接为:https://github.com/ultralytics/yolov5

不过为了大家后面的测试,这里重新整理了整套代码和模型,便于大家参考学习。

代码网盘:https://pan.baidu.com/s/1QvCEvwNEd1GCayX2g7PdfQ

提取码:8ray

2.2 安装Pycharm+Conda+Python

PS:如果电脑上已安装好Pycharm和Conda环境,可以先跳过2.2章节,查看2.3章节。

图像算法入门,这里推荐Python语言进行编程,超级简单方便。

而之后使用 AidLux ,调用模型等也可直接使用 Python 编程,能够大大减少模型移植以及业务逻辑实现的工作量。

在编程中,为了便于管理代码,推荐大家使用Pycharm软件。

考虑到很多人刚入门时通常使用Window环境。

所以可以在Window安装Pycharm软件和Python语言,此外因为不同项目中,Python版本可能都不相同,因此可以安装一下Conda环境。

多个软件安装的流程,可以参考文章https://www.jiangdabai.com/422。

链接中也包含了安装Conda环境、Python、Opencv方面的资料,可以按照说明一步步下载学习。

当然如果使用linux系统,也是一样的,可以检索下教程先把Pycharm软件、Conda环境等安装起来,最终可以实现Opencv读取并显示一张图片。

2.3 Yolov5推理测试

在下载完前面整套代码后,首先按照其中的requirements.txt中的说明,下载一系列的依赖库。

为了测试各类依赖库是否正常,可以使用Yolov5的推理代码,进行推理测试。

主要修改一下detect.py文件里面模型文件的路径。

运行代码后,对于data/images里面的案例图片,会进行推理测试,生成效果图片后,会放在run/detect/exp文件夹里面,看到推理效果。

2.4 Yolov5图片及视频检测

Yolov5推理时,使用的是CoCo数据集训练的模型,总共有80个类别。

因此在我们的图片中,可以看到检测出人体和车辆,而在本文要做的家庭安防告警系统中,主要对于人体进行检测,所以我们修改下detect.py,只输出人体的检测框。

为了大家更好的理解推理的过程,这里将detect.py的代码进行简化,针对图片推理和视频推理的过程,编写了两个脚本。

detect_image.py主要是图片推理的代码,detect_video.py主要是视频推理的代码,都放在主文件的代码中。

(1)图片推理服务

当运行detect_image.py代码时,在后处理时,添加了过滤非人体类别的判断。

因为person的类别在CoCo中是0,所以运行代码时,会得到只有人体的检测结果。

(2)视频推理服务

从对图片的推理,延伸到对于视频的推理,也是一样的。

主要将读取图片的部分,修改成读取视频的部分,最终可以对data中的video.mp4进行人体检测。

3.图片云服务:七牛云图片上传下发

在实际的业务场景中,是监测无人的场景下是否有人闯入,比如晚上睡觉的时候,出差不在家的时候。

当然这只是一种场景应用,大家也可以根据自己的想法创作各种其他应用。

当有人违规闯入时,我们需要实时查看违规人员的图像画面,因此需要将检测结果的图片,上传到云服务器中,并且生成一个外链,进而发送到我们的微信上,便于实时查看。

这里提到的云服务,尝试了阿里云、腾讯云、七牛云,综合比较下来,七牛云性价比较高,因此在本章节中,我们将整个七牛云的操作流程、代码操作,一步步详细描述出来,大家逐步对照即可。

3.1 注册并创建空间

(1)登录七牛云官网https://www.qiniu.com/,点击右上角的“立即注册”,注册一个自己的账号。

注册好,即可登录账号,进入系统的后台。

(2)点击左上角的折叠栏,选择其中的“对象存储Kodo”。

进入对象存储的管理页面,再点击左面的“空间管理”。

从而进入“空间管理”的操作页面。

(3)点击中间的“新建空间”,在右面跳出的弹窗中,输入“存储空间名称”,访问控制修改成“公开”,点击“确定”。

跳出的信息中,我们可以看到有自动分配的域名,并且有30天的测试时间,这也是和阿里云不同的地方,不用先付费,可以先免费用30天的时间。

点击页面中的“好的,我知道了”,可以先用系统自带的域名,下发Yolov5的检测效果图片。

我们可以看到,空间列表中多了一个“aidlux2022”的新的空间。

(4)点击“aidlux2022”的名称,进入空间内的管理页面,并点击中间的“文件管理”。

点击中间的“上传文件”,上传一张图片到该空间中。

点击中间的“选择文件”,上传一张图片,再点击“开始上传”。

(5)返回“文件管理”页面中,可以看到列表中多了一张图片的信息。

点击右面的“更多”,选择其中的“复制外链”,即可得到图片的外链。

打开一个浏览器,输入网页外链后,可以得到我们刚刚上传的这张图片。

3.2 图片上传及外链获取代码测试

当然,上面的操作是我们手动上传的结果,在实际场景中,我们需要通过代码上传图片,并获得图片的外部链接,从而接入下一章的“喵提醒”,自动发送告警图片信息。

图片上传及外链获取的代码,这里也编写好了,放在qiniu_test.py文件中。

其中可以分为5个部分,设置七牛云中的个人信息,将本地图片上传七牛云的函数,获取图片外链的函数,上传及获取链接的代码,CDN刷新缓存。

代码中都有相关的注释是比较好理解的,这里主要讲解一下第一部分的七牛云个人信息,以及最后的CDN刷新缓存。

我们可以看到,主要填写的有access_key,secret_key,bucket_name和bucket_url四个参数。

(1)access_key和secret_key

个人密钥的两个信息,可以点击右上角,菜单栏中的密钥管理。

进入后台页面中,可以看到有两个信息,AK和SK,即对应access_key和secret_key两个值。

需要注意的是,代码中填写的是演示者个人账号的密钥,后期会停用,大家可以将代码中相应的值替换成自己的密钥。

(2)bucket_name

这里的bucket_name主要是空间名称,在七牛云的空间管理的后台中可以看到,演示代码中主要用的是“aidlux”的空间名称。

(3)bucket_url

在图片下发时,需要图片的整个外链,由于我们没有配置自己的域名,七牛云提供了自己的测试域名。点击“空间管理”后,页面的右下角,会跳出一个测试域名,每个人的域名后缀都不同,将此域名填写到代码中的bucket_url中。

填写上相应的信息后,在Pycharm软件中运行qiniu_test.py文件,可以得到上传的图片的url信息。

将打印出的url信息,输入浏览器的网页栏中,可以得到上传的图片。

此外我们也需要注意,一般上传的图片,在服务器中会有缓存,需要在服务器中,定时刷新缓存,确保上传的图片,是最新的图片。

因此在代码的最后,还有一个刷新缓存的操作,不过对于普通用户,一天的刷新次数<500次。

4.微信提醒:喵提醒服务开发

至此,我们可以使用Yolov5实时监测是否有人体入侵,也可以得到图片的外链,但是还需要将图片链接实时发送到我们的微信上,这样我们才知道是什么人进入我们的私密空间。

当然,我们个人的微信是没办法接收消息的,所以这里主要通过“喵提醒”的自动提醒功能。

4.1 注册并创建提醒

(1)关注“喵提醒”的账号,点击回复消息中最后的“注册账号”,填写手机号码进行注册,注册后跳到后台页面可以看到,今天还能收到提醒100条信息,基础上够用的。

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

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

4.2 喵提醒代码测试

喵提醒的测试代码,放在miaotixing_test.py文件中,代码相对比较简单。

其中主要替换的是id,即需要填写的个人喵码(需要修改成自己的)。

另一个是text,即发送告警的信息,这里将前面七牛云获取到的网站填写上去。

在Pycharm软件中运行后,在喵提醒中就可以看到告警的信息,点击后,就可以看到告警的图片了。

5.PC代码整合:人体检测+七牛云+喵提醒

前面使用了Yolov5实时检测、七牛云服务器上传效果图片、喵提醒三个部分,单独的部分我们都会了,再试一下把三者整合在一起,看一下整体的效果。

为了便于大家学习,这里还是整合成两个代码,一个是相对比较简单的,对于图片进行检测操作。另一个是对于视频进行检测提醒操作。

5.1 图片检测告警操作

图片检测告警的脚本在detect_image_qiniu_miaotixing.py文件中,其中添加了对于人体检测的判断,即图片中的person=1,当图片中检测到人体时,自动保存检测到的图片,并将图片发送到七牛云,并通过喵提醒发送到手机上。

5.2 视频检测告警操作

视频检测告警的方式和图片类似,只不过读取的是视频信息,视频检测告警的脚本在detect_video_qiniu_miaotixing.py,运行后可以得到视频中告警的图片。

6.Android部署:AidLux平台软件部署

前面是通过PC端电脑实现业务逻辑的整个流程,但是在此项目实际使用的时候并不是在PC端进行的项目部署,而是运行在手机端,或者边缘设备上。

常规的方式,应用在手机Android时,需要将PC上编写的代码,封装成Android SO库(C++),经过测试后,封装JNI调用SO库,最终在Android上使用Java调用JNI,最终再进行测试发布。

这就需要一系列的工作人员参与,比如C++、Java、Python的工程师。

但是大多数算法人员可能会用Python更多一些,比如上面编写的整套算法,怎么快速落地成一个Android产品呢?

在此过程中,AidLux平台就发挥了很大的价值(https://aidlux.com/),使用AidLux可以将PC端编写的Python代码,直接迁移到AidLux平台测试发布,过程中只需要编写Python代码即可,节省了C++、Java人员的工作量。

这里也手把手带着大家实际使用一下,非常简单方便。

6.1 下载安装Aidlux软件

AidLux软件使用非常方便,可以直接安装在手机、PAD、ARM开发板等边缘端设备上。而且使用Aidlux开发的过程中,它既支持在边缘设备的本机开发,也支持通过Web浏览器访问边缘端桌面进行开发。

在本文中,我们采用手机边缘端和Web端两种方法结合的方式进行开发。

(1)下载AidLux软件

首先在安卓手机上下载一个AidLux软件,以华为手机为例,可以直接在华为手机的应用商城中搜索“AidLux”,即可安装下载,如果有其他品牌的手机,在相关的应用商城中,都可以下载到相应的AidLux软件。

因为软件中包含了整体的系统应用,所以安装所需空间比较大一些。

(2)将手机的wifi网络和电脑的网络连接到一起,打开安装好的手机上的AidLux软件,点击第一排第二个Cloud_ip。

可以看到,手机界面上会跳出可以在电脑上登录的IP网址。在电脑的浏览器上,随便输入一个IP,即可将手机的系统投影到电脑上,任何操作和代码编写都是完全数据共通的,这样我们就可以将PC端的操作,直接应用到AidLux的App中了。

(3)输入IP后,在电脑端的浏览器中,可以跳出AidLux的登录页面,默认登录密码是“aidlux”。

需要注意的是,使用AidLuxPC端的时候,手机的AidLux软件也要相应的打开,保持联通状态。

其中也会跳出AidLux的操作说明,大家也可以看一下。

6.2 AidLux边缘侧使用案例

当然我们也可以直接看一下AidLux内置的很多AI方面的案例,点击右下角的examples应用,里面内置了基础的多种AI应用。

此外,在官网的案例中,还有近百种应用。我们先来尝试手机上的一些AI应用。

可以尝试一些人脸关键点的应用,点击PC端中的应用。

可以看到跳出的应用的代码,大致浏览一下,和我们的Python代码基本都是一样的,不过有的同学也会发现,多了一些不常见的库,比如cvs、aidlite_gpu,这些都是AidLux内部优化的函数,可以极大的提升手机芯片的算力使用率,在后面第七章中,也会讲解。

点击运行的小图标,选择“Run Now”。

等待几秒钟,手机端就可以跳出人脸关键点的应用。

使用手机端的页面,就可以直接测试人脸关键点的应用了,非常简单方便。

实时检测的效果,手机端和电脑端都可以实时同步,手机端需要关闭的话,点击左上角的红色圆圈即可。

上面主要采用的是Aidcode运行代码的方式,也可以在命令行中直接运行。

当然在examples中,还有很多的AI应用可以尝试,还是蛮有意思的。

7.Android部署:Yolov5在Aidlux中优化加速

在第六章节中,我们看到使用了csv和aidlite_gpu的库文件,那么为什么要用这些呢?

主要有两个原因:

(1)模型框架统一:PC端训练的框架有很多种,比如Tensorflow、Pytorch等,但是如果部署到安卓端,需要不同的适配,所以AidLux中推出了基于Python的Aidlite API,对于各类AI框架的API进行了封装,便于使用。

因为AI框架也有很多,为了便于使用,平台端集成了十多种主流AI框架,比如TensorFlow、PyTorch、Caffe、MXNet、MNN、NCNN、MindSpore、PaddlePaddle、TNN、OpenCV,开箱可用。

(2)算力加速:大家也都知道,如果采用CPU跑AI项目的话,速度很慢,因此肯定要采用GPU算力,如果将前面的代码直接移植的话,主要跑的是CPU,检测速度比较慢。

当然我们手机当中也有芯片,所以AidLux对于Android手机,实现了系统级智能加速,通过对于Python中的一些代码改造,即可调用推理加速的能力。

我们直接对于5.2中提到的视频检测告警的代码进行一步步操作,查看实现的效果。

Yolov5在AidLux加速的代码,这里放在yolov5-master的aidlux文件夹中。

7.1 上传代码到AidLux

我们首先打开手机版的AidLux,并投影到电脑网页上。然后第一步先将Yolov5的所有代码,上传到AidLux的平台里面。

点击电脑端页面菜单栏的第一个,文件浏览器,打开文件管理页面。

找到home文件夹,并双击进入此文件夹。

点击右上角往上的箭头“upload”,再选择Folder,将前面Yolov5的文件夹上传到home文件夹内。

点击选择上传。

上传好后,在Yolov5的AidLux文件夹中,可以看到修改过的代码,主要对于yolov5的优化加速,以及七牛云、喵提醒的整合。

其中包含了三个文件,yolov5.py是主函数文件,utils.py是配置文件,yolov5s.tflite是模型转换后的文件,后面7.4节中也会带着大家模型转换操作一遍。

7.2 安装相应的依赖库

点击yolov5s.py文件后,我们可以看到其中包含AidLux的库文件,还有七牛云的一些库文件。因为七牛云的代码是新整合进来的,所以我们还需要下载一下所依赖的七牛云的库文件。

在桌面的空白栏,右击选择打开终端。

在代码输入部分,输入 pip3 install qiniu -i https://pypi.tuna.tsinghua.edu.cn/simple,即可快速下载成功。

再输入python3,输入 import qiniu,没有报错,说明下载完成。

7.3 代码查看对比

我们再来按照aidlux平台的优化加速代码,重新看下整合过的yolov5代码。

七牛云的库文件,还有七牛云的一些配置信息,上传七牛云的函数,在前面第5章的时候,我们已经都了解了。

和PC端的Yolov5不同的地方在于,加载模型,载入模型,以及图片推理时的地方。

那么如果我们自己训练的模型,如何在aidlux进行转换部署呢?

7.4 自有模型移植部署

我们再以一个训练好的pt模型为例,演示一下整体的检测流程。

(1)pt模型转换

因为aidlux里面用的是tensorflow框架的tflite模型,所以我们先将训练好的pt模型转换成tflite模型。

先在PC端电脑上,打开yolov5的代码,找到export.py,主要修改两个地方。

第一个是修改模型的路径,即weights的路径,修改export.py文件最下面的parse_opt配置函数。

因为yolov5的模型,放在models文件夹里面,所以将detault修改成“models/yolov5s.pt”。

第二个是修改模型转换成的格式,将include的default修改成“tflite”。

代码运行转换后,在models文件夹里面,可以看到转换后的yolov5s-fp16.tflite模型。

当然,在运行过程中,如果有提示缺少一些库文件的报错,可以自行安装一下。

接触过AI项目的同学也知道,模型权重的数值有float32、float16、int8,从float32->in8,模型精度略有下降的同时,可以带来推理速度的几倍提升。

这里主要采用的是中间float16的形式,如果在后面手机端推理,感觉速度比较慢,想加快模型推理速度的话,可以转换成int8的格式。

(2)查看模型参数

使用netron查看转换后的tflite模型的信息,可以直接登录netron的在线网站版本https://netron.app/。

选择open model,打开刚刚导出的yolov5s-fp16.tflite模型。

网页的滚动条一直拉到最下面,点击最后的一个模块,可以看到右面的弹窗,会跳出输入信息[1,640,640,3]和输出信息[1,25200,85]。

(3)修改代码中的信息

将导出的yolov5s-fp16.tflite,放到AidLux文件夹下面。

打开yolov5.py文件,主要修改模型的路径model_path,和输入输出信息。

yolov5文件中的pt模型是CoCo数据集训练出的模型,主要有80个类别,因此out_shape中有一个85,即1(前景背景概率)+4(检测框坐标信息)+80(类别信息)。

此外输入是640640大小,最后的三个特征图输出则是8080,4040,2020,如果大家调整类别和输入大小时,也要想要的修改,需要注意。

(4)AidLux上传代码

打开AidLux的页面,打开文件浏览器,进入yolov5-master的aidlux文件夹中,将修改后的yolov5.py和yolov5s-fp16.tflite进行替换。

7.5 运行代码查看效果

我们再来看一下修改后的代码的运行效果,不过这里最好直接采用手机端的aidlux来进行启动。

进入aidlux界面,找到文件浏览器,进入home/yolov5-master文件夹中,打开yolov5.py文件。

点击右上角的图标,选择“Build”。

进入代码的运行页面,选择左上角的坐标,点击“Run Now”。

即可启动整套代码,电脑端也能实时看到检测的画面。

当实际使用中,检测到入侵的人员时,手机上的喵提醒,即可收到提示的报警信息。

PS:如果大家打开这个二url链接,一直是同一张图片,说明微信中存在缓存,可以将此url链接复制,在手机任意一个浏览器中,以无痕模式打开即可。

最终效果视频如下:

以上就是利用手机制作家庭安防告警系统的完整应用。

完整的代码链接:https://pan.baidu.com/s/1QvCEvwNEd1GCayX2g7PdfQ

提取码:8ray

8.延伸产品:家庭AI安防系统

8.1 AI相关产品应用

到了这里,按照一步步操作,我们可以实现一整套的安防监测产品了。

大家外出时,晚上游玩时,或者家里面店铺看守等,都可以使用这套安防监测产品,在家里放置一个手机监视即可。

当然除了安防监测,也可以发挥想象力,做很多其他的应用。

比如婴幼儿看护,在手机上做好应用后,使用手机支架,夹放在婴幼儿的围挡处,当画面中儿童不见时,自动告警提醒查看。

AI行业就有一家公司,专门做了一款这种婴幼儿防护产品,公司估值2个多亿,销售量也非常不错。

再比如老人摔倒看护,可以将手机放在家中,当家里出现老人摔倒时,自动告警提示,及时救治。

所以,生活中的应用还有很多,家庭场景,工作场景,大家都可以发挥自己的想象力。

8.2 边缘设备应用

前面讲的主要都是手机端的应用,当然在AI应用场景中,我们还可以不用手机,类似于下面的图片,利用人体姿态驱动动画人,主要采用边缘设备和摄像头联动的方式。

这里面用到的边缘计算设备,也是AidLux的产品,通过AidLux还可以利用旧手机制作边缘设备,后面有机会也可以和大家分享。


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

为了进一步实现开发者的AI开发、落地价值,我们正在持续开展AidLux AI 应用案例悬赏征集活动

开发者可以提报自己的案例作品,或者在AidLux提供的选题库里进行选择加以实现,单个AI应用案例悬赏奖金高达2000元,欢迎大家积极报名参与!