python解析二维码_Python二维码生成识别实例详解

前言

在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很低。不过就最新版本的测试来说,识别率有了现显著提高。

对比

在没接触 Python 之前,曾使用 Zbar 的客户端进行识别,测了大概几百张相对模糊的图片,Zbar的识别速度要快很多,识别率也比 Zxing 稍微准确那边一丢丢,但是,稍微模糊一点就无法识别。相比之下,微信和支付宝的识别效果就逆天了。

代码案例

# -*- coding:utf-8 -*-

import os

import qrcode

import time

from PIL import Image

from pyzbar import pyzbar

"""

# 升级 pip 并安装第三方库

pip install -U pip

pip install Pillow

pip install pyzbar

pip install qrcode

"""

def make_qr_code_easy(content, save_path=None):

"""

Generate QR Code by default

:param content: The content encoded in QR Codeparams

:param save_path: The path where the generated QR Code image will be saved in.

If the path is not given the image will be opened by default.

"""

img = qrcode.make(data=content)

if save_path:

img.save(save_path)

else:

img.show()

def make_qr_code(content, save_path=None):

"""

Generate QR Code by given params

:param content: The content encoded in QR Code

:param save_path: The path where the generated QR Code image will be saved in.

If the path is not given the image will be opened by default.

"""

qr_code_maker = qrcode.QRCode(version=2,

error_correction=qrcode.constants.ERROR_CORRECT_M,

box_size=8,

border=1,

)

qr_code_maker.add_data(data=content)

qr_code_maker.make(fit=True)

img = qr_code_maker.make_image(fill_color="black", back_color="white")

if save_path:

img.save(save_path)

else:

img.show()

def make_qr_code_with_icon(content, icon_path, save_path=None):

"""

Generate QR Code with an icon in the center

:param content: The content encoded in QR Code

:param icon_path: The path of icon image

:param save_path: The path where the generated QR Code image will be saved in.

If the path is not given the image will be opened by default.

:exception FileExistsError: If the given icon_path is not exist.

This error will be raised.

:return:

"""

if not os.path.exists(icon_path):

raise FileExistsError(icon_path)

# First, generate an usual QR Code image

qr_code_maker = qrcode.QRCode(version=4,

error_correction=qrcode.constants.ERROR_CORRECT_H,

box_size=8,

border=1,

)

qr_code_maker.add_data(data=content)

qr_code_maker.make(fit=True)

qr_code_img = qr_code_maker.make_image(fill_color="black", back_color="white").convert('RGBA')

# Second, load icon image and resize it

icon_img = Image.open(icon_path)

code_width, code_height = qr_code_img.size

