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

이 명령은 컴퓨터의 기본 카메라를 열고 AprilTag를 실시간으로 감지합니다. "q" 키를 눌러 종료하세요.

지원되는 태그 패밀리

pupil-apriltags 라이브러리는 다음 태그 패밀리를 지원합니다:

  • tag36h11 (기본값)
  • tag25h9
  • tag16h5
  • tagCircle21h7
  • tagCircle49h12
  • tagStandard41h12
  • tagStandard52h13
  • tagCustom48h12

주의 사항

  • 더 나은 성능을 위해 DetectorOptions의 매개변수를 조정할 수 있습니다
  • 계산 리소스가 제한된 장치의 경우 quad_decimate 매개변수를 증가시켜 계산 복잡도를 낮출 수 있습니다
  • 사용하는 AprilTag 마커의 크기가 코드의 tag_size 매개변수와 일치하는지 확인하세요
  • 3D 좌표축을 그리려면 정확한 카메라 파라미터가 필요합니다

기능 특징

  • USB 카메라 실시간 AprilTag 감지 지원
  • 태그의 3D 포즈(위치 및 방향) 계산 및 표시
  • 원본 및 마킹된 이미지 저장 지원
  • 사용자 정의 구성 및 카메라 파라미터 지원
  • 완전한 카메라 캘리브레이션 도구 포함
  • 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. 태그 위치 정보 사전 설정

사용 방법

매우 간단하며, 시스템을 시작하려면 하나의 명령만 필요합니다:

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을 지원합니다

    • 이동 태그 간의 상대적 위치가 고정된 경우 하나라도 보이면 다른 태그의 위치를 추정할 수 있습니다
    • 설정 파일에서 이동 태그 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' 키 누르기

실행 요구 사항

초기화 시 모든 태그가 보이는지 확인하세요. 시스템은 태그 간의 상대적 위치 관계를 기록합니다. 초기화 후 일부 태그가 가려져도 시스템은 모든 태그의 위치를 정확히 추정할 수 있습니다.