これはpupil-apriltagsライブラリをベースにしたAprilTag認識ツールキットで、カメラにおけるAprilTagの検出と追跡に使用されます。
Deutsch | English | Español | français | 日本語 | 한국어 | Português | Русский | 中文
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ライブラリは以下のタグファミリーをサポートしています:
AprilTagのCライブラリが必須です。以下の手順でインストールしてください:
sudo apt-get update
sudo apt-get install -y libapriltag-dev
Windowsユーザーは自分でコンパイルするか、プリコンパイル済みバイナリをダウンロードし、apriltag.dll
がシステムPATHまたはカレントディレクトリにあることを確認してください。
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
このツールは以下のメニューオプションを提供します:
メニューの指示に従うだけで全プロセスを完了できます。
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
: キャリブレーション完了後に補正効果をプレビューキャリブレーションプロセス:
キャリブレーション完了後、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]
}
}
}
設定ファイルを変更することで:
require_initialization
を false
に設定すると初期化ステップをスキップ)非常に簡単で、1つのコマンドでシステムを起動できます:
python table_tracking.py
カスタム設定ファイルを使用する場合:
python table_tracking.py --config 自定义配置文件路径
システム実行後、'i'キーでいつでも手動で初期化プロセスをトリガーできます。
apriltagライブラリが見つからない
apriltagライブラリが正しくインストールされ、システムで見つけられることを確認してください。
カメラが開けない
カメラデバイスIDが正しいか、他のプログラムでカメラが使用されていないか確認してください。
検出結果が不正確
カメラが正しくキャリブレーションされ、設定ファイルのタグサイズが正しいことを確認してください。
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依存関係を削除し、コア機能を保持しています。 主に以下の技術を使用:
このプロジェクトはMITライセンスに基づきます
本システムは現在以下の新機能をサポート:
写真初期化: システム起動後、自動的に写真初期化を実行し、タグの位置関係を記録:
オクルージョン処理: 初期化後、一部のタグが遮蔽されても:
複数タグ追跡: 複数の移動タグを同時追跡、デフォルトでID 4,5,6をサポート
システムのすべての設定は 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]
}
}
}
設定ファイルを変更することで:
require_initialization
を false
に設定すると初期化ステップをスキップ)デフォルト設定でシステム起動:
python table_tracking.py
カスタム設定ファイルでシステム起動:
python table_tracking.py --config カスタム設定ファイルパス
手動初期化:システム実行中に 'i' キーを押す
初期化時にすべてのタグが可視であることを確認してください。システムはタグ間の相対位置関係を記録します。初期化後、一部のタグが遮蔽されても、システムはすべてのタグの位置を正しく推定できます。