开发者社区> ShowMeAI> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用python玩转二维码!速学速用!?

简介: 本文讲解二维码的生成与解码:使用Python工具库qrcode『构建二维码』,使用cv2和pyzbar两类工具库『解码二维码』。二维码是目前最常使用的快捷信息存储方式之一,读完本篇即可掌握这一必备技能!
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>

b58ea4844eaf95ceecb7152a6e25c1fc.png
? 作者:韩信子@ShowMeAI
? Python3?技能提升系列https://www.showmeai.tech/tutorials/56
? 本文地址https://showmeai.tech/article-detail/398
? 声明:版权所有,转载请联系平台与作者并注明出处
? 收藏ShowMeAI查看更多精彩内容
ec2737b08e88a85502d46e4d6f286287.png

二维码用某种特定的几何图形来记录数据符号信息,这些黑白相间的图形按照一定的规律分布在平面上(二维方向)。二维码是目前最常使用的快捷信息存储方式之一,微信等都可以通过这项技术实现快扫快用。

在本篇内容中,ShowMeAI带大家来学习二维码的应用技能,包括构建二维码解码二维码

? 二维码历史

QR(Quick Response,快速响应)Code 诞生于 1994 年的日本汽车公司 Denso Wave,是一种二维条形码,由在白色背景上排列成方形网格的黑色方块组成,允许立即访问隐藏在代码中的信息。

9ed1671a637bb4b630962149c925f5d9.png

QR码(也就是我们常说的二维码)可存储 7000 多个字符,由相机等设备读取,并从像素图像中解析出包含的信息,读取速度比其他条码快得多。

? 二维码应用场景

生成和读取二维码的简便性导致它们在零售店、银行、医院、旅游和食品服务行业的产品包装、非接触式商务、订单处理、结帐和支付服务中得到广泛采用。我们常用到通信软件、社交平台都几乎都可以通过二维码来扫码识别。

2020 年 9 月对美国和英国消费者进行的一项调查发现,在COVID-19大流行期间二维码的使用有所增加。

3245209ffa8ce85354b12ba96d4dfadd.png

? 生成二维码

我们先安装和导入本次需要用到的 Python 工具库qrcode,它可以很方便地创建和读取二维码。

import qrcode

创建数据。

data="https://www.showmeai.tech"

创建二维码实例。

qr= qrcode.QRCode(version=1, box_size=10, border=4, error_correction=qrcode.constants.ERROR_CORRECT_H)
93e42aa6751f25b6ce17231f90a87b40.png

我们对参数做一个解释:

  • version参数是一个从 1 到 40 的整数,控制二维码的大小;最小的是版本 1,它是一个 21x21 矩阵。
  • box_size参数控制二维码每个方框的像素数。
  • border控制框边框的粗细。
  • error_correction控制用于 QR 码的纠错,特别是当 QR 码因错误而无法读取时。选项 error_correction包括:

    • ERROR_CORRECT_L:可以纠正大约 7% 或更少的错误
    • ERROR_CORRECT_M(默认):可以纠正大约 15% 或更少的错误。
    • ERROR_CORRECT_Q:可以纠正大约 25% 或更少的错误。
    • ERROR_CORRECT_H:可以纠正大约 30% 或更少的错误。
qr.add_data(data)
qr.make(fit=True)

最后,使用生成二维码make_image()将 QRCode 对象转换为图像文件并保存在文件中。

qr_img=qr.make_image(fill_color="black", back_color="white")
qr_img.save("qr.jpg")

其中,fill_colorback_color可以改变二维码的背景和绘画颜色。

? 阅读二维码

本篇我们将讲解两种不同的方式来读取二维码,使用cv2pyzbar

? opencv 读取解码

导入库。

import cv2

打开上方存储的qr.jpg图像文件。

cv_img= cv2.imread("qr.jpg")

在 CV2 中创建类 QRCodeDetector 的对象。

qr_detect= cv2.QRCodeDetector()
data, bbox, st_qrcode= qr_detect.detectAndDecode(cv_img)

detectAndDecode()检测并解码图像中存在的二维码。该方法返回以下内容:

  • 解码后的数据,如果没有找到二维码,则数据为空。
  • 包含检测到的二维码顶点的边界框。
  • 可选的包含经过校正和二值化的 QR 码的输出图像。
print(f"QRCode data:\n{data}")
11ccd30ff4a64854e449d501b8b201ab.png

