Last translated: 26 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

After translating, add the links to README so others can view it directly.

AprilTag独立检测库

这是一个基于pupil-apriltags库的AprilTag识别工具包,用于摄像头中AprilTag的检测和跟踪。

Deutsch | English | Español | français | 日本語 | 한국어 | Português | Русский | 中文

依赖环境

  • Python 3.6+
  • OpenCV
  • NumPy
  • pupil-apriltags

安装指南

  1. 确保已安装Python环境
  2. 安装必要的依赖:
pip install opencv-python numpy pupil-apriltags

使用说明

基础功能

import cv2
from apriltag import Detector, DetectorOptions

# 创建检测器
options = DetectorOptions(
    families="tag36h11",  # 标签家族
    border=1,             # 标签边框大小
    nthreads=4,           # 线程数量
    quad_decimate=1.0,    # 图像下采样系数
    quad_blur=0.0,        # 高斯模糊系数
    refine_edges=True     # 是否精细化边缘
)
detector = Detector(options)

# 读取图像
img = cv2.imread("test_image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 检测AprilTag
detections = detector.detect(gray)

# 显示检测结果
for detection in detections:
    print(f"标签家族: {detection.tag_family}, ID: {detection.tag_id}")
    print(f"位置: {detection.center}")
    print(f"角点: {detection.corners}")

结果可视化

import numpy as np
from apriltag import draw_detection_results

# 相机内参矩阵和畸变系数
K = np.array([[800, 0, 320], [0, 800, 240], [0, 0, 1]], dtype=np.float32)
D = np.zeros((4, 1), dtype=np.float32)

# 绘制检测结果
result_img = draw_detection_results(img, detections, K, D, tag_size=0.1)

# 显示结果
cv2.imshow("AprilTag检测", result_img)
cv2.waitKey(0)

测试脚本

提供简易测试脚本用于验证AprilTag检测功能:

python test_apriltag.py

该脚本将调用默认摄像头进行实时AprilTag检测,按"q"键退出程序。

支持的标签类型

pupil-apriltags库支持以下标签系列:

  • tag36h11 (默认)
  • tag25h9
  • tag16h5
  • tagCircle21h7
  • tagCircle49h12
  • tagStandard41h12
  • tagStandard52h13
  • tagCustom48h12

使用建议

  • 通过调整DetectorOptions参数可优化性能表现
  • 在计算资源有限的设备上,可增大quad_decimate参数降低计算负荷
  • 确保代码中tag_size参数与实际AprilTag尺寸匹配
  • 3D坐标轴绘制需要精确的相机参数

核心特性

  • 支持USB摄像头实时AprilTag检测
  • 计算并可视化标签的3D位姿(位置+朝向)
  • 支持原始图像与标注图像的保存
  • 可自定义配置参数与相机参数
  • 包含完整的相机标定工具链
  • 不依赖ROS环境的纯Python实现

详细安装

1. 安装AprilTag C库

必须安装AprilTag的C语言库:

Ubuntu/Debian系统:

sudo apt-get update
sudo apt-get install -y libapriltag-dev

Windows系统:

需自行编译或获取预编译版本,确保apriltag.dll位于系统PATH或当前目录。

2. 安装Python依赖

pip install -r requirements.txt  -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install pupil-apriltags -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

操作指南

快速入门 (推荐)

集成工具提供交互式菜单引导完成全流程:

python apriltag_tool.py

菜单选项包含:

  1. 生成标定棋盘格
  2. 相机标定
  3. AprilTag检测
  4. 查看帮助文档

相机标定流程

建议在使用前完成相机标定:

# 首先生成棋盘格标定板
python create_chessboard.py --size 9x6 --square 100 --output chessboard.png --dpi 300

# 打印棋盘格并测量实际方格大小,然后进行标定
python camera_calibration.py --size 9x6 --square 0.025 --output config/camera/HSK_200W53_1080P.yaml

参数说明:

棋盘格生成工具 (create_chessboard.py):

  • --size: 棋盘格内角点数(宽x高,默认:9x6)
  • --square: 单格像素尺寸(默认:100)
  • --output: 输出路径(默认:chessboard.png)
  • --dpi: 输出图像DPI(默认:300),影响打印尺寸

标定程序 (camera_calibration.py):

  • --size: 内角点数(默认:9x6)
  • --square: 实际棋盘格尺寸(单位:米,默认:0.025)
  • --output: 输出配置文件(默认:config/camera/HSK_200W53_1080P.yaml)
  • --camera: 摄像头ID(默认:0)
  • --width: 采集宽度(默认:1280)
  • --height: 采集高度(默认:720)
  • --samples: 标定样本数(默认:20)
  • --preview: 标定后预览校正效果

标定步骤:

  1. 生成并打印棋盘格
  2. 测量实际棋盘格尺寸(米制单位)
  3. 运行标定程序,多角度展示棋盘格
  4. 程序自动采集样本,或按's'手动保存
  5. 样本达标后自动计算并保存相机参数

AprilTag检测

标定完成后运行检测程序:

python apriltag_detector.py

高级配置

python apriltag_detector.py [配置文件路径] --camera 相机ID --width 宽度 --height 高度 --camera_info 相机参数文件

参数说明:

  • 配置文件路径: AprilTag配置(默认:config/vision/tags_36h11_all.json)
  • --camera: 摄像头ID(默认:0)
  • --camera_info: 相机内参文件(默认:config/camera/HSK_200W53_1080P.yaml)
  • --width: 采集宽度(默认:1280)
  • --height: 采集高度(默认:720)

快捷键

  • q: 退出程序

配置详解

系统配置通过config/vision/table_setup.json文件管理:

{
    "AprilTagConfig": {
        "family": "tag36h11",      // 标签家族
        "size": 0.05,              // 标签物理尺寸(单位:米)
        "threads": 2,              // 处理线程数
        "max_hamming": 0,          // 最大汉明距离
        "z_up": true,              // Z轴朝上
        "decimate": 1.0,           // 图像下采样系数
        "blur": 0.8,               // 模糊系数
        "refine_edges": 1,         // 是否精细化边缘
        "debug": 0                 // 是否打开调试
    },

    "Camera": {
        "device_id": 0,            // 相机设备ID
        "width": 1280,             // 相机宽度分辨率
        "height": 720,             // 相机高度分辨率
        "camera_info_path": "config/camera/HSK_200W53_1080P.yaml"  // 相机标定参数文件
    },

    "Archive": {
        "enable": true,            // 是否启用数据存档
        "preview": true,           // 是否显示预览窗口
        "save_raw": false,         // 是否保存原始图像
        "save_pred": false,        // 是否保存预测图像
        "path": "./data/table_tracking"  // 数据保存路径
    },

    "TableConfig": {
        "reference_tags": [0, 1, 2, 3],      // 参考标签ID列表
        "moving_tags": [4, 5, 6],            // 移动标签ID列表
        "require_initialization": true,       // 是否需要初始化
        "tag_positions": {                    // 预设标签位置(如果有)
            "0": [0.0, 0.0, 0.0],
            "1": [0.5, 0.0, 0.0],
            "2": [0.5, 0.5, 0.0],
            "3": [0.0, 0.5, 0.0]
        }
    }
}

可配置项包括:

  1. AprilTag检测参数
  2. 相机参数(设备ID/分辨率/内参文件)
  3. 数据存储选项
  4. 参考标签与移动标签ID
  5. 初始化需求控制(require_initialization设为false可跳过)
  6. 预设标签位置

操作命令

基础启动命令:

python table_tracking.py

自定义配置文件启动:

python table_tracking.py --config 自定义配置文件路径

运行时按'i'键可手动触发初始化。

常见问题

  1. apriltag库缺失

    确认库已正确安装且路径可访问。

  2. 摄像头异常

    检查设备ID及占用情况。

  3. 检测精度问题

    确保相机标定准确且标签尺寸配置正确。

目录结构

apriltag_standalone/
├── apriltag.py              # AprilTag检测库核心代码
├── apriltag_detector.py     # AprilTag检测主程序
├── apriltag_tool.py         # 集成工具启动菜单
├── camera_calibration.py    # 相机标定程序
├── create_chessboard.py     # 棋盘格生成工具
├── configs.py               # 配置文件处理
├── config/                  # 配置目录
│   ├── camera/              # 相机配置
│   │   └── HSK_200W53_1080P.yaml  # 相机参数
│   └── vision/              # 视觉配置
│       └── tags_36h11_all.json # AprilTag配置
├── README.md                # 说明文档
└── requirements.txt         # Python依赖

技术架构

本项目为ROS AprilTag包的独立移植版,核心技术栈:

  • OpenCV: 图像处理/相机标定/位姿估计
  • AprilTag C库: 标签检测核心
  • SciPy: 旋转矩阵与四元数转换

开源协议

MIT许可证授权

增强功能

多标签追踪与遮挡处理

新增功能特性:

  1. 自动初始化:系统启动时自动记录:

    • 固定参考标签(ID 0-3)位置
    • 移动标签(ID 4,5,6)相对位置
  2. 遮挡补偿:初始化后支持:

    • 参考标签遮挡时通过可见标签推算
    • 移动标签遮挡时通过关联标签推算
  3. 多目标追踪:默认支持ID 4,5,6移动标签:

    • 通过固定相对位置实现遮挡推算
    • 配置文件可自定义标签ID

配置管理

通过config/vision/table_setup.json配置:

{
    "TableConfig": {
        "reference_tags": [0, 1, 2, 3],      // 参考标签ID列表
        "moving_tags": [4, 5, 6],            // 移动标签ID列表
        "require_initialization": true,       // 是否需要初始化
        "tag_positions": {                    // 预设标签位置(如果有)
            "0": [0.0, 0.0, 0.0],
            "1": [0.5, 0.0, 0.0],
            "2": [0.5, 0.5, 0.0],
            "3": [0.0, 0.5, 0.0]
        }
    }
}

主要配置项:

  1. 参考/移动标签ID定义
  2. 初始化需求开关
  3. 预设位置信息

操作指令

  1. 默认配置启动:

    python table_tracking.py
    
  2. 自定义配置启动:

    python table_tracking.py --config 自定义路径
    
  3. 手动初始化:运行时按'i'键

运行要求

初始化时需确保所有标签可见,系统将记录相对位置关系。初始化后可支持部分遮挡场景下的稳定追踪。