网易首页 > 网易号 > 正文 申请入驻

利用OpenCV中的微信二维码扫描器来识别二维码

0
分享至

微信二维码扫描器是一个基于卷积神经网络 (CNN) 的库,用于检测和解码二维码。顾名思义,它是由微信计算机视觉团队开发和贡献的。它通过opencv-contrib包中的 4.5.2 版集成到 OpenCV 中,我们的代码需要安装opencv 4.5.2 与opencv-contrib 4.5.2 以上版本,当然opencv也有自己的二维码识别器,我们来看看识别的对比效果

二维码的结构

二维码主要包含5个参数:

  1. 位置

  2. Timing

  3. 纠错级别

  4. Mask图案

  5. 格式纠错

包含较小方块的独特黑色方块是帮助确定二维码位置和旋转的跟踪框。Timing(重复位置框之间的黑色和白色图案)提供了有关QR码的大小的信息。有基于所述40种不同类型的QR码Timing。版本 1(21×21 盒)、版本 2(25×25)、版本 3(29×29)至版本 40(177×177)。纠错级别说明可以恢复的数据字节的百分比。根据纠错的级别,可以有 4 个不同的类别。低 (7%)、中 (15%)、四分位 (25%) 和高 (30%)。级别越高,存储容量就越低。扫描仪借助这些参数检测二维码并解码数据。

关于二维码的参数,我们不做详细的说明,本期代码我们要安装opencv 4.5.2 与opencv-contrib 4.5.2 以上版本,微信二维码需要下载其神经网络的模型,目前最新的版本4.5.4.60

opencv 二维码识别

opencv主要有detect与decode2个函数进行二维码的识别与检测,opencv把此2个函数合并在一起,可以使用detectAndDecode函数来进行图片二维码的检测

# 检测二维码
bool cv::QRCodeDetector::detect(
InputArray img,
OutputArray points
)const
img输入图像,灰度或者彩色图像
points 得到的二维码四个点的坐标信息
# 解析二维码
std::string cv::QRCodeDetector::decode(
InputArray img,
InputArray points,
OutputArray straight_qrcode = noArray()
img输入图像,灰度或者彩色图像
points 二维码ROI最小外接矩形顶点坐标
qrcode 输出的是二维码区域ROI图像信息
返回的二维码utf-8字符串
上述两个API功能,可以通过一个API调用实现,该API如下:
std::string cv::QRCodeDetector::detectAndDecode(
InputArray img,
OutputArray points = noArray(),
OutputArray straight_qrcode = noArray()

在运行此代码前,需要安装opencv 4.5.2 与opencv-contrib,目前版本4.5.4.60

安装完成后,插入如下代码:

import cv2
import numpy as np

detector = cv2.QRCodeDetector()
img = cv2.imread("1.jpg")
res, points,code = detector.detectAndDecode(img)
cv2.drawContours(img,[np.int32(points)],0,(0,0,255),2)

print(res, points,code)
cv2.imshow('img',img)
cv2.waitKey(0)

首先我们直接使用cv2.QRCodeDetector函数搭建一个detector检测器,然后读取一张照片使用detectAndDecode子函数进行二维码的检测与识别,此函数返回三个参数

rets是二维码信息,points是二维码的4个位置点,code是二维码编码

识别完成后,我们打印其输出log,并使用drawContours函数进行图片的位置备注

http://weixin.qq.com/r/3hMRCUnEdBQLrQ1q90bM [[[369. 183.]
[506. 183.]
[506. 323.]
[369. 323.]]] [[ 0 0 0 ... 0 0 0]
[ 0 255 255 ... 255 255 0]
[ 0 255 0 ... 0 255 0]
[ 0 255 0 ... 255 0 0]
[ 0 255 255 ... 255 255 255]
[ 0 0 0 ... 255 255 0]]

我们把二维码遮挡一部分,然后看看opencv的识别效果,可以看出opencv只是识别出来了二维码,但并没有输出信息

