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

2023-05-16

目录

  • 一、环境准备
  • 二、二维码(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) )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用Python生成和识读二维码(QR Code)和微二维码(Micro QR Code) 的相关文章

  • linux下使用shell发送http请求

    本文主要介绍如何在linux下使用shell发送http请求 一 curl 1 get请求 curl命令默认下就是使用get方式发送http请求 curl www span class hljs preprocessor baidu spa
  • 【STL真好用】1057 Stack C++(30)

    1057 Stack 30 分 Stack is one of the most fundamental data structures which is based on the principle of Last In First Ou
  • C++学习之头文件引用

    目录结构如下 test h的定义如下 xff1a ifndef TEST H define TEST H include lt vector gt include lt string gt using namespace std class
  • checksum 算法

    说明 checksum xff1a 总和检验码 xff0c 校验和 xff0c 可以理解为check xff08 校验 xff09 xff0c sum xff08 和 xff09 在数据处理和通信领域 xff0c 通过一定算法对传输的数据进
  • 解决cannot open shared object file: No such file or directory

    一 linux下调用动态库 so文件时提示 xff1a cannot open shared object file No such file or directory 解决办法 xff1a 1 此时ldd xxx查看依赖缺少哪些库 lib
  • cmake 使用(六)

    本文是 cmake 使用的第六篇 主要介绍如何设置编译器优化标志 上一篇的链接为 xff1a https blog csdn net QCZL CC article details 119825737 xff0c 主要介绍如何将自己的软件安
  • 8086寄存器介绍

    8086 有14个16位寄存器 xff0c 这14个寄存器按其用途可分为 1 通用寄存器 2 指令指针 3 标志寄存器和 4 段寄存器等4类 1 通用寄存器有8个 又可以分成2组 一组是数据寄存器 4个 另一组是指针寄存器及变址寄存器 4个
  • C++常用操作符:: -> . (例子详解)

    C 43 43 提供了三种访问类或者类对象的操作符 xff0c 他们是 双冒号 点 箭头 gt 这三种操作符有着各自的使用场景和定义 双冒号 A B 表示作用域运算符 A一定是一个类的名称或命名空间的名称 仅仅用于当B是A类 A命名空间的一
  • STM32中断优先级的分配以及中断原则

    STM32d的中断优先级由NVIC IPRx寄存器来配置 xff0c IPR的宽度为8bit所以原则上每个中断可配置的优先级为0 255 xff0c 数值越小优先级越高 xff0c 但对于大部分的 Cortex M3芯片都会精简设计 xff
  • 晶体管的结构、类型和三种组态

    晶体管有两大类型 双极型晶体管 BJT 和场效应管 FET 双极型晶体管又称为半导体三极管 晶体三极管 xff0c 简称晶体管 它由两个PN结组合而成 xff0c 有两种载流子参与导电是一种电流控制电流源器件 场效应管仅有一种载流子参与导电
  • STM32单片机基础09——重定向printf函数到串口输出的多种方法

    本文详细的介绍了如何重定向printf输出到串口输出的多种方法 xff0c 包括调用MDK微库 xff08 MicroLib xff09 的方法 xff0c 调用标准库的方法 xff0c 以及适用于 GNUC 系列编译器的方法 1 prin
  • STM32直流减速电机控制篇(一)PWM调速

    直流电机原理 下面是分析直流电机的物理模型图 其中 xff0c 固定部分有磁铁 xff0c 这里称作主磁极 xff1b 固定部分还有电刷 转动部分有环形铁芯和绕在环形铁芯上的绕组 直流电机的转动原理我就不再赘述 xff0c 比较简单易懂 直
  • STM32直流减速电机控制篇(二)编码器测速原理

    编码器 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器 xff0c 我们可以通过编码器测量到底位移或者速度信息 编码器从输出数据类型上分可以分为增量式编码器和绝对式编码器 从编码器检测原理上来分 xff0c 还可以分为光
  • STM32直流减速电机控制篇(三)编码器测速程序编写

    编程思路 任何一个程序的编写我们都应该先理清楚编程思路 xff0c 通过上一篇讲解的编码器测速原理我们应该知道要想通过编码器得知电机转速我们第一步就应该是捕获A相和B相输出的脉冲 因为电机速度的定义是单位时间内的转数 xff0c 所以第二步
  • GPIO模式

    开漏输出 只能输出低电平 xff0c 不能输出高电
  • 单片机485通信

    1 RS485简介 485 xff08 一般称作 RS485 EIA 485 xff09 是隶属于 OSI 模型物理层的电气特性规定为 2 线 xff0c 半双工 xff0c 多点信的标准 它的电气特性和 RS 232 大不一样 用缆线两端
  • Jetson Xavier NX 镜像制作、烧录及克隆

    以下所有方法仅适用于Jetson Xavier Nx 16G emmc版本 其他版本仅供参考 官方文档下载链接为https developer nvidia com embedded downloads search 61 Develope
  • Postman下载,安装,注册及登录教程

    目录 一 Postman简介 二 Postman的注册 1 首先下载Postman xff0c 进入官网 xff1a Download Postman Get Started for Free 2 安装Postman 3 找到所下载的app
  • 一文掌握fastapi微服务开发

    目录 一 概述 1 1 微服务 1 1 1 微服务的优势 1 1 2 微服务的缺点 1 2 为何使用Python开发微服务 1 3 FastAPI概述 二 开发 2 1 安装FastAPI 2 1 1 安装虚拟环境 2 1 2 创建虚拟环境
  • Windows通过SSH连接虚拟机中的ubuntu系统

    zz windows通过ssh连接虚拟机中的ubuntu步骤 音量 博客园

随机推荐