Files
2026-08-13 16:50:52 +08:00

4.7 KiB
Raw Permalink Blame History

quirc - QR 码识别示例

概述

这个示例展示了如何使用 quirc QR 码识别库的基本功能。

功能特性

  • 创建和销毁 quirc 对象
  • 设置图像尺寸
  • 获取图像缓冲区
  • QR 码识别和解码
  • 错误处理
  • 多种规格 QR 码测试

quirc 库简介

quirc 是一个用于从图像中提取和解码 QR 码的库,具有以下特点:

  • 快速: 在现代 x86 核心上处理 VGA 帧大约需要 50ms
  • 鲁棒性强: 能正确识别旋转和倾斜的 QR 码
  • 易于使用: 简单的 API 接口
  • 小巧: 无依赖,易于嵌入
  • 内存占用小: 每个像素一个字节,加上解码器对象的几 KB

使用说明

基本测试(无真实 QR 码数据)

  1. 构建项目:
bash build.sh
  1. 烧录到开发板后运行

此模式仅演示 quirc 库的基本 API 使用方法。

使用真实 QR 码数据测试

1. 生成 QR 码测试数据

首先需要安装 Python 依赖:

pip3 install -r tools/requirements.txt

然后运行生成脚本:

bash tools/generate_qr.sh

或者手动运行 Python 脚本:

# 生成所有格式(合并和单独的头文件)
python3 tools/qr_generator.py -a

# 仅生成合并的头文件
python3 tools/qr_generator.py -c

# 仅生成单独的头文件
python3 tools/qr_generator.py -s

# 指定输出目录
python3 tools/qr_generator.py -o gen_qrcode -a

生成的文件:

  • tools/output/qr_*.png - QR 码图片
  • tools/output/qr_*.h - 单个 QR 码的头文件
  • tools/output/qr_test_data.h - 合并的测试数据头文件
  • src/qr_test_data.h - 自动复制到源码目录

2. 启用测试数据

编辑 src/main.c,取消注释以下行:

// #define USE_QR_TEST_DATA

改为:

#define USE_QR_TEST_DATA

3. 构建和运行

bash build.sh

烧录到开发板后运行,程序将自动测试所有预生成的 QR 码。

测试的 QR 码规格

生成的测试数据包含以下类型的 QR 码:

# 名称 QR 版本 尺寸 纠错级别 数据内容 数据类型
1 small_low 1 21x21 L (Low) "Hello World" 字节
2 small_medium 1 21x21 M (Medium) "QUIRC" 字节
3 medium_high 3 29x29 H (High) URL 字节
4 large_quartile 5 37x37 Q (Quartile) "QR Code Test Data 12345" 字节
5 numeric_only 1 21x21 L (Low) "1234567890" 数字
6 alphanumeric 2 25x25 M (Medium) "ABC-123" 字母数字
7 chinese_text 4 33x33 M (Medium) "聆思科技" 字节(UTF-8)

测试覆盖:

  • QR 码版本Version 1-5尺寸从 21x21 到 37x37
  • 错误纠正级别L/M/Q/H 四个级别
  • 数据类型数字、字母数字、字节、UTF-8 编码文本

项目结构

samples/modules/quirc/
├── CMakeLists.txt          # CMake 配置
├── Kconfig                 # 配置选项
├── prj.conf                # 项目配置
├── build.sh                # 构建脚本
├── sample.yaml             # 示例描述
├── README.md               # 本文件
├── src/
│   ├── main.c              # 主程序
│   └── qr_test_data.h      # QR 码测试数据(生成后)
└── tools/
    ├── qr_generator.py     # QR 码生成器
    ├── requirements.txt    # Python 依赖
    ├── generate_qr.sh      # 生成脚本
    └── output/             # 生成的文件输出目录
        ├── qr_*.png        # QR 码图片
        └── *.h             # 头文件

QR 码生成器选项

qr_generator.py 支持以下参数:

  • -o, --output DIR - 指定输出目录默认output
  • -c, --combined - 仅生成合并的头文件
  • -s, --separate - 仅生成单独的头文件
  • -a, --all - 生成所有格式(默认)

自定义 QR 码测试数据

编辑 tools/qr_generator.py 中的 QR_CONFIGS 数组来添加自定义的 QR 码配置:

{
    "name": "custom_qr",
    "version": 2,  # QR 码版本 (1-40)
    "error_correction": qrcode.constants.ERROR_CORRECT_M,  # L/M/Q/H
    "data": "Your custom data",
    "box_size": 10,
    "border": 4,
}

注意事项

  • 默认模式下,示例仅演示 quirc 库的基本 API 使用方法,不包含真实的 QR 码图像数据
  • 要测试真实的 QR 码解码,需要生成测试数据并启用 USE_QR_TEST_DATA
  • 在实际应用中QR 码数据通常来自摄像头或图像文件
  • 确保图像数据已转换为灰度格式再送入 quirc 解码

参考文档

更多信息请参考:

  • quirc 库的 README.md 文件modules/quirc/README.md
  • quirc API 文档modules/quirc/lib/quirc.h