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

これにより、デフォルトのPCカメラが起動し、AprilTagをリアルタイムで検出します。"q"キーで終了します。

対応タグファミリー

pupil-apriltagsライブラリは以下のタグファミリーをサポートしています:

  • tag36h11 (デフォルト)
  • tag25h9
  • tag16h5
  • tagCircle21h7
  • tagCircle49h12
  • tagStandard41h12
  • tagStandard52h13
  • tagCustom48h12

注意事項

  • パフォーマンス向上のため、DetectorOptionsのパラメータを調整可能
  • 計算リソースが限られているデバイスでは、quad_decimateパラメータを増やして計算量を削減可能
  • 使用するAprilTagマーカーのサイズがコード中のtag_sizeパラメータと一致していることを確認
  • 3D座標軸の描画には正確なカメラパラメータが必要

機能特徴

  • USBカメラによるリアルタイムAprilTag検出をサポート
  • タグの3D姿勢(位置と方向)を計算・表示
  • 元画像とマークアップ画像の保存をサポート
  • カスタム設定とカメラパラメータの調整可能
  • 完全なカメラキャリブレーションツールを含む
  • ROSに依存しない、元ROSパッケージの純粋なPythonスタンドアロンバージョン

インストール手順

1. AprilTag Cライブラリのインストール

AprilTagのCライブラリが必須です。以下の手順でインストールしてください:

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_initializationfalse に設定すると初期化ステップをスキップ)
  6. タグの位置情報を事前設定

使用方法

非常に簡単で、1つのコマンドでシステムを起動できます:

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: 画像処理、カメラキャリブレーション、姿勢推定
  • AprilTag Cライブラリ: タグ検出
  • SciPy: 回転行列とクォータニオン変換

ライセンス

このプロジェクトはMITライセンスに基づきます

新機能説明

複数タグ追跡とオクルージョン処理

本システムは現在以下の新機能をサポート:

  1. 写真初期化: システム起動後、自動的に写真初期化を実行し、タグの位置関係を記録:

    • 固定参照タグ(ID 0-3)の位置
    • 複数の移動タグ(デフォルト ID 4,5,6)間の相対位置関係
  2. オクルージョン処理: 初期化後、一部のタグが遮蔽されても:

    • 参照タグが遮蔽された場合、システムは他の可視参照タグを使用して遮蔽タグの位置を推定
    • 移動タグが遮蔽された場合、システムは他の可視移動タグを通じて遮蔽移動タグの位置を推定
  3. 複数タグ追跡: 複数の移動タグを同時追跡、デフォルトでID 4,5,6をサポート

    • 移動タグ間の相対位置が固定されている場合、1つが可視であれば他のタグの位置を推定可能
    • 設定ファイルで移動タグ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_initializationfalse に設定すると初期化ステップをスキップ)
  3. タグの位置情報を事前設定

使用方法

  1. デフォルト設定でシステム起動:

    python table_tracking.py
    
  2. カスタム設定ファイルでシステム起動:

    python table_tracking.py --config カスタム設定ファイルパス
    
  3. 手動初期化:システム実行中に 'i' キーを押す

実行要件

初期化時にすべてのタグが可視であることを確認してください。システムはタグ間の相対位置関係を記録します。初期化後、一部のタグが遮蔽されても、システムはすべてのタグの位置を正しく推定できます。