最近趁着周末的时间在做一个口罩检测的项目,虽说之前已经做过类似的竞赛了,为什么又要做呢?因为有实际项目落地的需求,还没有真实采集场景的数据进来,我现在能做的就是汇聚网络多源头获取到的数据集来构建一个通用型的模型,后期真实场景数据进来后,以当前通用型模型为基础进行迁移训练会更容易效率也会更高一点。

还是老样子,先看效果图:

先来整体看下:

这里模型选择的依旧是YOLO系列,在我的目标检测专栏里面已经有很多YOLO模型实战的介绍了感兴趣的话可以看下,这里我没有选择最新的v7模型,而是选择使用我之前使用的比较多的mobilenet+yolov4组合的模型。

接下来看下数据集情况,我从网上多个渠道采集标注一共得到2.6W+的数据,如下:

为了能够便捷方便的处理和生成数据集,我这里开发了数据集构建模块,如下:

train_test_sets = ["train", "test"]
classes = ["mask","nomask"]
#ID随机划分
xmlfilepath = "./dataset/xmls/"
saveBasePath = "./dataset/"
train_percent = 0.8
test_percent = 1 - train_percent
temp_xml = os.listdir(xmlfilepath)
total_xml = []
for xml in temp_xml:if xml.endswith(".xml"):total_xml.append(xml)
num = len(total_xml)
print("num: ", num)
train_num = int(num * train_percent)
test_num = num - train_num
train=random.sample(total_xml,train_num)
test=list(set(total_xml)-set(train))
print('TrainNum: ', train_num)
print('TestNum: ', test_num)
with open(saveBasePath+'train.txt','w') as f:for one_xml in total_xml:one_name=one_xml[:-4]f.write(one_name.strip()+'\n')
with open(saveBasePath+'test.txt','w') as f:for one_xml in test:one_name=one_xml[:-4]f.write(one_name.strip()+'\n')#训练集-测试集 txt 文件生成
def convert_annotation(image_id, list_file):in_file = open("dataset/xmls/%s.xml" % (image_id), encoding="utf-8")tree = ET.parse(in_file)root = tree.getroot()for obj in root.iter("object"):difficult = 0if obj.find("difficult") != None:difficult = obj.find("difficult").textcls = obj.find("name").textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find("bndbox")b = (int(xmlbox.find("xmin").text),int(xmlbox.find("ymin").text),int(xmlbox.find("xmax").text),int(xmlbox.find("ymax").text),)list_file.write(" " + ",".join([str(a) for a in b]) + "," + str(cls_id))prefix = ""
for image_set in train_test_sets:image_ids = open("dataset/%s.txt" % (image_set)).read().strip().split()list_file = open("%s.txt" % (image_set), "w")for image_id in image_ids:one_line_prefix = prefix + "dataset/JPEGImages/" + image_id + ".jpg"list_file.write(one_line_prefix)convert_annotation(image_id, list_file)list_file.write("\n")list_file.close()

可以很方便地一键生成数据集文件。

终端执行完成后即可在同级目录下自动创建train.txt和test.txt文件。

train.txt如下:

test.txt如下:

启动训练日志输出如下:

可以看到:训练所需的时间很漫长。

训练结束后会计算map指标,如下所示:

从map指标上面直观来看效果还是不错的。

训练过程可视化如下所示:

为了方便使用模型,这里我开发了界面用于上传图片、调用模型、识别推理和结果呈现,如下:

上传图片:

调用模型检测推理:

