摘要:本案例将在ModelBox中使用YOLO v3模型,实现一个简单的口罩检测应用
本文分享自华为云社区《ModelBox开发体验Day05开发案例-使用YOLOv3做口罩检测》,作者: 孙小北。
- 本案例将使用YOLO v3模型,实现一个简单的口罩检测应用
- 代码:https://github.com/sunxiaobei/modelbox_gallery
- 代码tag:v1.5 mask_det_yolo3,v1.5.1 mask_det_yolo3_camera
开发准备
- 开发环境安装和部署,前面环境已完成
- 模型训练,ModelArts训练模型
- 模型转换,代码模型已完成转换
应用开发
打开VS Code,连接到ModelBox sdk所在目录或者远程开发板,开始进行口罩检测应用开发。
(1)创建工程
使用create.py创建mask_det_yolo3工程, 将会创建出一个空的ModelBox样例工程。
(2)创建推理功能单元
AI应用的核心是模型推理部分,我们用如下命令创建推理功能单元,该模块将会创建在工程目录的model文件夹下:
将资源包中model/mask_infer文件夹中的模型和配置文件拷贝到口罩检测工程的model/mask_infer目录下。其中yolo3_resnet18_mask_det_288x512-rknpu2.rknn是转换好的rknn模型,mask_infer.toml是该模型的ModelBox功能单元配置文件,其内容如下:
可以看到该模型有3个输出节点,即YOLO v3模型输出的3个feature map,需要从中解码出检测框。
(3)创建后处理功能单元
后处理功能单元负责从模型推理结果中解码出检测框,我们用如下命令创建该功能单元,其将会创建在工程目录的etc/flowunit文件夹下:
将common资源包中etc/flowunit/yolo3_post文件夹中的代码和配置文件拷贝到口罩检测工程的同名目录下,解码过程的核心逻辑在yolo3_utils.py文件中,可以查阅YOLO v3模型细节阅读代码。
(4)创建画图功能单元
得到检测框后可以画在原图上进行输出展示,我们用如下命令创建画图功能单元:
将common资源包中etc/flowunit/draw_mask_bbox文件夹中的代码和配置文件拷贝到口罩检测工程的同名目录下,画图的核心逻辑在draw_mask_bbox.py文件的draw_mask_info函数中:
针对每个人,该模型会尝试检测出head(头肩部)、face和mask三个检测框。如果face检测框与mask检测框的重合度大于某个阈值,就判为佩戴口罩;否则,就判为没有佩戴口罩;如果没有检测到face检测框,就会显示Unknown,表示未知。
(5)修改流程图
模型推理和配套的功能单元准备好后,我们就可以串联出流程图进行测试了,口罩检测工程默认在graph目录下生成了mask_det_yolo3.toml,我们参考资源包中的graph/mask_det_yolo3.toml将其修改为:
该流程图对于某个视频流,经过视频解码、图像缩放、口罩检测推理、检测框后处理、画图等一系列操作后,将结果保存下来。
然后,参考common资源包中mock_task.toml,将口罩检测工程的任务配置文件bin/mock_task.toml中输入输出部分修改为:
将common资源包中的data/mask_test.mp4测试视频拷贝到口罩检测工程的data目录下,该流程图使用这一视频进行口罩检测,检测结果绘制后保存为hilens_data_dir/mask_test_result.mp4文件。
(6)运行应用
在mask_det_yolo3工程路径下执行build_project.sh进行工程构建:
执行bin/main.sh运行应用(如果运行报错请切换到root账号再运行,本应用需要事先使用pip安装好OpenCV和NumPy),运行结束后在hilens_data_dir目录下生成了mask_test_result.mp4文件,可以下载到PC端查看。
(7)实时摄像头
运行测试
小结
本次案例实践口罩识别,通过本次案例的实践对于开发板的使用有了进一步了解,同时也体会到了这个开发板的便捷开发模式,非常值得推荐,希望后续可以体验更多案例,真正落地实践。
参考文献:
- https://developer.huaweicloud.com/develop/aigallery/article/detail?id=0163b46b-34fa-468d-b243-2ef067170d4a
- https://modelbox-ai.com/modelbox-book/
- https://developer.huaweicloud.com/develop/aigallery/article/detail?id=adc021cb-1c12-49a1-8a0b-f56ce6fb3b25