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

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

先来整体看下:

这里模型选择的依旧是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. JDK5中的控制台输入
  2. 记录一次frp失效bug
  3. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()
  4. 一个软件公司需要多少前端_制作一个小程序商城需要多少钱?开发小程序公司哪家强?...
  5. 人类首次商业太空行走敲定!马斯克SpaceX宣布新一轮太空旅行计划,美国富豪成回头客...
  6. 【测试】有道云笔记数据导出备份功能体验测试
  7. 调用iOS系统本地相册或摄像头
  8. VTK:网格之TableBasedClipDataSetWithPolyData
  9. leetcode-387-字符串中的第一个唯一字符
  10. 02-24 面向对象--方法重载、隐藏
  11. 深度学习常见概念解析
  12. 使用模板来解决接口继承问题
  13. matlab图像降噪_图像超分:RealSR
  14. python0x80070643_Win10提示Python 0x80070643安装时发生严重错误
  15. 【Siddhi 5】Siddhi 5 源码编译
  16. ehcache 手动刷新缓存_清空DNS缓存的两个小方法
  17. python怎么读取中文文件-Python中使用不同编码读写txt文件详解
  18. IDEA文件编码格式修改为UTF-8
  19. mongodb java 安装配置_Mongodb的java学习安装部署
  20. 为什么要了解和使用拉姆达——走进Java Lambda(〇)

热门文章

  1. 银行java面试题手写代码_面试系列——手写代码实现(一)
  2. java spring boot 使用pinyin4j 根据中文拼音的首字母分组
  3. 思岚科技发布SLAMWARE ROS SDK,全面支持ROS系统
  4. 金融魔方云红包产品的设计实践
  5. AES 256 加密
  6. 天气城市编码对应地区编码_如何在您的城市中建立强大的编码社区-我是如何做到的...
  7. excel导出复杂表格
  8. OriginOS:vivo“以消费者驱动和设计驱动”产品理念的深化实践
  9. 多线程之四:MFC多线程通讯
  10. 动态规划 之 零一背包