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

Это инструментарий для распознавания AprilTag на основе библиотеки pupil-apriltags, предназначенный для обнаружения и отслеживания 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 для снижения сложности вычислений
  • Убедитесь, что размер AprilTag соответствует параметру tag_size в коде
  • Для отрисовки 3D осей требуются точные параметры камеры

Особенности

  • Поддержка детектирования AprilTag в реальном времени с USB-камер
  • Расчет и отображение 3D позы тега (положение и ориентация)
  • Возможность сохранения исходных и размеченных изображений
  • Настраиваемая конфигурация и параметры камеры
  • Включены инструменты калибровки камеры
  • Независимая версия на чистом Python без зависимостей от ROS

Шаги установки

1. Установка C-библиотеки AprilTag

Требуется установить C-библиотеку AprilTag:

Ubuntu/Debian:

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

Windows:

Пользователям 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. Просмотр документации

Просто следуйте подсказкам меню для завершения всего процесса.

Калибровка камеры

Перед детектированием AprilTag рекомендуется выполнить калибровку камеры:

# 首先生成棋盘格标定板
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: Количество внутренних углов шахматной доски, ширинаxвысота (по умолчанию: 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

После калибровки можно запустить программу детектирования 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 не найдена

    Убедитесь, что библиотека 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, без зависимостей от ROS, но с сохранением основной функциональности. Используются следующие технологии:

  • OpenCV: обработка изображений, калибровка камеры и оценка позы
  • C-библиотека AprilTag: детектирование тегов
  • 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. Управлять необходимостью инициализации (установка require_initialization в false пропускает шаг инициализации)
  3. Предустановить информацию о положении тегов

Способ использования

  1. Запуск системы с настройками по умолчанию:

    python table_tracking.py
    
  2. Запуск системы с пользовательским конфигурационным файлом:

    python table_tracking.py --config путь_к_пользовательскому_файлу
    
  3. Ручная инициализация: во время работы системы нажмите клавишу 'i'

Требования к запуску

Убедитесь, что все теги видны во время инициализации, система запомнит их относительное положение. После инициализации система сможет правильно оценить положение всех тегов, даже если некоторые перекрыты.