利用Python生成和识读二维码(QR Code)和微二维码(Micro QR Code)

news2025/2/28 7:09:46

目录

  • 一、环境准备
  • 二、二维码(QR Code)生成和读取
    • 2.1 生成二维码
    • 2.2 读取二维码
  • 三、微二维码(Micro QR Code)生成和读取
    • 3.1 生成微二维码
    • 3.2 读取微二维码

之前写的一篇 博客采用了segno库来做微二维码的生成,该库可以方便的生成微二维码micro code图像,但是不能解析微二维码。时隔一年,今天发现有一个开源免费的 BoofCV库已经可以生成和解析micro code了,将相关方案记录在此。

为了能够统一,本教程将普通二维码的生成和解析内容也一并进行讲解。本教程基于python来实现,因此,需要提前安装好python环境。操作系统可以是windows10或ubuntu20.04。

一、环境准备

安装pyboof和opencv-python:

pip install pyboof -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

二、二维码(QR Code)生成和读取

2.1 生成二维码

创建一个python文件,内容如下:

import pyboof as pb
import cv2

# 创建生成器
generator = pb.QrCodeGenerator(pixels_per_module=20)

# 创建需要编码的字符
generator.set_message("0123456789ABCD")

# 生成图像
img = generator.generate()
img = pb.boof_to_ndarray(img)

# 保存图像
cv2.imwrite('result.png',img)

运行上述代码后在本地会生成一个二维码,如下图所示:
在这里插入图片描述

2.2 读取二维码

创建一个python文件,内容如下:

import numpy as np
import pyboof as pb

# 读取图像
img = pb.load_single_band("1.jpg", np.uint8)

# 创建解码器
detector = pb.FactoryFiducial(np.uint8).qrcode()

# 检测并解码
detector.detect(img)

# 展示解码结果
print("检测到 {} 个QR码".format(len(detector.detections)))
for qr in detector.detections:
    print("Message: " + qr.message)
    print("     at: " + str(qr.bounds))

这里注意,不要解析前面生成的二维码,因为前面生成的二维码尺度太大了,占据整个图像了,对于BoofCV这个库来说在这个尺度下检测不到二维码。我们需要把这个图像放在一张大图中,让整个二维码显得比较小,如下图所示:
在这里插入图片描述
运行上述代码后,结果如下:

检测到 1 个QR码
Message: 0123456789ABCD
     at: Polygon2D( (202.95778572848613,69.95778572848613) (278.5026022893253,70.00376126941202) (278.501265272895,145.50371751295154) (202.95099575255398,145.50208580290834) )

可以看到同时返回了解析结果和二维码坐标。

三、微二维码(Micro QR Code)生成和读取

3.1 生成微二维码

创建一个python文件,内容如下:

import pyboof as pb
import cv2

# 创建生成器
generator = pb.MicroQrCodeGenerator(pixels_per_module=20)

# 创建需要编码的字符
generator.set_message("0123456789ABCD")

# 生成图像
img = generator.generate()
img = pb.boof_to_ndarray(img)

# 保存图像
cv2.imwrite('result.png',img)

运行上述代码后在本地会生成一个微二维码,如下图所示:
在这里插入图片描述

3.2 读取微二维码

创建一个python文件,内容如下:

import numpy as np
import pyboof as pb

# 读取图像
img = pb.load_single_band("2.jpg", np.uint8)

# 创建解码器
detector = pb.FactoryFiducial(np.uint8).microqr()

# 检测并解码
detector.detect(img)

# 展示解码结果
print("检测到 {} 个QR码".format(len(detector.detections)))
for qr in detector.detections:
    print("Message: " + qr.message)
    print("     at: " + str(qr.bounds))

这里注意,不要解析前面生成的微二维码,因为前面生成的微二维码尺度太大了,占据整个图像了,对于BoofCV这个库来说在这个尺度下检测不到微二维码。我们需要把这个图像放在一张大图中,让整个二维码显得比较小,如下图所示:
在这里插入图片描述
运行上述代码后,结果如下:

检测到 1 个QR码
Message: 0123456789ABCD
     at: Polygon2D( (243.98930004010995,304.96718170239785) (385.6505340346546,304.9659491152183) (385.7300808033455,446.7159802279783) (243.96721802160135,446.8599454752604) )

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

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

相关文章

AD9689 input clock not detect

在项目调试中,遇到的问题,在ADI论坛上发帖咨询,转发到这里。网址如下: AD9689 input clock not detect - Q&A - High-Speed ADCs - EngineerZone (analog.com) Our FPGA board has two AD9689,one works ok, but…

使用Marshaller 将Java对象转化为XML格式和字符串转为xml

