二维码生成与识别(Python)

本文介绍如何使用Python的qrcode库进行二维码的生成与识别,包括安装所需库、二维码生成的具体实现及识别流程,并对比了不同场景下识别效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

好久没更新了,最近一个月主要在忙自己的毕业论文,最后查重7.1%还行吧,哈哈哈!!!趁着有点空闲时间来写一下公司最近的一个项目,识别二维码内容信息。

一、安装所需的库

1.用conda新建环境按自己的喜好命名,这个应该不用多说了,不懂的可以参照我之前的文章conda创建、删除虚拟环境、换源,安装必须的qrcode库,其他库按代码所需添加。

pip install qrcode  

2.这里简单说下QRCode 方法

1.	qrcode.QRCode(
2.	    version=1,
3.	    error_correction=qrcode.ERROR_CORRECT_L,
4.	    box_size=10,
5.	    border=4,
6.	    image_factory=None,
7.	    mask_pattern=None
8.	)

参数解释:

  1. version:控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。(17+4N)
  2. error_correction:控制二维码纠错级别。
    1. ERROR_CORRECT_L:大约7%或者更少的错误会被更正。
    2. ERROR_CORRECT_M:默认值,大约15%或者更少的错误会被更正。
    3. ERROR_CORRECT_Q:大约25%或者更少的错误会被更正。
    4. ERROR_CORRECT_H:大约30%或者更少的错误会被更正。
  3. box_size:控制二维码中每个格子的像素数,默认为 10。
  4. border:控制二维码四周留白包含的格子数,默认为4。
  5. image_factory:选择生成图片的形式,默认为 PIL 图像。
  6. mask_pattern:选择生成图片的的掩模。

二、二维码生成

这里就简单写下生成过程,因为我们研究的主要是二维码的识别过程!!!
直接上代码:

# -*- coding:utf-8 -*-
# @Time : 2021/5/6 9:37
# @Author : JulyLi
# @File : 生成二维码.py
# @Software: PyCharm

import qrcode

contain = "Hello World"
qr = qrcode.QRCode(version=1,
                   error_correction=qrcode.constants.ERROR_CORRECT_L,
                   )
qr.add_data(contain)
qr.make(fit=True)
img = qr.make_image()
img.save('hello_world.png')

生成结果为:
在这里插入图片描述

三、二维码识别

import os
# import webbrowser

import requests
from io import BytesIO
from pyzbar import pyzbar
from PIL import Image, ImageEnhance

# 信息保存地址
write_path = open(r'E:\changmiao\qrcode\res.txt', 'a')

def get_ewm(img_adds):
    """ 读取二维码的内容: img_adds:二维码地址(可以是网址也可是本地地址 """
    if os.path.isfile(img_adds):
        # 从本地加载二维码图片
        img = Image.open(img_adds)
    else:
        # 从网络下载并加载二维码图片
        rq_img = requests.get(img_adds).content
        img = Image.open(BytesIO(rq_img))

    # img.show()  # 显示图片,测试用

    txt_list = pyzbar.decode(img)

    for txt in txt_list:
        barcodeData = txt.data.decode("utf-8")
        print(barcodeData)
        write_path.write(barcodeData + '\n')
        # webbrowser.open(barcodeData, new=0, autoraise=True)
        # print(webbrowser.get())


if __name__ == '__main__':

    # 解析本地二维码
    get_ewm(r'E:\changmiao\qrcode\hello_world.png')

    # 解析网络二维码
    # get_ewm('https://gqrcode.alicdn.com/img?type=cs&shop_id=445653319&seller_id=3035998964&w=140&h=140&el=q&v=1')

运行程序后终端显示Hello World
在这里插入图片描述
res.txt保存结果
在这里插入图片描述

总结

基于qrcode 二维码识别过程还是挺强大的,有些手机无法识别的二维码,通过qrcode库能正确识别。
例如:在这里插入图片描述
正常情况下通过手机是无法扫出来的(反正我的手机扫不出来),但通过识别代码却能识别出来。
结果为一个链接,点开之后就能看到详细信息。在这里插入图片描述
如果阅读本文对你有用,欢迎关注点赞评论收藏呀!!!
2021年5月19日10:50:05
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值