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

利用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-09-19 10:07:29
4年来首次,美联储降息!又把“祸水”引向全球?

4年来首次,美联储降息!又把“祸水”引向全球?

环球网资讯
2024-09-19 08:48:12
现在网络上又流行起来“探花”

现在网络上又流行起来“探花”

吃瓜党二号头目
2024-09-18 19:26:09
内蒙古一商户店门口贴招聘广告被罚款?官方通报

内蒙古一商户店门口贴招聘广告被罚款?官方通报

界面新闻
2024-09-19 07:31:17
华为三折叠,已经被网友P坏了!最后一张太恶毒了!

华为三折叠,已经被网友P坏了!最后一张太恶毒了!

运营商段子手
2024-09-19 09:28:08
女子称花两万在周大生买的金镯子从35克变20克!多方回应

女子称花两万在周大生买的金镯子从35克变20克!多方回应

南方都市报
2024-09-19 12:12:06
全美关注!93岁默多克与子女对簿公堂,可能关乎美国政治格局

全美关注!93岁默多克与子女对簿公堂,可能关乎美国政治格局

新民晚报
2024-09-18 14:40:10
曾志伟:兄弟们,中计了!没想到直播间唯一的香港货就是我自己

曾志伟:兄弟们,中计了!没想到直播间唯一的香港货就是我自己

大何向东流
2024-09-19 00:01:09
夹头酒,这下真出名了

夹头酒,这下真出名了

难得君
2024-09-18 23:21:05
现在是9月19号中午,刚刚传来1个惊人大消息,要来大动作了吗?

现在是9月19号中午,刚刚传来1个惊人大消息,要来大动作了吗?

股市皆大事
2024-09-19 09:58:34
茅台终于扛不住了

茅台终于扛不住了

蔚然未来消费
2024-09-19 08:33:37
辣眼睛!深圳女子58页PPT举报管培生男友多次嫖娼,并约炮出轨…

辣眼睛!深圳女子58页PPT举报管培生男友多次嫖娼,并约炮出轨…

火山诗话
2024-09-19 06:37:12
媒体人:某中超新锐豪强愁死了,若进亚冠教练自动续约3年,年薪5000万

媒体人:某中超新锐豪强愁死了,若进亚冠教练自动续约3年,年薪5000万

懂球帝
2024-09-19 10:28:15
苹果iPhone 16销量遇冷,市值蒸发近五千亿

苹果iPhone 16销量遇冷,市值蒸发近五千亿

中关村在线
2024-09-19 11:43:11
“普拉桑”登陆点变了,离上海更近!上海中心126层关闭,部分列车临时停运

“普拉桑”登陆点变了,离上海更近!上海中心126层关闭,部分列车临时停运

极目新闻
2024-09-19 12:27:40
真主党的对讲机在葬礼上爆炸,又有20人遇难,以色列的计划被披露

真主党的对讲机在葬礼上爆炸,又有20人遇难,以色列的计划被披露

译言
2024-09-19 08:18:53
今天暂停!刚刚,杭州多所学校发出通知

今天暂停!刚刚,杭州多所学校发出通知

都市快报橙柿互动
2024-09-19 13:21:49
黎巴嫩BP机爆炸事件,大量中东网友忧虑iPhone:改用中国品牌手机

黎巴嫩BP机爆炸事件,大量中东网友忧虑iPhone:改用中国品牌手机

不掉线电波
2024-09-18 18:39:13
调侃“9·18”自称“不是中国人”?一网红永久封号

调侃“9·18”自称“不是中国人”?一网红永久封号

看看新闻Knews
2024-09-19 09:45:54
回顾:广州一母亲过分宠溺儿子,儿子提出无理要求,被父亲撞了现行

回顾:广州一母亲过分宠溺儿子,儿子提出无理要求,被父亲撞了现行

春江历史
2024-09-18 14:23:19
2024-09-19 14:46:44
人工智能研究所AI
人工智能研究所AI
python人工智能,大数据,人生苦短,我用python
152文章数 767关注度
往期回顾 全部

科技要闻

未来几年销量会涨,谁还在使用BP机?

头条要闻

男子试驾问界发生车祸受伤:销售开车曾双手离开方向盘

头条要闻

男子试驾问界发生车祸受伤:销售开车曾双手离开方向盘

体育要闻

全村只有282人 却拥有一支顶级联赛球队

娱乐要闻

曝黄晓明叶珂疑似结婚!钻戒撞款杨颖

财经要闻

美联储降息50个基点 对国内形成5大利好

汽车要闻

预售价33.98万 腾势Z9预计第四季度上市

态度原创

家居
手机
本地
公开课
军事航空

家居要闻

新实木主义风潮下的家居革新 —— 源氏木语新品真实评测

手机要闻

消息称华为暂定产品节奏是 10 月 nova 13 系列,11 月 Mate 70

本地新闻

中秋节都过完了,潮汕人的脑子里还在滴滴滴

公开课

改变人生的10件小事

军事要闻

黎新一轮通信设备爆炸 对讲机疑日本制造

无障碍浏览 进入关怀版