码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用python玩转二维码!速学速用!⛵


    💡 作者:韩信子@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
    
    • 1

    创建数据。

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

    创建二维码实例。

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

    我们对参数做一个解释:

    • 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)
    
    • 1
    • 2

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

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

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

    💡 阅读二维码

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

    💦 opencv 读取解码

    导入库。

    import cv2
    
    • 1

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

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

    在 CV2 中创建类 QRCodeDetector 的对象。

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

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

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

    💦 pyzbar 读取解码

    使用 cv2 读取图像。

    import cv2
    from pyzbar.pyzbar import decode
    # read the image using cv2
    img = cv2.imread("qr.jpg")
    
    • 1
    • 2
    • 3
    • 4

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

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

    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}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    参考资料

    • 📘 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

  • 相关阅读:
    fatal: Unable to create ‘D:/git/2_wechat/.git/index.lock‘: File exists.
    docker run 中 选项-e 的使用
    Ubuntu配置FTP服务
    Himall商城LinqHelper帮助类(1)
    OpenGL(十五)——Qt OpenGL三种不同的纹理滤波方式、光照、物体的移动
    自动化立体仓库系统实训
    Qt-FFmpeg开发-音频解码为PCM文件(9)
    ClickHouse—DML操作
    iPhone如何恢复出厂设置?苹果手机恢复出厂设置教程【3种方法】
    【问题已解决】OsgEarth_Viewer命令出现“无法定位程序输入点XXX于动态链接库XXX\osgdb_earth.dll上”问题解析
  • 原文地址:https://blog.csdn.net/ShowMeAI/article/details/128010609
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号