icon_img = icon_img.resize((code_width // 4, code_height // 4), Image.ANTIALIAS)

# Last, add the icon to original QR Code

qr_code_img.paste(icon_img, (code_width * 3 // 8, code_width * 3 // 8))

if save_path:

qr_code_img.save(save_path)

else:

qr_code_img.show()

def decode_qr_code(code_img_path):

"""

Decode the given QR Code image, and return the content

:param code_img_path: The path of QR Code image.

:exception FileExistsError: If the given code_img_path is not exist.

This error will be raised.

:return: The list of decoded objects

"""

if not os.path.exists(code_img_path):

raise FileExistsError(code_img_path)

# Here, set only recognize QR Code and ignore other type of code

return pyzbar.decode(Image.open(code_img_path), symbols=[pyzbar.ZBarSymbol.QRCODE], scan_locations=True)

if __name__ == "__main__":

# # 简易版

# make_qr_code_easy("make_qr_code_easy", "make_qr_code_easy.png")

# results = decode_qr_code("make_qr_code_easy.png")

# if len(results):

# print(results[0].data.decode("utf-8"))

# else:

# print("Can not recognize.")

#

# # 参数版

# make_qr_code("make_qr_code", "make_qr_code.png")

# results = decode_qr_code("make_qr_code.png")

# if len(results):

# print(results[0].data.decode("utf-8"))

# else:

# print("Can not recognize.")

#

# 带中间 logo 的

# make_qr_code_with_icon("https://blog.52itstyle.vip", "icon.jpg", "make_qr_code_with_icon.png")

# results = decode_qr_code("make_qr_code_with_icon.png")

# if len(results):

# print(results[0].data.decode("utf-8"))

# else:

# print("Can not recognize.")

# 识别答题卡二维码 16 识别失败

t1 = time.time()

count = 0

for i in range(1, 33):

results = decode_qr_code(os.getcwd()+"\\img\\"+str(i)+".png")

if len(results):

print(results[0].data.decode("utf-8"))

else:

print("Can not recognize.")

count += 1

t2 = time.time()

print("识别失败数量:" + str(count))

print("测试时间:" + str(int(round(t2 * 1000))-int(round(t1 * 1000))))

测试了32张精挑细选的模糊二维码:

识别失败数量:1

测试时间:130

使用最新版的 Zxing 识别失败了三张。

源码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下 如何用信号signal 终止或者暂停子线程,linux下实现线程暂停

记得在windows下有一个SuspendThread使线程挂起的函数,却发现linux下没有类似的函数,于是想自己写个。。刚开始就想到用信号(没办法,正在看auep,只能想到这个)test1:用pthread_kill将SIGSTOP信号发送到要暂停的线程期望结果&#…

keil debug如何在watch直接修改变量值_python日志记录系列教程,内置logging模块(一),直接使用logging模块的基础日志记录

前言:成熟的软件开发不可避免的要进行日志记录,python内置模块logging提供了强大的日志记录能力,本文将从多个角度,由浅入深的介绍logging的常见使用方法和一些基本概念,本此系列文章分为两篇,本文为系列文…

linux进程管理子系统分析,linux进程管理子系统简要分析

Linux进程管理:进程与程序:程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。进程:是一个执行中的程序,它是动态的实体进程四要素:1. 有一段程序供其执行,这段程…

基于python的分布式扫描器_基于python的服务器监测系统的设计

基于python的服务器监测系统的设计高正;徐浩;余曼【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)002【摘要】本文介绍了一种基于Python的服务器监测系统的设计,系统部署在需要监测的服务器上能够实时监测服务器的CPU、内存、磁盘空间.每天定时(可人工设置)自动发邮件报…

c语言变量命名规则_带你学习C语言—变量

在编写程序时,常常需要将数据存储在内存中,以便于使用这个数据或者修改这个数据的值。我们通常使用变量来存储数据,而且使用变量可以引用存储在内存中的数据,并随时根据需要对数据进行处理。变量的概念在程序设计中,允…

linux某个线程信号唤醒,linux多线程编程--信号量和条件变量 唤醒丢失事件

PriorityQueue有一个特征需要特别注意,即:对于那些通过排序方法判定为“相等”的元素,在通过poll方法依次取出它们时,它们的顺序是不确定的,特别是不会维持插入的顺序。举例说明:假如一个对象Obj&#xff0…

qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局

概述许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。Qt的嵌套布局由QDockWidget完成,用Qt Creator拖界面得到的dock布置形式比较固定&…

ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法

简介UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到。分析首先我们先看一下,UIBezierPath有哪些重要的属性:1…

html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!

作者:JaJian出处:https://www.cnblogs.com/jajian/p/8012603.html话说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握…

linux远程登录 密钥,使用密钥认证机制远程登录Linux

密钥认证机制创建存放key的文件1)创建目录 /root/.ssh 并设置权限[rootlocalhost ~]# mkdir /root/.ssh mkdir 命令用来创建目录,以后会详细介绍,暂时只了解即可。[rootlocalhost ~]# chmod 700 /root/.ssh chmod 命令是用来修改文件属性权限的&#xff…

python的pyqt5_Pycharm+Python+PyQt5使用详解

1,打开cmd安装PyQt5pip install pyqt52,PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5-toolspip install pyqt5-tools3,打开Pycharm,进入设置,添加外部工具4,添加QtDesigner,…

安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案

有效解决“Win10 安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境”。台式电脑新装了系统,重新安装arcgis 10.2时弹出“安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境 ”。在网上百度了很多的相关知识&#…

Linux_ppc下软件包安装,Linux下软件包安装详解

一、概述现在Linux上软件的安装方式有多种,有源码包编译,软件包管理器,软件包管理器前端工具,通用二进制编译等。源码包,优点是,灵活性和可定制性比较好,缺点是,技术要求高&#xff…

部编版是什么版本_部编版是人教版吗

部编版是人教版吗2019-09-07 17:06:05文/陶凯月部编版不是人教版,部编版教材由教育部组织编写,而人教版即由人民教育出版社出版。下面是小编整理的内容,供大家参考。什么是部编版教材部编版教材由教育部组织编写,2016年&#xff0…

下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例

HTTP 基本架构下面我们用一张简单的流程图来展示 HTTP 协议基本架构,以便大家先有个基本的了解Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识…

文件名为空linux,文件系统:隐匿在Linux背后的机制

原标题:文件系统:隐匿在Linux背后的机制在 Linux 中,最直观、最可见的部分就是 文件系统(file system) 。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于…

xshell怎么让程序后台运行_使程序在Linux下后台运行

我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断…

docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)

为什么要使用 Docker来部署 Elasticsearch 和 Kibana 呢,传统使用软件在操作系统上安装和配置的方法过于繁琐,并且受一些跨平台的约束,例如Mac、Windows、Linux等,所以无论安装什么软件,通过 Docker 进行部署是最为简单…

linux 多域名访问数据库,Linux下虚拟域名的实现

目前Linux操作系统十分火爆,所以很多朋友希望了解一下Linux下虚拟域名的实现过程。下面就基于目前比较流行的RedHat来讨论一下。一、DNS服务器的设置我们知道互联网网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来…

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带,而它的作用不仅仅是用来粘东西。别看它是这么小小一块,可是作用却很多。平时我们穿的衣服,裤子难免会粘上些毛。在我们紧急出门的时候,突然发现衣服粘有毛,这时候我们的透明胶就派上用场了。用透明…