1 问题描述

(1)图像分辨率小。例如一些嵌入在海报(如图1)或远距离拍摄的码,其分辨率远小于通常情况下的码图像。

图1.海报中的二维码占比很小
(2)图像质量较低。有很多是经过了多次的压缩和转发,存在严重的人工效应(如振铃效应)干扰。

(3)由于光照等原因,导致二维码亮度不均匀、图像模糊等。






2 微信超分辨率重构的框架

通常情况下,相比于低分辨率图像,高分辨率图像能够提供更丰富的细节,呈现出良好的视觉效果,对于二维码识别这种以图像作为输入的后续流程,也有助于提高系统的整体表现。然而,受成像设备、存储空间和网络资源的限制,我们常常只能获得较低分辨率的图像。于是,超分辨率技术便派上了用场。
超分辨率技术以低分辨率图像作为输入,重建高分辨率输出,是计算机视觉领域的一个经典问题。传统的基于像素插值的超分算法以其计算简单、速度快的优势,被广泛采用,如最近邻(nearest)插值,双线性(bilinear)插值以及双三次(bicubic)插值等。但它们无法适应多样的图像内容,感知能力较差,难以重建出图像的高频信息,输出图像过于模糊,应用于压缩图像时,甚至会放大人工效应干扰。
近年来,计算机视觉技术和深度学习飞速发展,学术界开始关注利用深度学习解决图像重建问题。我们根据扫码图像的特点,设计了适用于移动端的超分网络,实现了快速高效的码图像重建,并改善图像质量,大大提高了扫码算法的识别成功率。网络结构如图所示。
图1 码图像重建网络结构

3 API

基于OpenCV开发了相应的API。

3.1 cv.wechat_qrcode_WeChatQRCode

cv.wechat_qrcode_WeChatQRCode(detector_prototxt_path, detector_caffe_model_path, super_resolution_prototxt_path, super_resolution_caffe_model_path) -> <wechat_qrcode_WeChatQRCode object>

初始化微信 QR 码检测模块,包括两个基于 CNN 的模型:对象检测模型和超分辨率模型。对象检测模型用于检测带有边界框的二维码。当 QR 码较小时,采用超分辨率模型对其进行放大。

文件地址:https://github.com/WeChatCV/opencv_3rdparty

3.1.1 参数说明:

参数名 参数含义
detector_prototxt_path 对象检测模型的prototex文件路径
detector_caffe_model_path 对象检测模型的caffe模型文件路径
super_resolution_prototxt_path 超分辨率模型的prototex文件路径
super_resolution_caffe_model_path 超分辨率模型的caffe模型文件路径

3.1.2 返回值:

wechat_qrcode_WeChatQRCode 对象

3.2 cv.wechat_qrcode_WeChatQRCode.detectAndDecode

cv.wechat_qrcode_WeChatQRCode.detectAndDecode(img[, points]) ->retval, points

检测和解析二维码

3.2.1 参数说明:

参数名 参数含义
img opencv 读取的灰度图或 BGR 图
points 检测到 QR 码四边形顶点后,将其位置输出到该数组

3.2.2 返回值:

retval: 解析结果

points: QR 码四边形顶点位置数组,如果找不到则为空

4 二维码提升对比度测试

4.1 测试代码:

import cv2
import osif __name__ == '__main__':# 初始化对象detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt","detect.caffemodel","sr.prototxt","sr.caffemodel")results = {"image": [], "res": [], "points": []}image_dir = "src"files = os.listdir(image_dir)# 遍历图片目录for f in files:image_file = os.path.join(image_dir, f)img = cv2.imread(image_file)  # 读取图像res, points = detector.detectAndDecode(img)  # 检测图像if res:  # 非空表示检测成功results["image"].append(image_file)results["res"].append(res)results["points"].append(points)image_num = len(files)detected_num = len(results['res'])print("Image dir:", image_dir)print(f"Processed images: {image_num} , detected images: {detected_num}",f"detection success rate : {detected_num / image_num * 100}%. ")print("Detected images are:")for i in results['image']:print(i, end=',')

4.2 输出结果

Image dir: src
Processed images: 134 , detected images: 19 detection success rate : 14.17910447761194%.