助力防疫,基于安防摄像头的人脸佩戴口罩检测相关推荐

  1. onvif python 音视频_python3控制基于onvif的安防摄像头

    参考链接: 一.python3控制基于onvif的安防摄像头 使用的是tp-link安防摄像头 安装 在Python3中,是安装pip install onvif-zeep实现控制 二.实现 已经保证 ...

  2. 安防摄像头有这么多种类,如何正确选择?

    当前,市面上有各种各样的安防摄像头可供我们选择,我该选择哪种呢?从哪几个方面来考虑? 模拟摄像头还是数字摄像头? 首先要考虑的是,你是否愿意配置路由器或WIFI,也就是说,处理网络相关的事情,如果愿意 ...

  3. WebRTC 非常适用于智能家庭安防摄像头

    WebRTC 是一个开源的IETF/W3C 标准,在浏览器中添加了很多成熟的媒体引擎(音视频编解码器,抖动缓冲(jitter buffers),回声消除(Echo cancellation),流同步( ...

  4. 安防摄像头互联网直播方案LiveGBS设计文档

    LiveGBS设计文档 一.介绍 28181协议全称为GB/T28181<安全防范视频监控联网系统信息传输.交换.控制技术要求>,是由公安部科技信息化局提出,由全国安全防范报警系统标准化技 ...

  5. 市场上的安防摄像头或安防系统多少钱?安防摄像头价格指南

    市场上的安防摄像头或安防系统多少钱?你认为高质量的安防摄像头系统应该是什么价格?当你在思考这个问题时,你需要问自己心中的预算是多少,花费这个价钱是否值得. 如果你已经购买安防摄像头和设备有一段时间了, ...

  6. 如何将安防摄像头接入互联网直播服务器

    转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingos 项目官网:http://pingos.io ...

  7. 2017安防摄像头技术发展趋势分析

    众多前沿领域的应用将越来越依赖深度摄像头,就好像VR.机器人.安防等为了得到更精准的体验,这也是为什么国际巨头都在布局于此的原因.深度摄像头(又称3D传感器)从视觉数据获取的角度提升机器感知能力.由于 ...

  8. 传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放

    传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放 1.问题场景 2.WEBRTC延时对比 3.LiveNVR支持WEBRTC输出 4.RTSP/HLS/FLV/RT ...

  9. 通过GB28181实现对安防摄像头的直播回放控制

    介绍 目前在安防行业中,GB28181协议越来越被重视,也越来越通用,越来越稳定.各个安防设备厂家已经基本都支持GB28181协议,通过GB28181协议可以实现获取设备的视频视频.录像数据.云台控制 ...

最新文章

  1. Spring 面试多频 18问
  2. 论文排版之公式居中、编号右对齐
  3. Android Stadio调试gradle 插件 || Android Stadio 远程调试 || Anroid APT调试
  4. 写一副对子_挥毫泼墨写春联 西安街头年味分外浓
  5. Oracle里schema理解
  6. Spring事务嵌套引发的问题--Transaction rolled back because it has been marked as rollback-only...
  7. 关于如何在Python中使用静态、类或抽象方法的权威指南
  8. C#LeetCode刷题-并查集
  9. java antd实现登录,AntDesign(React)学习-4 登录页面提交数据简单实现
  10. tomcat,Jboss,weblogic区别与比较
  11. 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建
  12. java ear和war_JAR、WAR、EAR的使用和区别
  13. ServletResponse的常用方法:getWriter,setContentType
  14. mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  15. 联想服务器安装2019系统,联想支持的Win10 2019年10月更新(1909版本)的机型
  16. 微信小程序录制视频功能实现
  17. tl494cn逆变器电路图_TL494CN逆变器
  18. 大数据可以考哪些证书?
  19. matlab新建数据字典及如何导入
  20. 时序数据库介绍和使用

热门文章

  1. 要熟练掌握的七个人生工具
  2. iproute2 ipv6地址设置源码分析
  3. bootstrap日历控件
  4. [Unity教程]Unity官方教程资源一览及其说明
  5. html魔方游戏,魔方游戏网页版
  6. Eclipse卡顿优化
  7. 比肩Salesforce 销售易即将发布旗舰版移动CRM及PaaS平台
  8. 【销售易】自定义按钮
  9. PHP对接农行快e通授权登录
  10. jq动态绑定点击事件