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 Standalone-Erkennungsbibliothek

Dies ist ein AprilTag-Erkennungstoolkit basierend auf der pupil-apriltags-Bibliothek zur Detektion und Verfolgung von AprilTags in Kamerabildern.

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

Abhängigkeiten

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

Installation

  1. Stellen Sie sicher, dass Python installiert ist
  2. Installieren Sie die erforderlichen Abhängigkeiten:
pip install opencv-python numpy pupil-apriltags

Verwendung

Grundlegende Nutzung

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}")

Visualisierung der Erkennungsergebnisse

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)

Testskript ausführen

Ein einfaches Testskript ist enthalten, um die AprilTag-Erkennung zu überprüfen:

python test_apriltag.py

Dies startet die Standardkamera und erkennt AprilTags in Echtzeit. Drücken Sie "q" zum Beenden.

Unterstützte Tag-Familien

Die pupil-apriltags-Bibliothek unterstützt folgende Tag-Familien:

  • tag36h11 (Standard)
  • tag25h9
  • tag16h5
  • tagCircle21h7
  • tagCircle49h12
  • tagStandard41h12
  • tagStandard52h13
  • tagCustom48h12

Hinweise

  • Für bessere Leistung können die Parameter in DetectorOptions angepasst werden
  • Bei begrenzten Ressourcen kann quad_decimate erhöht werden, um die Rechenlast zu verringern
  • Stellen Sie sicher, dass die Tag-Größe mit dem tag_size-Parameter übereinstimmt
  • Für korrekte 3D-Achsenvisualisierung sind genaue Kameraparameter erforderlich

Funktionen

  • Echtzeit-Erkennung mit USB-Kamera
  • Berechnung und Anzeige der 3D-Pose (Position und Ausrichtung)
  • Speicherung von Original- und markierten Bildern
  • Anpassbare Konfiguration und Kameraparameter
  • Vollständiges Kamerakalibrierungstool
  • ROS-unabhängige Python-Version des ursprünglichen ROS-Pakets

Installationsschritte

1. AprilTag C-Bibliothek installieren

Die AprilTag-C-Bibliothek ist erforderlich:

Ubuntu/Debian:

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

Windows:

Windows-Nutzer müssen die Bibliothek selbst kompilieren oder vorkompilierte Binärdateien verwenden und sicherstellen, dass apriltag.dll im System-PATH oder aktuellen Verzeichnis liegt.

2. Python-Abhängigkeiten installieren

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

Anleitung

Schnellstart (empfohlen)

Die einfachste Nutzung erfolgt über das integrierte Tool mit interaktiver Menüführung:

python apriltag_tool.py

Das Tool bietet folgende Optionen:

  1. Schachbrettkalibrierungsmuster generieren
  2. Kamerakalibrierung
  3. AprilTag-Erkennung
  4. Hilfe anzeigen

Folgen Sie einfach den Menüanweisungen.

Kamerakalibrierung

Vor der AprilTag-Erkennung wird eine Kamerakalibrierung empfohlen:

# 首先生成棋盘格标定板
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

Parameter:

Schachbrettgenerator (create_chessboard.py):

  • --size: Anzahl der inneren Ecken (Breite x Höhe, Standard: 9x6)
  • --square: Quadratgröße in Pixeln (Standard: 100)
  • --output: Ausgabedateipfad (Standard: chessboard.png)
  • --dpi: DPI des Ausgabebilds (Standard: 300), beeinflusst Druckgröße

Kamerakalibrierung (camera_calibration.py):

  • --size: Anzahl der inneren Ecken (Standard: 9x6)
  • --square: Reale Quadratgröße in Metern (Standard: 0.025)
  • --output: Ausgabedateipfad (Standard: config/camera/HSK_200W53_1080P.yaml)
  • --camera: Kamera-ID (Standard: 0)
  • --width: Aufnahmebreite (Standard: 1280)
  • --height: Aufnahmehöhe (Standard: 720)
  • --samples: Anzahl benötigter Kalibrierungsbilder (Standard: 20)
  • --preview: Vorschau der Korrektur nach Kalibrierung

Kalibrierungsprozess:

  1. Generieren und drucken Sie das Schachbrettmuster
  2. Messen Sie die reale Quadratgröße (in Metern)
  3. Führen Sie das Kalibrierungsprogramm aus und zeigen Sie das Muster aus verschiedenen Winkeln
  4. Das Programm erkennt automatisch das Muster und sammelt Proben (oder drücken Sie 's' zum manuellen Speichern)
  5. Nach genügend Proben berechnet das Programm die Kameraparameter und speichert sie

