這些是Aprilrobotics開發的Apriltags 3庫的Python綁定。受馬特·扎克(Matt Zucker)的Apriltags2綁定的啟發。
原始庫是使用BSD 2-CORAESE許可證發布的。
您可以使用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
。在為手臂架構構建車輪時,QEMU將用於模擬目標CPU。使用以下命令為arm32v7
體系結構構建。
make build ARCH=arm32v7
可以通過運行命令來釋放所有dist/
內部構建的車輪(將其推向pypi.org)
make upload
使用以下命令為Python 2和3和CPU Architecture 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.8) |
Refine_edges | 1 | 當非零時,將每個四邊形的邊緣調整為“快照”到附近的強梯度。當採用拆卸時,這很有用,因為它可以大大提高初始四分之一估計的質量。通常建議使用(1)。計算上很便宜。如果quad_decimation = 1,將忽略選項 |
decode_sharpening | 0.25 | 解碼圖像應進行多少銳化?這可以有助於解碼小標籤,但在奇怪的照明條件或低光條件下可能會有所幫助 |
搜索路徑 | ['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的標籤。 |
deciest_margin | 二進制解碼過程質量的度量:數據位強度與決策閾值之間的平均差異。較高的數字大致表示更好的解碼。這是僅對於非常小的標籤的合理衡量檢測準確性 - 對於較大的標籤而言無效(我們本可以在一個位單元中的任何地方進行採樣,並且仍然可以得到良好的檢測。 |
同型 | 3x3同型矩陣描述了“理想”標籤的投影(在(-1,1),(1,1),(1,1,-1)和(-1,-1))到像素中的像素圖像。 |
中心 | 圖像像素坐標中檢測的中心。 |
角落 | 圖像像素坐標中標籤的角落。這些總是在標籤上纏繞反對鎖定。 |
pose_r* | 姿勢估計的旋轉矩陣。 |
pose_t* | 姿勢估計的翻譯。 |
pose_err* | 估計的對象空間誤差。 |
如果要使用自定義佈局,則需要為其創建C源和標頭文件,然後再次構建庫。然後使用新的libapriltag.so
庫。您可以找到有關原始Apriltags存儲庫的更多信息。
車輪建在碼頭容器內部。該存儲庫根中的Dockerfile是構建環境的模板。構建環境基於ubuntu:18.04
,正確版本的Python即時安裝。如果在構建車輪之前不存在, make build
命令將創建構建環境。
構建環境(Docker Image)準備就緒後,將啟動一個Docker容器,並具有以下配置:
/source
;dist/
將其安裝為目標目錄下/out
的目的目錄; assets/build.sh
的構建腳本將在容器內執行。構建步驟是:
/source
複製到臨時位置(容器內部)apriltags/
構建apriltag庫(將產生.SO庫文件)package_data
)/out
(將彈出在容器dist/
外部 /外部)