条形码和二维码在识别的时候主要包含定位和解码两个步骤。寻找码的位置,除了用传统的图像算法之外,也可以借助深度学习。那么深度学习的效率如何,我做了一个实验。

为QR二维码训练YOLOv3模型

编译Darknet

下载Darknet

git clone https://github.com/AlexeyAB/darknet --depth 1

我的环境是Windows,所以需要安装以下工具:

  • CMake 3.18.4
  • Visual Studio 2019 Community edition
  • OpenCV 4.5.0。系统环境变量中添加 OpenCV_DIR = C:\opencv\build。 在PATH中添加C:\opencv\build\x64\vc15\bin
  • CUDA 10.1
  • cuDNN 7.6.5

环境搭建的时候,CUDA是最坑的。虽然在命令行中发现nvcc可以工作,但CMake可能死活找不到。这里的问题是CUDA的Visual Studio插件没有装对地方。有人提到的方法是CUDA要在Visual Studio之后安装。但依然可能找不到,原因就是系统中包含了多个版本的VC++编译器。在我的环境中,CUDA插件是没有正确安装的,所以要手动从C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions 拷贝到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations

接下来就是运行build.ps1编译Darknet。如果PowerShell的安全策略是默认的,需要用管理员权限启动并修改权限:

Set-ExecutionPolicy Bypass
build.ps1

编译完之后运行命令查看下是不是GPU版本:

darknet.exe detector testCUDA-version: 10010 (10010), cuDNN: 7.6.5, CUDNN_HALF=1, GPU count: 1CUDNN_HALF=1

准备数据

在网上找一些QR的图片,我手里有250张。然后用labeImg标注每张图的QR位置:


我在LabelImg里加入了码型识别,在框选的时候会自动得到对应的码型。以下是我的数据集。


在Darknet的data目录下创建qrcode和qrcode-valid目录。把这些图片和标注信息拷贝到两个目录中,一个用于训练,一个用于校验。

创建相应的配置文件:qrcode.data, qrcode.txt, qrcode-valid.txt, qrcode.names, qrcode-yolo3v.cfg and qrcode-yolov3-tiny.cfg

  • qrcode.data:

    classes = 1
    train = data/qrcode.txt
    valid = data/qrcode-valid.txt
    names = data/qrcode.names
    backup = backup/
    
  • qrcode.txt和qrcode-valid.txt包含了两个目录中的文件名。这两个文件可以通过https://github.com/theAIGuysCode/YoloGenerateTrainingFile/blob/master/generate_train.py 这个Python脚本自动生成

  • qrcode-yolo3v.cfg基于yolo3v.cfg

  • qrcode-yolov3-tiny.cfg基于yolo3v-tiny.cfg

因为只需要训练一个类,cfg文件做以下修改:

classes=1
filters=18
max_batches = 4000
steps=3200,3600

具体意义可以参考文档:https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

训练模型

下载darknet53.conv.74开始训练模型:

darknet.exe detector train data/qrcode.data cfg/qrcode-yolov3.cfg darknet53.conv.74

darknet.exe detector train data/qrcode.data cfg/qrcode-yolov3-tiny.cfg darknet53.conv.74

QR区域检测性能测试

我的硬件配置

GPU: NVIDIA RTX2060
CPU: Intel(R) Core(TM) i5-4460  CPU @ 3.20GHz, 3201 Mhz, 4 Core(s), 4 Logical Processor(s)

测试图片

YOLOv3-tiny测试

darknet.exe detector test qrcode.data qrcode-yolov3-tiny.cfg qrcode-yolov3-tiny_last.weights 20201105151910.jpgDone! Loaded 24 layers from weights-fileDetection layer: 16 - type = 28Detection layer: 23 - type = 28
20201105151910.jpg: Predicted in 3.717000 milli-seconds.
QR_CODE: 97%


YOLOv3测试

darknet.exe detector test qrcode.data qrcode-yolov3.cfg qrcode-yolov3_last.weights 20201105151910.jpg Done! Loaded 107 layers from weights-fileDetection layer: 82 - type = 28Detection layer: 94 - type = 28Detection layer: 106 - type = 28
20201105151910.jpg: Predicted in 31.717000 milli-seconds.
QR_CODE: 100%


