이것은 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
이 명령은 컴퓨터의 기본 카메라를 열고 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
로 설정하면 초기화 단계 건너뜀)매우 간단하며, 시스템을 시작하려면 하나의 명령만 필요합니다:
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' 키 누르기
초기화 시 모든 태그가 보이는지 확인하세요. 시스템은 태그 간의 상대적 위치 관계를 기록합니다. 초기화 후 일부 태그가 가려져도 시스템은 모든 태그의 위치를 정확히 추정할 수 있습니다.