[[[369. 183.]
[506. 183.]
[506. 323.]
[369. 323.]]] None
微信二维码检测器

二维码的普及应该在微信的使用后,微信也发布了自己的二维码识别系统

微信二维码扫描器内部使用了两种CNN模型。

  1. 检测器模型:此 CNN 模型用于定位二维码。

  2. 超分辨率模型:用于提高图像分辨率的一类技术称为超分辨率技术。微信二维码扫描器采用超分辨率模式,提升二维码分辨率。因此,当 QR 码的分辨率较小时(例如,当您从远处扫描时),它能够提供出色的结果。

这两个 CNN 模型采用 Caffe 深度学习框架格式,由两个文件组成——

  1. 模型架构文件(“model.prototxt”)

  2. 模型权重文件(“model.caffemodel”)包含在训练过程中学习到的权重和偏差。

import cv2
import numpy as np

detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")
img = cv2.imread("1.jpg")
res, points = detector.detectAndDecode(img)
cv2.drawContours(img,[np.int32(points)],0,(0,0,255),2)

print(res, points)
cv2.imshow('img',img)
cv2.waitKey(0)

微信二维码检测器使用神经网络来识别,模型主要包括CNN模型,以及SR高分辨率模型

我们使用
cv2.wechat_qrcode_WeChatQRCode函数来建立一个二维码检测器,然后使用detectAndDecode函数对二维码进行检测与识别

输出结果:('http://weixin.qq.com/r/3hMRCUnEdBQLrQ1q90bM',) (array([[370.18054, 180.97406],
[506.73303, 180.97406],
[506.73303, 321.71262],
[370.18054, 321.71262]], dtype=float32),)

利用同一张遮挡照片,我们使用微信识别系统看看识别效果


('http://weixin.qq.com/r/3hMRCUnEdBQLrQ1q90bM',) (array([[370.84125, 180.39166],
[508.94144, 180.39166],
[508.94144, 321.98196],
[370.84125, 321.98196]], dtype=float32),)

可以看出,微信检测二维码可以正常地识别出二维码信息

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
公安局局长主动投案,上个月刚公示拟重用

公安局局长主动投案,上个月刚公示拟重用

极目新闻
2024-11-14 15:55:19
惊爆!取消中法289架空客订单的连锁反应!

惊爆!取消中法289架空客订单的连锁反应!

星辰故事屋
2024-11-14 19:40:36
巴林0-1中国,国足2连胜,赛后评分:国足9号排第一

巴林0-1中国,国足2连胜,赛后评分:国足9号排第一

侧身凌空斩
2024-11-15 00:06:30
台湾问题不能再拖?特朗普下决心,“战书”已下,大陆遭晴天霹雳

台湾问题不能再拖?特朗普下决心,“战书”已下,大陆遭晴天霹雳

听风者说
2024-11-14 09:07:28
暴跌94%、裁员9000人!中国汽车的劲敌崩了

暴跌94%、裁员9000人!中国汽车的劲敌崩了

财经三分钟pro
2024-11-13 21:18:24
原来真有孩子大了不避嫌的家庭啊!网友:何止炸裂简直就是炸裂

原来真有孩子大了不避嫌的家庭啊!网友:何止炸裂简直就是炸裂

美好客栈大掌柜
2024-11-15 00:20:03
女生撞上端面条男生,发告示寻男生讨说法,网友:男的死刑立即执行

女生撞上端面条男生,发告示寻男生讨说法,网友:男的死刑立即执行

小萝卜丝
2024-11-14 21:21:15
米莱宣布创造“阿根廷奇迹”:10月通胀率降至2.7%,最快一年控制通胀

米莱宣布创造“阿根廷奇迹”:10月通胀率降至2.7%,最快一年控制通胀

澎湃新闻
2024-11-14 07:36:27
国足42秒神剧!张玉宁一瘸一拐庆祝:拼到上担架,头号英雄

