이들은 Apriltags 3 라이브러리에 대한 Python 바인딩입니다. Matt Zucker의 Apriltags2 바인딩에서 영감을 얻었습니다.
원본 라이브러리는 BSD 2-Clause 라이센스와 함께 게시됩니다.
pip
(또는 Python 3의 경우 pip3
)를 사용하여 설치할 수 있습니다.
pip install dt-apriltags
특정 릴리스를 원한다면 다음과 같이 추가하십시오.
pip install [email protected]
이 저장소를 복제하고 탐색하십시오. 그런 다음 Apriltags 하위 모듈을 초기화합니다.
$ git submodule init
$ git submodule update
Apriltags C 라이브러리를 구축하고 새로 제작 한 라이브러리를 PIP 휠에 포함시킵니다.
$ make build
새로운 휠은 디렉토리 dist/
에서 사용할 수 있습니다. 이제 휠을 설치할 수 있습니다
pip install dt_apriltags-VERSION-pyPYMAJOR-none-ARCH.whl
참고 :이 라이브러리의 현재 VERSION
과 Python 버전을 기반으로 PYMAJOR
사용했으며 CPU ARCH
의 아키텍처와 함께 위의 파일 이름은 다양합니다.
이 라이브러리는 Python 2
및 3
의 건물 휠을 지원합니다. Python 2는 기본적으로 사용됩니다. 다음 명령을 사용하여 Python 3을 위해 빌드하십시오.
make build PYTHON_VERSION=3
이 라이브러리는 CPU 아키텍처 amd64
, arm32v7
및 arm64v8
의 건물 휠을 지원합니다. 기본 아키텍처는 amd64
입니다. ARM 아키텍처를위한 휠을 구축 할 때 QEMU는 대상 CPU를 모방하는 데 사용됩니다. arm32v7
아키텍처를 위해 다음 명령을 사용하여 빌드하십시오.
make build ARCH=arm32v7
dist/
내부에 제작 된 모든 바퀴는 명령을 실행하여 릴리스 될 수 있습니다 (pypi.org로 푸시)
make upload
다음 명령을 사용하여 Python 2 및 3 및 CPU 아키텍처 amd64
및 arm32v7
용 휠을 구축하고 해제하십시오.
make release-all
사용의 일부 예는 test.py
파일에서 볼 수 있습니다. Detector
클래스는 Apriltags 기능 주변의 래퍼입니다. 다음과 같이 초기화 할 수 있습니다.
at_detector = Detector(searchpath=['apriltags'],
families='tag36h11',
nthreads=1,
quad_decimate=1.0,
quad_sigma=0.0,
refine_edges=1,
decode_sharpening=0.25,
debug=0)
옵션은 다음과 같습니다.
옵션 | 기본 | 설명 |
---|---|---|
가족 | 'tag36h11' | 공간으로 분리 된 패밀리 태그 |
nthreads | 1 | 스레드 수 |
max_hamming | 2 | 성공적인 태그 감지를 생성하기 위해 뒤집을 수있는 최대 비트 수. 노이즈로 인해 일부 데이터 비트가 잘못 읽히지 만 잘못된 양성을 증가시킬 때 오 탐지를 줄일 수 있습니다. |
quad_decimate | 2.0 | 쿼드의 감지는 저해상도 이미지에서 수행 할 수 있으며, 포즈 정확도 비용과 감지 속도의 약간의 감소로 속도를 향상시킬 수 있습니다. 이진 페이로드 디코딩은 여전히 최대 해상도로 수행됩니다. 전체 해상도를 사용하려면 이것을 1.0으로 설정하십시오. |
quad_sigma | 0.0 | 가우시안 블러는 세그먼트 이미지에 적용해야합니다. 매개 변수는 픽셀의 표준 편차입니다. 매우 시끄러운 이미지는 0이 아닌 값의 혜택을받습니다 (예 : 0.8) |
정리 _edges | 1 | 0이 아닌 경우 각 쿼드의 가장자리는 "강한 그라디언트"로 조정됩니다. 이것은 초기 쿼드 추정치의 품질을 크게 증가시킬 수 있으므로 소멸을 사용하는 경우 유용합니다. 일반적으로 (1)에 권장됩니다. 매우 계산적으로 저렴합니다. quad_decimate = 1이면 옵션이 무시됩니다 |
decode_sharpening | 0.25 | 디코딩 된 이미지를 위해 얼마나 샤프닝을해야합니까? 이것은 작은 태그를 해독하는 데 도움이 될 수 있지만 홀수 조명 조건이나 낮은 조명 조건에서 도움이 될 수 있습니다. |
SearchPath | [ 'Apriltags'] | Apriltag 3 라이브러리를 찾는 곳, 목록이어야합니다. |
디버그 | 0 | 1 인 경우 디버그 이미지를 저장합니다. 매우 느리게 실행됩니다 |
이미지에서 태그 감지는 탐지기의 detect
방법을 실행하여 수행됩니다.
tags = at_detector.detect(img, estimate_tag_pose=False, camera_params=None, tag_size=None)
태그 포즈를 추출하려면 estimate_tag_pose
True
로 설정하고 camera_params
( [fx, fy, cx, cy]
) 및 tag_size
(미터)를 제공해야합니다. detect
메소드는 각각 다음 속성을 갖는 Detection
객체 목록을 반환합니다 (별표가있는 개체는 estimate_tag_pose=True
인 경우에만 계산됩니다) :
기인하다 | 설명 |
---|---|
tag_family | 태그의 가족. |
tag_id | 태그의 디코딩 된 ID. |
해밍 | 몇 개의 오류 비트가 수정 되었습니까? 참고 : 많은 수의 수정 된 오류를 받아들이면 오 탐지율이 크게 증가합니다. 참고 :이 구현 시점에서 탐지기는 3보다 큰 해밍 거리의 태그를 감지 할 수 없습니다. |
decision_margin | 이진 디코딩 프로세스의 품질 측정 : 데이터 비트의 강도와 의사 결정 임계 값의 평균 차이. 더 높은 숫자는 대략 더 나은 디코드를 나타냅니다. 이것은 매우 작은 태그에 대해서만 합리적인 탐지 정확도 측정입니다. 큰 태그에는 효과적이지 않습니다 (비트 셀 내에서 어디서나 샘플링하고 여전히 좋은 탐지를 받았을 수 있습니다.) |
동종 조영술 | "이상적인"태그 ((-1,1), (1,1), (1, -1) 및 (-1, -1))로부터의 투영을 설명하는 3x3 homography 매트릭스는 영상. |
센터 | 이미지 픽셀 좌표에서 감지 중심. |
코너 | 이미지 픽셀 좌표의 태그 모서리. 이것들은 항상 태그 주위에 카운터 클록을 감싸고 있습니다. |
pose_r* | 포즈 추정치의 회전 행렬. |
pose_t* | 포즈 추정의 번역. |
pose_err* | 추정의 객체 공간 오류. |
사용자 정의 레이아웃을 사용하려면 C 소스 및 헤더 파일을 작성한 다음 라이브러리를 다시 빌드해야합니다. 그런 다음 새로운 libapriltag.so
라이브러리를 사용하십시오. 원래 Apriltags 저장소에 대한 자세한 내용은 찾을 수 있습니다.
휠은 Docker 컨테이너 내부에 제작되었습니다. 이 저장소의 루트에있는 dockerfile은 빌드 환경을위한 템플릿입니다. 빌드 환경은 ubuntu:18.04
기반으로하며 올바른 버전의 Python은 즉시 설치됩니다. make build
Command는 휠을 만들기 전에 존재하지 않으면 빌드 환경을 만듭니다.
빌드 환경 (Docker Image)이 준비되면 Docker 컨테이너가 다음 구성으로 시작됩니다.
/source
에 장착됩니다.dist/
대상 디렉토리 아래 /out
으로 장착됩니다. assets/build.sh
의 빌딩 스크립트는 컨테이너 내부에서 실행됩니다. 빌드 단계는 다음과 같습니다.
/source
에서 온도 위치 (컨테이너 내부)apriltags/
(.so 라이브러리 파일을 생성합니다)에서 Apriltag 라이브러리 빌드package_data
로 내장되어 있습니다)/out
(컨테이너 외부에서 dist/
됩니다)