基于AidLux平台的医院进出口人流量统计案例开发与测试
AIdlux系统是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIOT应用开发平台。实际应用到现场的时候,通常会以几种形态:GPU服务器、嵌入式设 备(比如Android手机、人脸识别闸机等)、边缘设备。GPU服务器等,而Android 嵌入式设备的底层芯片,通常是ARM架构。而Linux底层也是ARM架构,并且Android又是 基于Linux内核开发的操作系统,两者可以共享Linux内核。因此就产生了从底层开发一套应用系统的方式,在此基础上同时带来原生Android和原生Linux使用体验。所以在基于Linux系统和ARM架构上,我们可以在安卓手机上直接下载Aidlux软件,使用安卓手机充当边缘设备,进行代码的调试与案例的实现。
图1
安卓手机打开应用市场搜索AidLux软件并下载,这里需要满足以下的条件:
●Android 版本≥6.0.1(目前只有安卓系统兼容,鸿蒙3.0系统设置需要在查看,大家有任何问题都可以在社区留言的,会有工程师来帮助解决。)
●cpu 支持arm64-v8a架构
●手机存储空间充足
●1.0以上版本需要安装空间>600M
●初始化空间>1.7G
下载完成后-->使用自己的手机号进行注册(图2)-->系统开始初始化-->进入登录界面-->使用cloud_ip中的网址进行映射到电脑网页(注意:安卓手机和电脑要在同一个局域网下,并且注意网站别输错,比如,这里的http后没有s,如果不行的话,换成手机热点连接。)-->输入网站进入电脑端(初始密码为aidlux)
图2手机端注册
图3手机端页面
图4电脑端
VScode 在官网点击download进行下载,官网下载可能速度会很慢,解决办法看这篇文章,下载完成后,按照提示步骤一直进行完成安装就可以了。
图5 VScode安装
1.安装本地版的python与opencv,点击extensions,进入搜索栏输入python,点击install,等待下载完成即可。
2.安装opencv,在深度学习中,opencv是图像界面的非常重要的软件,我们这里打开软件左上方菜单栏的Terminal终端,点击New Terminal ,然后输入pip install opencv-python -i 进行包的下载。
3.测试
创建一个python文件video_pc.py,在同一个文件夹下放入检测文件,我这里是jiankong.mp4,之后点击RUN->RUN without debugging进行运行,运行正常,页面会出现你的监控文件的画面。
在第一节中我们完成了基本的手机端与PC端的环境的应用,接下来我们就是使用PC端作为主要的窗口来对Aidlux进行远程的代码编写与调试。
之前已经在本地下载了Remote-SSH,接下来我们点击Remote Explorer,如图7,点击左下角的“Open a Remote Window”(图8),再选择“Open SSH Configuration file”(图9)
图7
图8
图9
针对跳出的弹窗,再选择第一个config(图10)。
图10
下面对config进行配置
保存,之后在左侧框里会生成一个SSH服务器,鼠标放在上面,他的右侧会出现一个文件夹一样的图标,点击它,然后会弹出框,选择Linux,点击选择“Continue”,再输入密码,aidlux,回车。当左下角出现SSH AidLux是表示与手机端连接成功。
图11
图12
到这里,电脑端VScode与手机的Aidlux已经连接好了,下面就是开始执行并实现我们的案例了。
医院出入口的人流量统计可以分为⼈体检测+⼈体追踪+人流统计三个方面进行串联实现。
在本次的案例中,我们使用的是旷视的Crowdhuamn数据集,官网去下载,Crowdhuman数据集,总共包含三个子数据集:15000张的训练数据集,4370张的验证数据集,5000张的测试数据集。其中训练集和验证集都是有标注信息的,测试集没有标注信息。
图13
1.数据集格式的转换:
在本次的案例中,我们选用了4370张的val数据集来做为训练集,我们知道在不同的代码中进行检测是需要将数据集的格式转换为所选训练模型对应的格式,这里Crowhuman数据集的val数据集的标注为annotation_val.odgt,接下来我们需要进行数据集格式的转换(我们这里先将其转换为VOC格式,在将其转换为txt格式),这里,为了节约时间,我们可以直接关注“”AidLux“”公众号,回复lesson3,获得了lesson3资料包的连接之后进入百度网盘进行下载。下载后如图14
图14
在VScode中点击"File",然后点击“open Folder”,点击下载好的lesson3进入lesson3_codes文件夹,在进入data_prepare_code打开data_code.py文件。
之后点击运行,生成一系列的xml文件
图15
在lesson3_data下新建一个文件夹train_data,,在其中再新建一个train和test文件夹,将之前的数据集中的val验证集和Annotations,分别复制到train_data下的train文件夹中分别命名为JPEGImages和Annotations
图16
打开data_prepare_code下的train_data_split.py,我们分阶段运行代码,会在train_data中分别保存了train文件以及test文件,train_txt以及test_txt。如图17
图17
将train_data数据集和yolov5_code包进行打包发送到服务器的云端,对其一些文件的配置进行修改
1.打开yolov5_code包中的person.yaml
2.打开yolov5s.yaml
修改其中的类别数量,因为人体就⼀个类别,修改成1
3.打开train.py,并进行修改(这里放上了需要修改的部分),我们这里使用情轻量级的yolov5s.pt进行训练进行,需要提前去下载,(yolov5s权重 下载)修改数据路径,设置epoch为100
4.输入命令行:python train.py
5.可能会报一些没有库的错,(因为我的已经装好了),可以先输入pip install -r requirements.txt,再运行看看。
实在有的安装包没有的,去清华镜像寻找 ,或者直接在终端输入pip3 install xxx -i 去下载xxx包。
6.运行结束后最优模型权重会放在runs/train/exp/weights/best.pt,将它下载下来,放入VScode的lesson3_code中的models文件夹下
由于在Aidlux中主要运⾏的是tflite的⽅式,所以我们需要将pt转化为tflite,打开lesson3_code中的eport.py
输入命令:pip3 install tensorflow -i ,
下载完成后,执行 python export.py,在models⽂件夹下⾯,可以看到⽣成的best-fp16.tflite⽂件。
按照之前的操作,点击Remote Explore,输入密码,连接SSH,打开网页版的Aidlux->点击左下角第一个文件->点击home->右上角有个向上的箭头为upload->导入桌面上下载好的lesson3_code,将models文件夹下的best-fp16.tflite拖到aidlux文件夹中,修改aidlux中的model路径
点击RUN,会看到手机上会出现人体检测视屏。
图18
目标追踪算法包括单目标追踪和多目标追踪,多目标追踪主要针对的是多个目标的运动轨迹,而单目标追踪主要 针对的某⼀个目标的运动轨迹。目前用的较多的是多目标追踪算法,多目标追踪算法包括(1)sort多目标算法(2)deepsort多目标算法(3)Bytetrack多目标追踪算法。该实例中我们使用Bytetrack多目标追踪算法,会尽量的减少人物之间的遮挡而带来的目标的丢失。
运行RUN
图19
1.越线识别以及计数功能的实现
由于该监控图像是正对着出入口的,我们以检测目标的头部为验证对象,所以我们在选择点的时候需要考虑到摄像机的视角与角度问题。如图18中所示,我们以检测框的上边中心点为越界识别点。
图20
2.喵提醒
这个功能是用于手机微信的提醒。搜索公众号“喵提醒”,使用手机进行注册登录,再点击“提醒”再 新建,之后会有生成一个“喵码”,将其填到下面的id中。
运行后出现如下图两种情况①②,①代表的是治考虑单方向的-1到1的情况,②则考虑到了进出两个方向(-1 到1 1到-1)的情况
①左上角标注人数流量统计结果为23(只考虑了-1到1),并通过微信公众号喵提醒进行提示(图21和图23)。
②左上角标注人数流量统计结果为28(考虑了-1到1,以及1到-1两个方向的情况,满足进出门的要求,更贴合实际),并通过微信公众号喵提醒进行提示(图22和图24)。
图21
图22
图23
图24
通过本次的案例学习,学会了通过手机端的Aidlux平台来尝试AI智能场景的部署,进一步加深了对深度学习以及分布式AIOT开发的了解,在今后的学习中会继续了解与学习这方面的知识。