- 作者:韩信子@ShowMeAI
- Python3◉技能提升系列:www.showmeai.tech/tutorials/5…
- 本文地址:showmeai.tech/article-det…
- 声明:版权所有,转载请联系渠道与作者并注明出处
- 保藏ShowMeAI检查更多精彩内容
二维码用某种特定的几何图形来记录数据符号信息,这些黑白相间的图形依照一定的规则分布在平面上(二维方向)。二维码是现在最常运用的快捷信息存储方式之一,微信等都能够通过这项技能完成快扫快用。
在本篇内容中,ShowMeAI带大家来学习二维码的运用技能,包括构建二维码和解码二维码。
二维码前史
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,它是一个 21×21 矩阵。 -
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}")
参考资料
- During the last six months, in which of these locations or instances have you scanned a QR code?
- 图解Python编程:从入门到通晓系列教程:ttps://www.showmeai.tech/tutorials/56
- 编程言语速查表 | Python3 速查表:www.showmeai.tech/article-det…
引荐阅览
- 数据剖析实战系列 :www.showmeai.tech/tutorials/4…
- 机器学习数据剖析实战系列:www.showmeai.tech/tutorials/4…
- 深度学习数据剖析实战系列:www.showmeai.tech/tutorials/4…
- TensorFlow数据剖析实战系列:www.showmeai.tech/tutorials/4…
- PyTorch数据剖析实战系列:www.showmeai.tech/tutorials/4…
- NLP实战数据剖析实战系列:www.showmeai.tech/tutorials/4…
- CV实战数据剖析实战系列:www.showmeai.tech/tutorials/4…
本文正在参与「金石方案 . 分割6万现金大奖」