随着人工智能越来越普及,各行各业都在挖掘其运用场景。在业余时间,我也研究了一下工地安全帽的识别与检测,因为在工地,安全帽正确佩戴还是非常重要的。
在图像识别领域,开源的Yolo5 深度学习框架得到了非常多的运用,本篇文章也是基于开源Yolo5 框架,自己训练了一个工地安全帽佩戴检测的算法。
性能
图片数据集有2w+张图,采用精灵标注助手进行标注,目前只训练了两个类别,分别是: 头、和 戴安全帽。 预测速度:在 RTX3060笔记本上,使用CUDA GPU进行解算,大概是10ms,基本能跑到 100+ Fps,非常的流畅。也训练了个纯CPU运算版本,在 J1900 机器上,预测速度大概150ms ,7帧左右,看起来就很卡了。不过,考虑到接入的IP摄像头,提供的RTPS视频流也才只有 25 Fps,这个速度也算能接受,J1900 都能跑,还要啥自行车呢?
效果如下图:
Yolo5 + Qt 运用
这个项目难点在如何将Yolo5 目标检测移植到Qt框架里去,既要满足在Qt界面里RTSP视频流的实时显示,还要对实时画面进行识别,并进行OSD绘制。我采用的方法是: FFmpeg + Qt 实现视频流的捕获与解码,Yolo5 检测通过Qt进行调用。
首先,下载并编译FFmpeg源码,生成库文件,针对目标平台生成对应的库文件,这里一定要生成静态库文件!无论是Windows平台还是Linux平台。当然,也可以使用OpenCV 对视频流进行捕获与处理,看个人喜好了。
然后安装Yolo5 环境,并配置好所有依赖。这里面比较复杂,若是带CUDA独立显卡的,还需配置独显CUDA相关,若是纯用CPU解算,那可以省略这部分独显的配置。配置成功的标志是:在Windows Anaconda-shell窗口,或者在Linux-terminal窗口能够准确运行此目标检测模型。
最后Qt的集成,Qt调用FFmpeg 接口,捕获RTSP视频流并解码,与此同时,调用将图片数据帧送给Yolo5进行图片识别检测,返回四个坐标值,以及置信度(0~1.0),在绘制Qt界面时,以OSD方式将四个坐标值连接成一个矩形框,并将置信度在界面呈现。需要注意的是:图片帧数据必须以元组的形式传入python。
以上就是我这个项目实现原理,看似简单,短短三段话介绍完,但是实现起来却踩了非常多的坑,遇到了很多的困难,目前这个项目不开源,Yolo5安全帽佩戴检测也不打算开源,若有兴趣可以私聊我一起讨论学习,若有需求,欢迎外包给我,哈哈哈哈!
版权属于:编码书生
本文链接:https://codess.cc/archives/498.html
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
除特别注明,您可以自由的转载和修改,但请务必注明文章来源且不可用于商业目的。