二维码用某种特定的几何图形来记录数据符号信息,这些黑白相间的图形按照一定的规律分布在平面上(二维方向)。二维码是目前最常使用的快捷信息存储方式之一,微信等都可以通过这项技术实现快扫快用。
在本篇内容中,带大家来学习二维码的应用技能,包括构建二维码和解码二维码。
💡 二维码历史
QR(Quick Response,快速响应)Code 诞生于 1994 年的日本汽车公司 Denso Wave,是一种二维条形码,由在白色背景上排列成方形网格的黑色方块组成,允许立即访问隐藏在代码中的信息。
QR码(也就是我们常说的二维码)可存储 7000 多个字符,由相机等设备读取,并从像素图像中解析出包含的信息,读取速度比其他条码快得多。
💡 二维码应用场景
生成和读取二维码的简便性导致它们在零售店、银行、医院、旅游和食品服务行业的产品包装、非接触式商务、订单处理、结帐和支付服务中得到广泛采用。我们常用到通信软件、社交平台都几乎都可以通过二维码来扫码识别。
2020 年 9 月对美国和英国消费者进行的一项调查发现,在COVID-19大流行期间二维码的使用有所增加。
💡 生成二维码
我们先安装和导入本次需要用到的 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)
我们对参数做一个解释:
-
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_color
和back_color
可以改变二维码的背景和绘画颜色。
💡 阅读二维码
本篇我们将讲解两种不同的方式来读取二维码,使用cv2
和pyzbar
。
💦 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}")
💦 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}")
Python 的迅速崛起对整个行业来说都是极其有利的 ,但“人红是非多
”,导致它平添了许许多多的批评,不过依旧挡不住它火爆的发展势头。
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
点击这里
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
5️⃣Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