AI 开发实践:关于停车场中车辆识别与跟踪
本文分享自华为云社区《AI寻车》,作者:杜甫盖房子。
本案例我们使用FairMOT进行车辆检测与跟踪、yolov5进行车牌检测、crnn进行车牌识别,在停车场入口、出口、停车位对车辆进行跟踪与车牌识别,无论停车场路线多复杂,小车在你掌控之中!最终效果如下:
我们使用ModelBox Windows SDK
进行开发,如果还没有安装SDK
,可以参考ModelBox端云协同AI开发套件(Windows)设备注册篇、ModelBox端云协同AI开发套件(Windows)SDK安装篇完成设备注册与SDK
安装。
技能开发
这个应用对应的ModelBox
版本已经做成模板放在华为云 OBS 中,可以用 sdk 中的solution.bat
工具下载,接下来我们给出该应用在ModelBox
中的完整开发过程:
1)下载模板
执行.\solution.bat -l
可看到当前公开的技能模板:
结果中的 vehicle_plate_multi_centernet_yolov5_crnn 即为 AI 寻车应用模板,可使用如下命令下载模板:
solution.bat
工具的参数中,-l
代表list
,即列出当前已有的模板名称;-s
代表solution-name
,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox
核心库的solution
目录下。
2)创建工程
在ModelBox sdk
目录下使用create.bat
创建vehicle_plate
工程:
create.bat
工具的参数中,-t
表示创建事务的类别,包括工程(server)、Python 功能单元(Python)、推理功能单元(infer)等;-n
代表name
,即创建事务的名称;-s
代表solution-name
,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。
workspace
目录下将创建出vehicle_plate
工程,工程内容如下所示:
3)查看流程图
vehicle_plate
工程graph
目录下存放流程图,默认的流程图vehicle_plate.toml
与工程同名,其内容为(以 Windows 版ModelBox
为例):
将流程图可视化:
图示中,灰色部分为预置功能单元,其余颜色为我们实现的功能单元,其中绿色为一般通用功能单元,红色为推理功能单元,蓝色为条件功能单元,黄色为展开归拢功能单元。整个应用逻辑相对复杂一些,视频解码后做图像预处理,接着是车辆检测,模型后处理得到车形框与 128 维车辆 reid 特征,送入跟踪算法进行实时跟踪,经过条件功能单元判断,检测到车辆的图送入展开功能单元,切图进行车牌检测,车牌检测结果归拢后同样要判断是否检测到车牌,检测到车牌的帧再展开并行进行车牌识别,未检测到的则直接绘制车辆信息。而未检测到车辆的帧则直接送入多路拼接功能单元,最终输出。
4)核心逻辑
本应用核心逻辑中的跟踪与区域判断参照客流统计实战营的应用设计,跟踪逻辑在object_tracker
功能单元中,检测与跟踪使用的是 FairMOT 算法,算法介绍可参考论文。
首先查看object_tracker
功能单元中返回的跟踪对象结构:
可以看到,我们返回的跟踪对象包括车型框、车辆检测得分等已有信息以及车牌、车牌得分、车牌框、车牌框得分等包含默认数据的占位信息,方便后续功能单元获取更新。
从流程图中可以看到,object_tracker
后结果送入车辆检测条件功能单元,同样的在流程图中还包含车牌检测条件功能单元,我们当然是希望使用同一个功能单元完成两个判断,所以在条件功能单元condition
中,我们配置了参数key
,默认为key = "bbox"
,即对结构体中的车型框进行判断,具体实现为:
这样的话如果是对车型框进行判断,只需要在流程图中配置key = “plate”
即可。
同样的,图展开功能单元expand_image
也使用了同样的方法,使车辆检测与车牌检测可以共用功能单元:
此外,由于本应用输入为 4 路视频,因此需要在url_cfg
单元中进行 session 级别信息配置:
session 级别的信息在功能单元之间是同步的,这样就可以在后续的功能单元中获取当前输入为哪路输入:
同样的,对于多路输入,我们需要在本地 mock 时在bin/mock_task.toml
文件中进行输入配置:
对于多路输入的感兴趣区域划定,我们使用content_file
配置:
配置文件内容为:
即针对不同输入配置各自的车型车牌感兴趣区域,在后续功能单元中获取配置的参数信息进行处理,如plate_det_post
功能单元:
我们目前对于车型和车牌检测的参数配置是保持一致的,也可以配置为不同参数。
5)三方依赖库
本应用依赖 scipy 等工具包,ModelBox 应用不需要手动安装三方依赖库,只需要配置在dependence\modelbox_requirements.txt
,应用在编译时会自动安装。
6)用启动脚本执行应用
在项目目录下执行.\bin\main.bat
运行应用:
可以看到屏幕出现技能画面:
白线即配置的感兴趣区域,区域外/未过线车辆根据 id 赋色,区域内/已过线车辆的使用灰色框,可在输入输出配置中修改划区域任务类型与坐标点。
7)技能调试
我们 1.5.0 版本SDK
提供了debug
工具,在 VSCode 中打开项目根目录,在创建项目时已经自动生成了调试配置文件:
如果有其他安装包,可以在配置文件中增加PYTHONPATH
参数。
在调试时,可以直接在感兴趣的代码处打断点调试即可:
启动调试后与其他程序调试操作一致:
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/6c36a36d66e39ab2797d4b7e4】。文章转载请联系作者。
评论