qrencode生成二维码\微信开源算法识别opencv-contrib(一)

最近需要开发一个二维码识别的应用,调研了几个开源算法库,opencv、quirc、zxing、zbar和微信开源的基于深度学习的识别算法,最终选定了微信开源的算法,毕竟又好又快

二维码

QR(Quick Response)二维码,即快速响应二维码,是Denso Wave公司在1994年9月研制出的一种矩阵二维码。QR二维码是矩阵式二维码的一种,其深浅颜色的小模块沿垂直和水平两个方向分布,代表着编码后的数据。
qrencode生成二维码\微信开源算法识别opencv-contrib(一)_第1张图片

位置探测图形

标准的QR二维码中一般包含3个形状相同的位置探测图形,为了快速定位,这3个图形被设计为具有相同的深浅模块,比例为1:1:3:1:1,如下图所示。

qrencode生成二维码\微信开源算法识别opencv-contrib(一)_第2张图片

QR二维码中其他部分的深浅颜色宽度比例呈“回”字型的可能性很小,并且该特性使得不论扫描方向如何,只需其满足该比例,即可在扭曲变形的情况下快速定位。

定位图形

QR二维码中存在两个定位图形,其中水平的定位图形为一行黑白两色相互交替的模块单元,同样,垂直定位图形也是一列颜色交替的模块单元。定位图形的起始和结束模块一定是黑色模块。

校正图形

QR二维码中,毎个校正图形也是一个“回”字形状,由3个不同颜色不同尺寸的正方形依次重叠而成,它们分别为5×5的深色模块,3×3的浅色模块和1个深色模块。同时在垂直和水平方向上检测到1:1:1:1:1的宽度流,即确定为一个校正图形。太小的版本中没有校正图形

编码区域

黑色模块代表数据上的0,白色模块代表1.编码区域用于存储数据信息、版本信息、纠错级别信息和格式信息

空白区

围绕在二维码边缘外侧的白色区域,不存储信息,用于区分其他背景模型,减少外部干扰。
QRencode库并没有自动生成边缘外侧的空白区,也没有相关的接口,需要自己在生成图形的代码中添加。

优点

● 存储容量大,可容纳7089个数字或1817个汉字
● 编码字符类型多。条形码只能编码数字和26个英文字母,二维码可编码汉字
● 具有很强的纠错功能。有4个纠错等级,最高的纠错等级可纠正出30%的错误数据,可将LOGO放入图片中间
● 译码可靠性高,识别快速。能够旋转校正,畸变也能识别出

常见的识别二维码的算法库

opencv

opencv自带的识别精度较差,速度还可以。只需要他搭配其他算法库使用。
OpenCV能够加快读取条形码和二维码的过程,包括从硬盘加载图像,从视频流中抓取新的帧,并进行处理。 等我们获取图像或视频帧后,就可以将其传入Python中专用的条形码解码库,比如Zbar。
OpenCV4 二维码定位识别源码解析

zxing

谷歌开源的一个框架zxing-github,对win下的python不是很友好,出现莫名其妙的错误
刚开始用的的时候,会出现一个报错信息:zxing.BarCodeReaderException: ('Could not execute specified Java binary', 'java'), 是缺少java的环境
python识别二维码(3.6环境下的zxing包进行识别并解决中文报错问题)
Zxing Zbar 结合真正的极速秒扫 手动编译zxing库

碰到的奇怪bug

出现 “java”不是内部或外部命令,也不是可运行程序或批处理文件的问题 添加java的环境变量
到最后所有的关键都在于没装Java,而ZXing是用java写的,python只是负责调用

Quirc

Quirc-Github Quirc的特点就是:简单,方便移植,识别准确率高 但是python上的库在12年就停止更新了,无法使用

wechat

使用 OpenCV + 微信二维码引擎实现二维码识别from掘金
微信开源了其二维码的解码功能,并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中。从 OpenCV 4.5.2 版本开始,就可以直接使用。
该项目 github 地址
模型文件的地址
微信的扫码引擎,很早就支持了远距离二维码检测、自动调焦定位、多码检测识别等功能,它是基于 CNN 的二维码检测。

你可能感兴趣的:(opencv,opencv,计算机视觉,图像处理)