基于Aidlux平台开发人流量统计

基于Aidlux平台开发人流量统计

作者本课程由江大白老师全程教学,经过两周的学习,基本掌握了从PC端到android端的AI案例开发与测试部署流程。

背景

AIdlux主打的是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIOT应用开发平 台。用比较简单的方式理解,我们平时编写训练模型,测试模型的时候,常用的是 Linux/window系统。而实际应用到现场的时候,通常会以几种形态:GPU服务器、嵌入式设 备(比如Android手机、人脸识别闸机等)、边缘设备。GPU服务器我们好理解,而Android 嵌入式设备的底层芯片,通常是ARM架构。而Linux底层也是ARM架构,并且Android又是 基于Linux内核开发的操作系统,两者可以共享Linux内核。因此就产生了从底层开发一套应 用系统的方式,在此基础上同时带来原生Android和原生Linux使用体验。

一.AI项目开发及aidlux开发

需求->数据采集->AI模型训练->AI模型部署->AI系统开发->落地部署

在模型移植、视频结构化部分,目前市面上基本都是采用 C++的方式。不过这里主要采用一种更便捷的方式,Aidlux平台,即模型移植也采用 Python的方式。且大家可以基于一台安卓手机,也可以基于一台AidBox边缘设备都可以进行 开发,并且无缝衔接。

二.AI案例作业实现

人体检测+人体追踪+业务功能

人体检测:yolov5

人体追踪:yolov5+bytetrack

业务功能:人流量统计,通过喵提醒将人流量发送至手机

最终效果:
基于Aidlux平台开发人流量统计_第1张图片

1.通过AutoDL训练模型

训练过程不细说,有兴趣可以自行了解。

将best.pt模型下载下来,修改成yolov5n_best.pt。并放到资料包代码⽂件夹中。
基于Aidlux平台开发人流量统计_第2张图片

2.Aidlux端模型推理测试

我们主要是在边缘端Aidlux上进⾏使⽤,在前⾯我们也知道,Aidlux主要针对推理 部分,在底层进⾏了加速优化。因此想要将pt模型移植到Aidlux上使⽤,还要进⾏转换模型,修改推理代 码的操作。

(1)pt模型转化为tflite模型

模型转换的⽂件是export.py⽂件,在Aidlux中主要运⾏的是tflite的⽅式,因此主要修改其中的三个地 ⽅。

需要安装一些库:pip3 install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple

安装好再运⾏export.py⽂件,在models⽂件夹下⾯,可以看到⽣成的yolov5n-fp16.tflite⽂件。

3.目标跟踪

1)带你⼊⻔多⽬标跟踪(⼀)领域概述

7https://zhuanlan.zhihu.com/p/62827974

2)带你⼊⻔多⽬标跟踪(⼆)SORT&DeepSORT

https://zhuanlan.zhihu.com/p/62858357

3)带你⼊⻔多⽬标跟踪(三)匈⽛利算法&KM算法

https://zhuanlan.zhihu.com/p/62981901

4)带你⼊⻔多⽬标跟踪(四)外观模型 Appearance Model

https://zhuanlan.zhihu.com/p/63189011

5)ByteTrack: Multi-Object Tracking by Associating Every Detection Box阅读笔记

https://zhuanlan.zhihu.com/p/421264325

此外针对Deeposrt和Bytetrack的项⽬使⽤选择,作者老师江⼤⽩老师也有⼀些⼼得参照:

1)不同的⽬标:上⾯说的是对于⼈体的检测,其实在现场项⽬中,会⽤到各种⽬标的追踪,⽐如⻋辆 追踪、⻜机追踪等。当有⽬标的reid模型的时候,可以选择deepsort,当没有的时候,可以选择 bytetrack,因为当⽬标reid特征权重不好的时候,对于多⽬标加权匹配则是个⼲扰项。

2)遮挡的⽬标:⼈员交错,遮挡严重的时候,多⽬标追踪的准确性是个业内的难题。 因此在摄像头⻆度⻆度选择的时候,尽量选择从上往下的视⻆,可以减少遮挡的情况,提升多⽬标追踪 的准确性。

注意:这里需要安装cython_box

先安装cython:pip install cython -i https://pypi.tuna.tsinghua.edu.cn/simple

再安装cython_bbox:pip install cython_bbox -i https://pypi.tuna.tsinghua.edu.cn/simple

⽬标追踪的代码,追踪并绘制每个⽬标的track_id信息
基于Aidlux平台开发人流量统计_第3张图片

当然,⼤家想更加深⼊了解⽬标追踪,并且针对不同场景进⾏调节的话,可以查看修改track⽂件byte_tracker.py的BYTETracker函数。

4.人流统计功能实现

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

绘制统计⼈流的线段,当然绘制也很简单,主要采⽤cv2.line的⽅式。将yolov5_bytetrack.py进⾏修改,变成yolov5_overstep.py。并将绘制区域的功能,写到之前检测追踪代 码的后⾯。基于Aidlux平台开发人流量统计_第4张图片

(2)⼈体检测监测点调整

在实际业务场景中,通常我们判断⼈体越界的点,主要⽤的是⼈体脚部的点。⽽由于不同的⽬标检测算 法,最后的后处理不同,得到的检测框的信息可能是多样化的。 ⽐如在本次中⽤的yolov5算法,会得到检测框的四个点信息,[左上⻆点x,左上⻆点y,宽w,⾼ h]。所以我们需要通过代码,转换成⼈体下⽅的点,即[左上⻆点x+1/2*宽w,左上⻆点y+⾼h]。转换的 ⽅式也⾮常简单,即下⽅的这⼀⾏代码。
基于Aidlux平台开发人流量统计_第5张图片

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

当⼈体在线段的下⽅时,⼈体状态是-1。当⼈体在线段的上⽅时,⼈体状态是1。我们这⾥主要统计从-1,到1区域的⼈流的数量。
基于Aidlux平台开发人流量统计_第6张图片

基于Aidlux平台开发人流量统计_第7张图片

实现代码如下:

基于Aidlux平台开发人流量统计_第8张图片

(4)人流统计分析判断

那么当⼈体的状态,从-1变化到1的时候,就统计成为⼈员越线了。
基于Aidlux平台开发人流量统计_第9张图片

并在图⽚的左上⽅,统计⼈流计数的实时效果。

(5)喵提醒发送

当整个视频跑完后,就可以得到⼈流统计整体的数据了。为了及时知道⼈流的信息状态,我们也可以将 最后的结果,以喵提醒的⽅式进⾏发送。这部分的代码,可以放在最前⾯的图⽚采集中。

基于Aidlux平台开发人流量统计_第10张图片

开头便是最终效果。。。

你可能感兴趣的:(python,计算机视觉,目标跟踪,目标检测)