使用Marshaller 将Java对象转化为XML格式 对象转xml内容 ①工具类 public static String convertObjectToXml(Object obj) throws Exception {StringWriter writer new StringWriter();// 创建 JAXBContext 和 MarshallerJAXBContext context JAXBContext.newInstance(obj.ge…

MySQL客观题

MySQL客观题 在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特性的是( A ) A 模式 B 内模式 C 存储模式 D 外模式 数据库系统的特点是( A )、数据独立、减少数据冗余、避免数据不一致和加强了数据保…

自定义jar项目上传到Maven中央仓库/maven仓库/阿里云效仓库

1.前言 如何把自己的项目Jar或者Starter上传到Maven中央仓库中。 2.https://issues.sonatype.org/注册账号 3.注册成功 登录新建项目 摘要随意填写 重点来了 groupId 如果有自己域名的就自己域名com.xxx 如果用的gitee那么填写com.gitee.自己gitee的用户名 projectUrl&…

ASEMI代理AD8603AUJZ-REEL7原装ADI车规级AD8603AUJZ-REEL7

编辑:ll ASEMI代理AD8603AUJZ-REEL7原装ADI车规级AD8603AUJZ-REEL7 型号:AD8603AUJZ-REEL7 品牌:ADI /亚德诺 封装:SOT-23-5 批号:2023 安装类型:表面贴装型 引脚数量:5 类型&#xff1…

WOT全球技术创新大会2023整装待发,一起去见证科技的力量

从2012年开始,51CTO已经连续11年、累计奉献了19场WOT全球技术创新大会。 11年时间,有的技术如神话般崛起又泡沫般消失;有的技术历经时光磨砺而愈发彰显价值;有的技术充满争议而争议还在继续。 为什么我们会持续策划、举办WOT&am…

Pyspark_用户画像项目_1(数据通过Sqoop导入到Hive中)

Pyspark 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hi…

bdydns.com是什么网站?

bdydns.com是网站域名接入百度云CDN后,域名CNAME解析的记录值。网站接入百度云CDN,需要添加CNAME域名解析,例如新手站长网接入百度CDN后,域名CNAME解析到百度CDN地址:www.xinshouzhanzhang.com.a.bdydns.com&#xff0…

DQN算法详解

DQN算法详解 一.概述 强化学习算法可以分为三大类:value based, policy based 和 actor critic。常见的是以DQN为代表的value based算法,这种算法中只有一个值函数网络,没有policy网络,以及以DDPG,TRPO为代表的actor-critic算法…

两层神经网络的参数求导过程

假设输入数据 x∈Rnx\in\mathbb{R}^nx∈Rn,两层神经网络有以下形式: 其中 W1∈RhnW_1\in\mathbb{R}^{h\times n}W1​∈Rhn 和 W2∈RmhW_2\in\mathbb{R}^{m\times h}W2​∈Rmh 分别是第一层和第二层的权重矩阵,b1∈Rhb_1\in\mathbb{R}^hb1​∈…

如何高效地设计测试用例并评审

编写出好的测试用例是每一个测试工程师的职责,但在实际工作中大家写的测试用例往往需要不断地修改才能使用,这不仅浪费了时间,还容易让测试工程师产生自我否定的情绪,甚至在团队中产生各种矛盾。 那如何高效地设计测试用例呢&…

一日一题:第十一题---模拟堆(很认真!)

​作者:小妮无语 专栏:一日一题 🚶‍♀️✌️道阻且长,不要放弃✌️🏃‍♀️ 哭了,一定要记录,为了,写这篇文章千辛万苦 堆笔记 题目描述: 维护一个集合,初始…

javaagent 使用注意

前言 最近做项目,需要实现一个agent,实现运行过程替换字节码,当笔者实现这些功能时发现还是很多注意事项的。而且字节码的替换过程如果类的属性与方法升级了,那么加载就会报错。这种做法的好处是代码无侵入,缺点也很明…

离散化的应用

前言:我们了解离散化的都知道,离散化的本质就是将几个差距很大的数映射成相差较小的数据,同时又保证了数据间的相对大小关系不会发生改变,离散化还是有些争议较大的问题的,比如去重问题等,下面我们就来深入…

从抓包的角度分析connect()函数的连接过程

这篇文章主要是从tcp连接建立的角度来分析客户端程序如何利用connect函数和服务端程序建立tcp连接的,了解connect函数在建立连接的过程中底层协议栈做了哪些事情。 tcp三次握手 在正式介绍connect函数时,我们先来看一下tcp三次握手的过程,下…

用孕妇的思维和孕妇对话——《用孩子的思维和孩子对话》

看惯了某鱼上经典的卖货话术,“不懂事怀孕了,遂出”。没想到我居然也快要当爸爸了。这几个月准爸爸的生活让我切身的体会到了孕妇的不容易以及陪伴孕妇的辛苦。本文不打算歌颂母亲或者替准爸爸们倒苦水,单纯总结思考一下孕期夫妻如何沟通。加…

360度全景拍摄,探索全景世界带你飞跃视野新高度

引言: 随着科技的不断发展和进步,数字媒体技术也得到了长足的发展和应用。其中,全景拍摄作为数字媒体领域的一项创新技术,能够为人们提供更加直观、真实和生动的视觉体验,广泛应用于旅游、房地产、商业推广和教育培训…

【牛客网】树根与星际密码

目录 一、编程题 1.树根 2.星际密码 二、选择题 一、编程题 1.树根 链接:数根__牛客网 (nowcoder.com) 数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数…

【瑞吉外卖】001 -- 项目介绍与环境搭建

本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 项目效果展示: 目录 一、软件开发整体介绍 1、软件开发流程 2、角色分工 3、软件环境 二、瑞吉外卖项目介绍 1、项目介绍 2、产品原型展示 3、技术选型 4、功能架构 5、角色 三、开发环境搭建 1、数据库环…

matlab升余弦滤波器comm.RaisedCosineTransmitFilter用法

RaisedCosineTransmitFilter是一个MATLAB通信工具箱中的函数,用于上采样和滤波输入信号。它可以使用正常的升余弦FIR滤波器或平方根升余弦FIR滤波器。通过使用升余弦FIR插值信号来应用脉冲整形滤波器。系统对通过使用升余弦有限脉冲响应(FIR)滤波器对输入信号进行插…