国足42秒神剧!张玉宁一瘸一拐庆祝:拼到上担架,头号英雄

叶青足球世界
2024-11-15 00:26:55
雷军回应在车间睡觉:确实是摆拍

雷军回应在车间睡觉:确实是摆拍

鲁中晨报
2024-11-14 22:24:10
为拿美国绿卡,刻意在联合国大楼前抹黑中国的张晓宁,终于圆梦了

为拿美国绿卡,刻意在联合国大楼前抹黑中国的张晓宁,终于圆梦了

蜉蝣说
2024-11-14 15:21:00
新华社两记者曝光高铁以次充好,调查时被围殴,压力给到安徽公安

新华社两记者曝光高铁以次充好,调查时被围殴,压力给到安徽公安

看晓天下事
2024-11-14 18:45:18
从地狱到天堂!国足赢了!绝杀巴林豪取2连胜,积6分=平小组第2

从地狱到天堂!国足赢了!绝杀巴林豪取2连胜,积6分=平小组第2

大秦壁虎白话体育
2024-11-15 00:22:43
昔日巨头正式退市!近万家门店关至百家,网友唏嘘:青春回忆啊……

昔日巨头正式退市!近万家门店关至百家,网友唏嘘:青春回忆啊……

极目新闻
2024-11-14 14:51:26
自由经济打得集体经济满地找牙!米莱再放“卫星”:通胀降至2.7%

自由经济打得集体经济满地找牙!米莱再放“卫星”:通胀降至2.7%

大风文字
2024-11-14 17:35:49
国足牛!国足后续赛程:今年最后一战!11月19日厦门主场对阵日本

国足牛!国足后续赛程:今年最后一战!11月19日厦门主场对阵日本

直播吧
2024-11-15 00:08:00
越来越多的人认为,奥巴马是导致美国衰落的根本原因!

越来越多的人认为,奥巴马是导致美国衰落的根本原因!

现代春秋
2024-11-14 20:05:45
李子柒全面复出!身份证都改名,受到央视邀请,还有大动作待宣布

李子柒全面复出!身份证都改名,受到央视邀请,还有大动作待宣布

萌神木木
2024-11-13 14:05:41
刺激夜!澳大利亚0-0沙特,朝鲜2-3,韩国3-1,中国1-0绝杀巴林

刺激夜!澳大利亚0-0沙特,朝鲜2-3,韩国3-1,中国1-0绝杀巴林

侧身凌空斩
2024-11-15 00:09:18
金融战打响!A股、港股大跳水,狂飙的美元可能带崩全球股市

金融战打响!A股、港股大跳水,狂飙的美元可能带崩全球股市

看财经show
2024-11-14 17:20:07
2024-11-15 04:52:49
人工智能研究所AI
人工智能研究所AI
python人工智能,大数据,人生苦短,我用python
152文章数 767关注度
往期回顾 全部

科技要闻

官宣!极氪领克合并,吉利走向大整合

头条要闻

世预赛:国足客场1-0巴林收获两连胜 张玉宁绝杀

头条要闻

世预赛:国足客场1-0巴林收获两连胜 张玉宁绝杀

体育要闻

本季英超最炸裂的瓜,由一名裁判制造

娱乐要闻

娜扎张云龙恋情曝光!甜蜜细节被扒

财经要闻

"机构举报游资"导致A股大跌?

汽车要闻

七块屏幕四座布局 仰望U7中式百万座舱

态度原创

健康
数码
时尚
教育
军事航空

花18万治疗阿尔茨海默病,值不值?

数码要闻

红魔氘锋能量块 120W 三口氮化镓套装上架,首发 139 元

秋冬穿黑色,这4个技巧照着穿更时髦

教育要闻

16岁中学生简历引关注 正高职称 还研发火箭?

军事要闻

海陆空三军首次在珠海联合召开发布会

无障碍浏览 进入关怀版