Dected images are:
src/4_217.jpg,src/4_135.jpg,src/10_144.jpg,src/4_171.jpg,src/19_146.jpg,src/4_148.jpg,src/19_164.jpg,src/6_29.jpg,src/19_171.jpg,src/4_39.jpg,src/2.jpg,src/6_41.jpg,src/19_162.jpg,src/19_154.jpg,src/19_181.jpg,src/4_228.jpg,src/4_140.jpg,src/4_26.jpg,src/4_38.jpg

Image dir: detect
Processed images: 137 , detected images: 22 detection success rate : 16.05839416058394%.

Detected images are:
detect/4_217.jpg,detect/4_171.jpg,detect/19_146.jpg,detect/4_148.jpg,detect/19_164.jpg,detect/4_196.jpg,detect/19_151.jpg,detect/4_76.jpg,detect/4_81.jpg,detect/4_39.jpg,detect/19_159.jpg,detect/2.jpg,detect/19_165.jpg,detect/6_41.jpg,detect/19_162.jpg,detect/19_154.jpg,detect/19_137.jpg,detect/5_13.jpg,detect/4_132.jpg,detect/4_228.jpg,detect/4_26.jpg,detect/4_38.jpg

5 简单分析

以未能成功检测的src/5_50.jpg为例:

该图片通过微信扫码可以成功检测,检测成功时摄像头离图片较近,因此考虑在 QR 检测程序中对图片进行缩放预处理:

x, y = img.shape[0:2]
img = cv2.resize(img, (int(y * 1.5), int(x * 1.5)))

结果如下:
Image dir: detect
Processed images: 137 , detected images: 33 detection success rate : 24.087591240875913%.
Detected images are:
detect/4_217.jpg,detect/4_135.jpg,detect/10_144.jpg,detect/4_171.jpg,detect/4_133.jpg,detect/4_69.jpg,detect/19_164.jpg,detect/19_151.jpg,detect/6_29.jpg,detect/4_76.jpg,detect/6_2.jpg,detect/7_47.jpg,detect/4_81.jpg,detect/4_39.jpg,detect/2.jpg,detect/19_165.jpg,detect/15_75.jpg,detect/7_44.jpg,detect/7_7.jpg,detect/6_12.jpg,detect/19_162.jpg,detect/11_99.jpg,detect/4_100.jpg,detect/19_154.jpg,detect/19_137.jpg,detect/5_50.jpg,detect/5_13.jpg,detect/19_181.jpg,detect/14_11.jpg,detect/4_228.jpg,detect/6_30.jpg,detect/4_26.jpg,detect/4_38.jpg

Image dir: src
Processed images: 134 , detected images: 32 detection success rate : 23.88059701492537%.
Detected images are:
src/4_217.jpg,src/4_135.jpg,src/10_144.jpg,src/4_171.jpg,src/19_146.jpg,src/4_69.jpg,src/19_164.jpg,src/4_196.jpg,src/6_29.jpg,src/4_76.jpg,src/19_171.jpg,src/6_2.jpg,src/4_220.jpg,src/7_47.jpg,src/4_81.jpg,src/7_29.jpg,src/4_39.jpg,src/19_159.jpg,src/4_237.jpg,src/2.jpg,src/19_165.jpg,src/15_75.jpg,src/4_115.jpg,src/19_162.jpg,src/19_154.jpg,src/5_50.jpg,src/5_13.jpg,src/19_181.jpg,src/4_228.jpg,src/6_30.jpg,src/4_26.jpg,src/4_38.jpg

测试结果表明 opencv 中的 QR 码识别 API 主要针对理想位置和大小的 QR 码图像进行识别,而简单的图像预处理可以提高 QR 码识别成功率。

6 总结及展望

我们目前通过调用微信API来实现检测和超分辨率重构,下一步工作将搭建图1所示的网络,利用微信已经训练好的模型,来看看通过超分辨率重构后的效果。

参考文献

https://blog.csdn.net/qq_35054151/article/details/113647111

