使用python玩转二维码!速学速用!⛵
创始人
2024-02-22 22:32:56
0

💡 作者:韩信子@ShowMeAI
📘 Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56
📘 本文地址:https://showmeai.tech/article-detail/398
📢 声明:版权所有,转载请联系平台与作者并注明出处
📢 收藏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,它是一个 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}")

💦 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 imagefor 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 codecv2.rectangle(img, (x-10, y-10),(x + w+10, y + h+10),(255, 0, 0), 2)if bar_code.data!="":# Print the barcode dataprint(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 速查表:https://www.showmeai.tech/article-detail/98

推荐阅读

  • 🌍 数据分析实战系列 :https://www.showmeai.tech/tutorials/40
  • 🌍 机器学习数据分析实战系列:https://www.showmeai.tech/tutorials/41
  • 🌍 深度学习数据分析实战系列:https://www.showmeai.tech/tutorials/42
  • 🌍 TensorFlow数据分析实战系列:https://www.showmeai.tech/tutorials/43
  • 🌍 PyTorch数据分析实战系列:https://www.showmeai.tech/tutorials/44
  • 🌍 NLP实战数据分析实战系列:https://www.showmeai.tech/tutorials/45
  • 🌍 CV实战数据分析实战系列:https://www.showmeai.tech/tutorials/46

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...