微信二维码引擎OpenCV开源

 

zxing:jni方式调用:

https://github.com/devilsen/CZXing

android studio4.1

十天前,微信官方开发团队在 opencv_contrib 开源了自家优化9年的二维码引擎!各位读者可编译最新版OpenCV及opencv_contrib ,直接使用!

 

 

现在,在腾讯WeChatCV团队的贡献下,微信扫码引擎正式加入OpenCV开源了!只需3行代码,你便轻松拥有微信的扫码能力:

 

import cv2

detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")
img = cv2.imread("img.jpg")
res, points = detector.detectAndDecode(img)

print(res, points)

 

微信扫码引擎收录于:

opencv_contrib/modules/wechat_qrcode

开发文档:

https://docs.opencv.org/master/d5/d04/classcv_1_1wechat__qrcode_1_1WeChatQRCode.html

 

微信扫码引擎是一款基于开源引擎ZXing,并高度优化和深度改造的高性能轻量二维码识别器。

 

1. 基于CNN的二维码检测

 

“一图多码”是扫码支付经常遇到的线下场景。早在2016年,微信扫码引擎在业内率先支持远距离二维码检测、自动调焦定位、多码检测识别。然而,传统方法需要牺牲40%以上的性能来支持多码的检测与识别。伴随着深度学习技术的成熟和移动端计算能力的提升,微信扫码引擎引入基于CNN的二维码检测器解决上述问题。

 

图片

图1 二维码检测器

 

我们以SSD框架为基础,构造了短小精干的二维码检测器(图1),采用残差连接(Residual Concat)、深度卷积(Depthwise Convolution)、空洞卷积(Dilated Convolution)、卷积投影(Convolution Projection)等技术进行了针对性的优化。整个模型大小仅943KB,iPhone7(A10)单CPU的推理时间仅需20ms,很好地满足“低延时、小体积、高召回”的业务需求。

 

检测代码:

https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L156

模型文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/detect.prototxt

参数文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/detect.caffemodel

 

2. 基于CNN的二维码增强


大图小码”是远距扫码和长按识码经常面临的难点,二维码增强技术可以让小码更加清晰。2014年,微信率先在对话中上线“识别图中二维码”能力,离不开增强技术的加持。在长按识别的场景中,二维码图像经过用户的裁剪、压缩、转发,图像质量严重受损,分辨率急剧下降,边缘变得模糊不清,这给扫码引擎的识别带来了极大的挑战。

 

传统图像增强算法很难完美地解决以上问题,因此微信扫码引擎率先在识别流程中引入了基于深度学习的超分辨率技术(图2)。在网络结构上,密集连接(Dense Concat)、深度卷积(Depthwise Convolution)、反向卷积(Deconvolution)、残差学习(Residual Learning)等技术改善模型的性能;在目标函数上,针对二维码强边缘和二值化的特点,结合L2/L1损失、边界加权、二值约束设计了针对二维码的目标函数。经过精心的调优,超分辨率模型大小仅23KB,在iPhone7(A10)单CPU的推理时间仅需6ms(100x100超分200x200),完全满足移动端的应用需求。

 

图片

图2 二维码超分辨率

 

超分代码:https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L68

模型文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/sr.prototxt

参数文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/sr.caffemodel

 

3. 更鲁棒的定位点检测

 

二维码在识别的时候,通常需要根据扫描像素行/列匹配对应比例来寻找定位点(图3)。

 

图片

图3 二维码定位点

 

在定位点检测上,我们提出面积法的定位点检测方法,相比于传统扫描线方法更为鲁棒和高效,有效地避免了误召回和漏召回;在定位点匹配上,特征聚类方法使得扫码引擎可以高效和准确地匹配多个定位点;在图像二值化上,引入多种更为鲁棒的二值化方法,有效地提高解码的成功率。

 

核心代码:

https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L117

 

结合传统计算机视觉和深度学习技术,微信扫码引擎解决了一图多码、大图小码、鲁棒解码等业务痛点和技术难点。如今,该引擎在OpenCV上正式开源,期待广大开发者与我们一同打造业内领先的扫码引擎!

 

备注:opencv

图片

 

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

图片

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信二维码是一种常用的二维码形式,用于快速扫描获取相关信息。Linux是一种开源的操作系统,拥有广泛的用户群体和开发者社区。OpenCV_contrib是OpenCV的一个开源扩展库,提供了更多的功能和算法。 在Linux操作系统上,可以使用OpenCV_contrib提供的功能来实现微信二维码的识别和解码。通过OpenCV_contrib,我们可以直接调用特定的函数和方法,利用OpenCV强大的图像处理和计算机视觉功能来解码和分析二维码。 为了在Linux上使用OpenCV_contrib,我们首先需要在我们的系统上安装OpenCVOpenCV_contrib扩展库。我们可以从官方网站上下载源代码,然后进行编译安装。一旦安装完成,我们就可以使用OpenCV_contrib提供的微信二维码识别功能了。 使用OpenCV_contrib进行微信二维码识别的过程大致如下:首先,我们需要获取一张包含微信二维码的图像。然后,我们将图像传递给OpenCV_contrib提供的特定函数,该函数将处理图像并尝试从中解码出二维码信息。最后,我们可以从函数的返回值中获取解码后的信息。 使用OpenCV_contrib进行微信二维码识别的过程需要一定的编程知识和经验。我们需要了解OpenCV的基本用法和函数调用方式,了解如何处理图像和二维码数据。另外,我们还可以根据实际需求自定义一些功能,如二维码定位、纠错等。 总之,通过在Linux操作系统上使用OpenCV_contrib,我们可以方便地实现微信二维码的识别和解码功能,为用户提供更好的使用体验和便利性。同时,开源和开放的特性也使得OpenCV_contrib可以吸引更多的开发者参与,共同推动算法和功能的发展和改进。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值