通过对比发现YOLOv3比YOLOv3-tiny的耗时多。扫码的实时性要求比较高,YOLOv3-tiny更适合QR。

检测模型下载

  • yolov3-tiny.weights for QR Code
  • yolov3.weights for QR Code

从头开始训练一个检测QR二维码区域的YOLOv3模型相关推荐

  1. Matlab实现 通过检测QR二维码位置探测图案进行精确定位

    近邻点集融合算法 QR二维码结构简介 QR二维码识别中在对图像预处理后最重要的一步就是要进行定位,QR二维码中有三个位置探测图形,通过扫描其特征便可以进行精细定位. 其中位置探测图形的比例特征如下: ...

  2. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  3. OpenCV4.0 快速QR二维码检测测试示例

    点击我爱计算机视觉标星,更快获取CVML新技术 近几年由于微信大力推广移动支付,二维码已经成为手机App的标配,在众多种类的二维码中,QR码是最为流行的. 刚刚发布的OpenCV4.0-Alpha新增 ...

  4. Android OpenCV(四十):QR二维码检测与识别

    QR二维码 QR码(英语:Quick Response Code:全称为快速响应矩阵图码)是二维码的一种,于1994年由日本DENSO WAVE公司发明.QR来自英文Quick Response的缩写 ...

  5. 目标检测:二维码检测方案

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  6. Jetson Nano 从入门到实战(转载)(案例:Opencv配置、人脸检测、二维码检测)

    目录 1. Jetson Nano简介 2. Jetson Nano环境配置 2.1 开箱配件介绍 2.2 烧录系统 2.3 开机和基本设置 2.4 开发环境配置 2.4.1 更新源和软件 2.4.2 ...

  7. Jetson Nano 从入门到实战(案例:Opencv配置、人脸检测、二维码检测)

    目录 1. Jetson Nano简介 2. Jetson Nano环境配置 2.1 开箱配件介绍 2.2 烧录系统 2.3 开机和基本设置 2.4 开发环境配置 2.4.1 更新源和软件 2.4.2 ...

  8. Opencv的使用小教程3——利用轮廓检测实现二维码定位

    Opencv的使用小教程3--利用轮廓检测实现二维码定位 二维码具有什么特征 实现效果 识别二维码的流程 1.预处理图像 2.寻找轮廓 3.通过寻找到的轮廓确定"回"的位置 4.创 ...

  9. QR二维码的攻击方法与防御

    Blackeagle · 2013/07/03 18:59 QR二维码(Quick Response Code)是由日本丰田子公司Denso Wave于1994年发明并开始使用的一种矩阵二维码符号.与 ...

最新文章

  1. webpack entry和output配置属性
  2. 淘系的音视频编辑方案:非线性编辑引擎
  3. 树莓派 触摸屏_如何用树莓派搭建一个颗粒物(PM2.5)传感器
  4. React之函数式组件
  5. 闲谈神经网络--写给初学者(三)
  6. 智能车路径提取matlab_遗传算法求解多车型车辆路径问题
  7. mysql log error_MySQL日志之error_log
  8. 3.Entity Framework Core 5.0 设置字段属性
  9. 教程——Wind Turbine Maintenance(Agents)
  10. ie 验证码图片不显示解决
  11. JavaWeb~Servlet~深入理解Cookie
  12. 经济学十大原理(七)政府有时候可以改善市场结果
  13. system32下 exe文件作用
  14. 投资组合的方差公式推导
  15. 09|自研or借力(下):集成Gin替换已有核心
  16. 关于sessions.ser文件的一些思考
  17. 分享125个ASP源码,总有一款适合你
  18. php php_openssl.dll,php_openssl.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家...
  19. Python网络爬虫:爬取豆瓣上《小王子》书评
  20. php项目css加载失败,浅谈CSS加载失败的6个原因

热门文章

  1. 一些开源的剪切MP3的软件
  2. ProcessDB实时/时序数据库——C/C++接口速度测试
  3. 你的个人AI助理Pi来了
  4. 2022新PHP赞/易支付系统源码+全新UI界面
  5. JavaScript unescape() 函数
  6. PCK - Percentage of Correct Keypoints
  7. 航空公司客户画像和客户价值分析
  8. 简要描述html文档的结构,1.1.HTML的介绍
  9. 4.2 链路聚合:负载均衡
  10. pearson相关系数的数值为多少证明有相关性?