? pyzbar 读取解码

使用 cv2 读取图像。

import cv2
from pyzbar.pyzbar import decode
# read the image using cv2
img = cv2.imread("qr.jpg")

接下来,找到图像中的条形码和二维码。

# Decode the barcode and QR Code in the image
detectedBarcodes = decode(img)

decode会遍历图像中所有检测到的条形码。返回结果数组的每个元素代表一个检测到的条形码,可以读取图像中的多个条形码或 QR 码。

每个检测到的条码包含以下信息:

  • data:条形码/二维码中嵌入的数据。
  • type:它是条码类型,如 QR Code、EAN-13、UPC-A、UPC-E、EAN-8、Code 128 和 Code 39 符号体系。
  • rect:定位框的边界点集合。对于QR码,它是对应QR码四边形的四个角的四个点的列表。
  • polygon:检索位置多边形中的点数。位置多边形定义图像中条形码被解码的区域。
  • quality:质量。
  • orientation:表示条码的方向。
# read the image in numpy array using cv2
img = cv2.imread("qr.jpg")# Decode the barcode image
detectedBarcodes = decode(img)# If barcode is not detected then print the message
if not detectedBarcodes:
    print("Bar code not detected or your barcode is blank or corrupted!")
else:# Iterate through all the detected barcodes in image
    for bar_code in detectedBarcodes:# Locate the barcode position in image using rect
        (x, y, w, h) = bar_code.rect# Highlight the rectanngela round the bar code
        cv2.rectangle(img, (x-10, y-10),
                      (x + w+10, y + h+10),
                      (255, 0, 0), 2)if bar_code.data!="":# Print the barcode data
            print(f"Data :  {bar_code.data.decode('UTF-8')}")
            print(f"Bar Code Type: {bar_code.type}")
            print(f"Bar Code Orientation: {bar_code.orientation}")
4f7c8c7b36f90ef8bae6df047bbdd307.png

参考资料

推荐阅读

e9190f41b8de4af38c8a1a0c96f0513b~tplv-k3u1fbpfcp-zoom-1.image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Python精彩案例】生成动态二维码
【Python精彩案例】生成动态二维码
0 0
Python 支付宝红包二维码制作步骤分享
Python 支付宝红包二维码制作步骤分享
0 0
如何用Python生成一个优雅的二维码
二维码作为一种信息传递的工具,在当今社会发挥了重要作用。从手机用户登录到手机支付,生活的各个角落都能看到二维码的存在,那么我们如何自己生成一个二维码呢?如果使用Python,我们可以很快的生成一个二维码,我们可以自己定义二维码包含的信息。这些信息可以是文字、图片,也可以是网站。下面我们就来看看如何生成一个二维码。
0 0
Python实用小工具之制作酷炫二维码
Python实用小工具之制作酷炫二维码
0 0
Python制作属于自己的第一个二维码
那么二维码是如何生成的呢?它的原理又是什么?今天就来说说如何实用python来生成二维码。
0 0
听说 Python 生成二维码很简单,说的好像我Java 很复杂一样。
前几天看了 Python 的一个公众号发了一篇文章,说可以生成二维码啥的,然后说多么的简单,这时候阿粉就表示非常不服气了,凭啥说你的那么简单,说的我们 Java 做出的二维码很复杂一样。今天阿粉就教给大家来生成一个小小的二维码,而且也是一样的简单。
0 0
用 Python 生成炫酷二维码及解析
用 Python 生成炫酷二维码及解析
0 0
一行Python代码生成酷炫/恶搞/表白二维码(内附源码
很多人都扫过二维码,大部分人的印象都是黑白相间的小方块,实际上二维码是运用了计算机图像处理技术,组合编码原理的一种编码,其用黑白像素点的图像来代表二进制中的“1”和“0”,通过对点的排列组合来表达其所代表的意义所以二维码的本质是将数据转换一种方式存储。无论谁生成一个含有“多人运动,五人开黑”内容的二维码,最后输出的二维码是一样的。
0 0
python 小程序二维码的获取,以及改变小程序二维码中间logo为用户头像
python 小程序二维码的获取,以及改变小程序二维码中间logo为用户头像
0 0
+关注
ShowMeAI
『为AI硬核资料库(cool)而生!』构建AI解决方案,用知识加速每一次技术成长!网站:https://www.showmeai.tech/ 公众号:ShowMeAI研究中心
文章
问答
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载


http://www.vxiaotou.com