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.

Bibliothèque autonome de détection AprilTag

Ceci est un outil de reconnaissance AprilTag basé sur la bibliothèque pupil-apriltags, utilisé pour la détection et le suivi des AprilTag dans les flux caméra.

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

Dépendances

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

Installation

  1. Assurez-vous d'avoir un environnement Python installé
  2. Installez les dépendances nécessaires :
pip install opencv-python numpy pupil-apriltags

Mode d'emploi

Utilisation de base

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

Visualisation des résultats

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)

Exécution du script de test

Un script de test simple est fourni pour valider la fonctionnalité de détection AprilTag :

python test_apriltag.py

Ceci ouvrira la caméra par défaut et détectera les AprilTag en temps réel. Appuyez sur "q" pour quitter.

Familles de tags supportées

La bibliothèque pupil-apriltags supporte les familles de tags suivantes :

  • tag36h11 (par défaut)
  • tag25h9
  • tag16h5
  • tagCircle21h7
  • tagCircle49h12
  • tagStandard41h12
  • tagStandard52h13
  • tagCustom48h12

Notes importantes

  • Pour de meilleures performances, ajustez les paramètres dans DetectorOptions
  • Sur les appareils limités en ressources, augmentez quad_decimate pour réduire la complexité
  • Assurez-vous que la taille des marqueurs AprilTag correspond au paramètre tag_size dans le code
  • Le tracé des axes 3D nécessite des paramètres caméra précis

Fonctionnalités

  • Détection en temps réel depuis caméra USB
  • Calcul et affichage de la pose 3D (position et orientation)
  • Sauvegarde des images brutes et annotées
  • Configuration personnalisable
  • Outil complet d'étalonnage caméra
  • Version Python autonome sans dépendance ROS

Procédure d'installation

1. Installation de la bibliothèque C AprilTag

La bibliothèque C AprilTag est requise :

Ubuntu/Debian :

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

Windows :

Les utilisateurs Windows doivent compiler ou télécharger les binaires précompilés, et s'assurer que apriltag.dll est dans le PATH système ou le répertoire courant.

2. Installation des dépendances 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

Guide d'utilisation

Démarrage rapide (recommandé)

L'outil intégré propose un menu interactif :

python apriltag_tool.py

Options du menu :

  1. Générer une mire d'étalonnage
  2. Étalonner la caméra
  3. Détection AprilTag
  4. Afficher l'aide

Étalonnage caméra

Recommandé avant la détection 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

Paramètres :

Générateur de mire (create_chessboard.py) :

  • --size : Nombre de coins internes (défaut : 9x6)
  • --square : Taille des carrés en pixels (défaut : 100)
  • --output : Fichier de sortie (défaut : chessboard.png)
  • --dpi : Résolution de l'image (défaut : 300)

Programme d'étalonnage (camera_calibration.py) :

  • --size : Nombre de coins internes (défaut : 9x6)
  • --square : Taille réelle des carrés en mètres (défaut : 0.025)
  • --output : Fichier de sortie (défaut : config/camera/HSK_200W53_1080P.yaml)
  • --camera : ID de la caméra (défaut : 0)
  • --width : Largeur de capture (défaut : 1280)
  • --height : Hauteur de capture (défaut : 720)
  • --samples : Nombre d'échantillons (défaut : 20)
  • --preview : Aperçu après étalonnage

Procédure :

  1. Générer et imprimer la mire
  2. Mesurer la taille réelle des carrés
  3. Exécuter le programme et capturer sous différents angles
  4. Appuyer sur 's' pour sauvegarder manuellement
  5. Le programme calcule automatiquement les paramètres

Détection AprilTag

Après étalonnage :

python apriltag_detector.py

Utilisation avancée

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

Paramètres :

  • Chemin du fichier de config : Fichier de configuration AprilTag (défaut : config/vision/tags_36h11_all.json)
  • --camera : ID de la caméra (défaut : 0)
  • --camera_info : Fichier des paramètres intrinsèques (défaut : config/camera/HSK_200W53_1080P.yaml)
  • --width : Largeur de capture (défaut : 1280)
  • --height : Hauteur de capture (défaut : 720)

Commandes clavier

  • q : Quitter

Configuration

Tous les paramètres sont configurables dans 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]
        }
    }
}

Options :

  1. Paramètres du détecteur AprilTag
  2. Configuration caméra
  3. Options d'archivage
  4. Personnalisation des tags de référence et mobiles
  5. Contrôle de l'initialisation (require_initialization)
  6. Positions prédéfinies des tags

Mode d'emploi

Commande de base :

python table_tracking.py

Avec configuration personnalisée :

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

Appuyer sur 'i' pour initialiser manuellement.

FAQ

  1. Bibliothèque AprilTag introuvable

    Vérifiez l'installation et le PATH.

  2. Caméra inaccessible

    Vérifiez l'ID et les conflits.

  3. Détection imprécise

    Vérifiez l'étalonnage et la taille des tags.

Structure des fichiers

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

Aspects techniques

Version autonome dérivée du package ROS AprilTag, utilisant :

  • OpenCV : Traitement d'image et estimation de pose
  • Bibliothèque C AprilTag : Détection
  • SciPy : Conversions de matrices de rotation

Licence

Projet sous licence MIT

Nouvelles fonctionnalités

Suivi multi-tags et gestion des occultations

Nouvelles capacités :

  1. Initialisation par capture :

    • Enregistrement des positions des tags de référence (ID 0-3)
    • Relations spatiales entre tags mobiles (ID 4,5,6 par défaut)
  2. Gestion des occultations :

    • Estimation des tags cachés via les tags visibles
  3. Suivi multi-tags :

    • Tracking simultané de plusieurs tags mobiles
    • Personnalisation des IDs dans le fichier de config

Configuration

Personnalisation via 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]
        }
    }
}

Options :

  1. IDs des tags de référence et mobiles
  2. Contrôle de l'initialisation
  3. Positions prédéfinies

Utilisation

  1. Configuration par défaut :

    python table_tracking.py
    
  2. Configuration personnalisée :

    python table_tracking.py --config chemin/vers/config
    
  3. Initialisation manuelle : touche 'i'

Prérequis

Tous les tags doivent être visibles lors de l'initialisation pour enregistrer leurs relations spatiales.