AprilTag-Erkennung

Nach der Kalibrierung können Sie das AprilTag-Erkennungsprogramm starten:

python apriltag_detector.py

Erweiterte Nutzung

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

Parameter:

  • Konfigurationsdatei: Pfad zur AprilTag-Konfiguration (Standard: config/vision/tags_36h11_all.json)
  • --camera: Kamera-ID (Standard: 0)
  • --camera_info: Pfad zur Kameraparameterdatei (Standard: config/camera/HSK_200W53_1080P.yaml)
  • --width: Aufnahmebreite (Standard: 1280)
  • --height: Aufnahmehöhe (Standard: 720)

Tastensteuerung

  • q: Programm beenden

Konfigurationsdatei

Alle Systemeinstellungen können in config/vision/table_setup.json angepasst werden:

{
    "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]
        }
    }
}

Über die Konfiguration können Sie:

  1. AprilTag-Detektorparameter einstellen
  2. Kameraparameter konfigurieren (ID, Auflösung, Parameterdatei)
  3. Datenarchivierungsoptionen festlegen
  4. Referenz- und bewegliche Tag-IDs anpassen
  5. Initialisierung steuern (require_initialization auf false setzen, um den Schritt zu überspringen)
  6. Tag-Positionen vordefinieren

Nutzung

Einfache Startmöglichkeit:

python table_tracking.py

Für benutzerdefinierte Konfiguration:

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

Nach dem Start kann mit 'i' die Initialisierung manuell ausgelöst werden.

Häufige Fragen

  1. AprilTag-Bibliothek nicht gefunden

    Stellen Sie sicher, dass die Bibliothek korrekt installiert und auffindbar ist.

  2. Kamera kann nicht geöffnet werden

    Überprüfen Sie die Kamera-ID und ob die Kamera von anderen Programmen genutzt wird.

  3. Ungenauigkeiten bei der Erkennung

    Stellen Sie sicher, dass die Kamera korrekt kalibriert ist und die Tag-Größen in der Konfiguration stimmen.

Dateistruktur

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依赖

Technische Details

Dieses Projekt ist eine ROS-unabhängige Portierung des ROS AprilTag-Pakets mit folgenden Technologien:

  • OpenCV: Bildverarbeitung, Kamerakalibrierung und Pose-Schätzung
  • AprilTag C-Bibliothek: Tag-Erkennung
  • SciPy: Rotationsmatrix- und Quaternionen-Konvertierung

Lizenz

MIT-Lizenz

Neue Funktionen

Multi-Tag-Verfolgung und Okklusionsbehandlung

Das System unterstützt nun:

  1. Initialisierung durch Aufnahme: Beim Start wird eine Initialaufnahme gemacht, die Positionen aller Tags erfasst:

    • Feste Referenz-Tags (ID 0-3)
    • Relative Positionen beweglicher Tags (Standard: ID 4,5,6)
  2. Okklusionsbehandlung: Nach Initialisierung kann das System:

    • Positionen verdeckter Referenz-Tags aus sichtbaren Tags schätzen
    • Positionen verdeckter beweglicher Tags aus sichtbaren Tags berechnen
  3. Multi-Tag-Verfolgung: Gleichzeitige Verfolgung mehrerer beweglicher Tags

    • Bei festen relativen Positionen kann ein sichtbarer Tag zur Schätzung anderer genutzt werden
    • Bewegliche Tag-IDs sind konfigurierbar

Konfiguration

Alle Einstellungen in 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]
        }
    }
}

Anpassungsmöglichkeiten:

  1. IDs für Referenz- und bewegliche Tags
  2. Initialisierungserfordernis (require_initialization)
  3. Vordefinierte Tag-Positionen

Nutzung

  1. Standardkonfiguration:

    python table_tracking.py
    
  2. Benutzerdefinierte Konfiguration:

    python table_tracking.py --config pfad/zur/konfiguration
    
  3. Manuelle Initialisierung: Taste 'i' während des Betriebs

Voraussetzungen

Alle Tags müssen während der Initialisierung sichtbar sein, damit das System die relativen Positionen erfassen kann. Danach kann es auch teilweise verdeckte Tags schätzen.