通过超分辨率重构来提高二维码的对比度相关推荐

  1. Java中识别二维码并且提高二维码的识别率

    我们在Java开发的时候,发现对二维码的识别是不足的.所以我们需要提高识别率. 第一步.识别图片二维码.准备相应的jar包.我们在gradle+idea中开发. compile group: 'com ...

  2. 超详细---使用QRCode生成二维码并生成到PDF上

    突发奇想想生成一个这样的一个带二维码的pdf: 然后就开始做了 废话不多说了直接上代码: POM.XML(所需要的jar) 里面的jar可能不全,根据错误提示需要自己再去引入jar <!-- P ...

  3. 二维码提升对比度文献调研(1)--Fast Image Processing with Fully-Convolutional Networks

    简介 (1) 论文 (期刊和发表时间) Fast Image Processing with Fully-Convolutional Networks (ICCV 会议 2017) (2) 论文链接 ...

  4. 二维码提升对比度文献调研(5)--DeepLPF: Deep Local Parametric Filters for Image Enhancement

    简介 (1)论文名称: DeepLPF: Deep Local Parametric Filters for Image Enhancement CVPR 2020 (2)论文链接: https:// ...

  5. 二维码提升对比度文献调研(4)--Attention Guided Low-light Image Enhancement

    简介 (1)论文2: Attention Guided Low-light Image Enhancement with a Large Scale Low-light Simulation Data ...

  6. 二维码提升对比度文献调研(3)--A Low-Complexity Algorithm for Contrast Enhancement of Digital Images

    简介 (1)论文(包括期刊和发表时间):A Low-Complexity Algorithm for Contrast Enhancement of Digital Images (2)论文链接: h ...

  7. 二维码提升对比度文献调研(2)--Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement

    简介 论文 (期刊和发表时间) Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement (CVPR 会议 2020) ...

  8. uniapp中qrcode生成二维码后传的参数不见了_阿虚教你制作动态二维码,超详细教程!

    这篇教程很早之前就答应几个粉丝要写,拖的有点久了. 内容比较多,先上个目录 阿虚的教程会迟到,但永远不会缺席.hahahahhaha... 一. 先说一下今天要教的内容 ʕ•̫͡•ོʔ•̫͡•ཻʕ•̫ ...

  9. ZXing二维码解析精度提高一瞥

    报表中含有单号二维码,纸质单据经扫描仪扫描为图片后,使用com.google.zxing解析二维码生成单号供程序使用.在实际使用过程中发现二维码解析时而有失败的情况,对扫描的单据图片进行分析后发现,解 ...

最新文章

  1. 腾讯、阿里到底有多缺这类程序员?
  2. 回首2020,我们砥砺前行
  3. 如何利用bat在同一个IE用多个选项卡的方式打开多个网址? 如何利用bat在同一个IE用多个选项卡的方式打开多个网址? 我的网址是这样的http://www.xags.gov.cn:8003/gga
  4. 第二届蓝桥杯省赛---夺冠概率
  5. Tigase XMPP Server
  6. Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)
  7. Linux学习记录--命令与文件的查询
  8. 5月深度学习班第8课rnn_appliacation
  9. 常用Windows运行命令大全
  10. 印章管控私有化部署,助力政企办公开启新纪元
  11. Spark Streaming项目实战
  12. 解决Latex中文PDF目录出现乱码问题
  13. raster包—resample函数
  14. SqlDbx连接Mysql中文乱码
  15. 噩梦的开始:动态规划之背包问题(01背包问题、完全背包问题、方案数填满型背包问题)
  16. linux 配置 ftp 服务器以及 ftp 客户端登录
  17. 数据字典项设计实现方案
  18. HTML实时获取当前时间
  19. 第十三届蓝桥杯国赛真题 PythonB组 复盘以及获奖感言(国一!!!)
  20. Android获取手机中的所有音乐地址

热门文章

  1. 电子计算机空调,电子计算机机房空调的设计规范
  2. c++mfc编写实验_零基础学Windows窗口图形界面编程(不用MFC),菜鸟学完变身高手,敢与专业媲美...
  3. js生日计算年龄_你知道用EXCEL可以从身份证中提取生日、性别、年龄、生肖吗?...
  4. 实现Modbus TCP多网段客户端应用
  5. 复数卷积 tensorflow_PyTorch 中的傅里叶卷积
  6. 服务器winsxs文件夹怎么清理工具,winsxs,教您winsxs文件夹清理方法
  7. steam成就解锁器_MC技术指南如何使用SAM成就解锁?
  8. 一位资深程序员大牛给Java初学者的学习建议
  9. 成功案例_APP成功推广案例
  10. python爬虫分析_Python爬虫解析网页的4种方式