Ini adalah binding Python untuk perpustakaan Apriltags 3 yang dikembangkan oleh AprilRobotics. Terinspirasi oleh binding apriltags2 oleh Matt Zucker.
Perpustakaan asli diterbitkan dengan lisensi BSD 2-Clause.
Anda dapat menginstal menggunakan pip
(atau pip3
untuk Python 3):
pip install dt-apriltags
Dan jika Anda menginginkan rilis tertentu, tambahkan seperti ini:
pip install [email protected]
Kloning repositori ini dan bernavigasi di dalamnya. Kemudian inisialisasi submodule apriltags:
$ git submodule init
$ git submodule update
Bangun perpustakaan C apriltags dan embed perpustakaan yang baru dibangun ke dalam roda pip.
$ make build
Roda baru akan tersedia di direktori dist/
. Anda sekarang dapat memasang roda
pip install dt_apriltags-VERSION-pyPYMAJOR-none-ARCH.whl
Catatan: Berdasarkan VERSION
perpustakaan ini saat ini dan versi Python menggunakan PYMAJOR
, bersama dengan arsitektur ARCH
CPU Anda, nama file di atas bervariasi.
Perpustakaan ini mendukung roda bangunan untuk Python 2
dan 3
. Python 2 akan digunakan secara default. Gunakan perintah berikut untuk membangun Python 3.
make build PYTHON_VERSION=3
Perpustakaan ini mendukung roda bangunan untuk Arsitektur CPU amd64
, arm32v7
, dan arm64v8
. Arsitektur default adalah amd64
. Saat membangun roda untuk arsitektur lengan, QEMU akan digunakan untuk meniru CPU target. Gunakan perintah berikut untuk membangun arsitektur arm32v7
.
make build ARCH=arm32v7
Semua roda yang dibangun di dalam dist/
dapat dilepaskan (didorong ke pypi.org) dengan menjalankan perintah
make upload
Gunakan perintah berikut untuk membangun dan melepaskan roda untuk arsitektur Python 2 dan 3 dan CPU amd64
dan arm32v7
.
make release-all
Beberapa contoh penggunaan dapat dilihat di file test.py
Kelas Detector
adalah pembungkus di sekitar fungsionalitas apriltags. Anda dapat menginisialisasi sebagai berikut:
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)
Pilihannya adalah:
Pilihan | Bawaan | Penjelasan |
---|---|---|
keluarga | 'TAG36H11' | Tag keluarga, dipisahkan dengan ruang |
nthreads | 1 | Jumlah utas |
max_hamming | 2 | Jumlah maksimum bit yang diizinkan untuk dibalik untuk menghasilkan deteksi tag yang berhasil. Dapat membantu mengurangi negatif palsu ketika kebisingan menyebabkan beberapa bit data dibaca secara tidak benar, tetapi juga dapat meningkatkan positif palsu. |
quad_decimate | 2.0 | Deteksi paha depan dapat dilakukan pada gambar resolusi yang lebih rendah, meningkatkan kecepatan dengan biaya akurasi pose dan sedikit penurunan tingkat deteksi. Decoding Payload biner masih dilakukan dengan resolusi penuh. Atur ini ke 1.0 untuk menggunakan resolusi penuh. |
quad_sigma | 0,0 | Apa yang harus diterapkan Gaussian Blur pada gambar tersegmentasi. Parameter adalah standar deviasi dalam piksel. Gambar yang sangat bising mendapat manfaat dari nilai bukan nol (misalnya 0,8) |
Refine_edges | 1 | Ketika bukan nol, tepi masing-masing quad disesuaikan untuk "mengambil" gradien kuat di dekatnya. Ini berguna ketika desimasi digunakan, karena dapat meningkatkan kualitas estimasi quad awal secara substansial. Umumnya disarankan untuk berada di (1). Sangat murah secara komputasi. Opsi diabaikan jika quad_decimate = 1 |
decode_sharpening | 0.25 | Berapa banyak penajaman yang harus dilakukan pada gambar yang diterjemahkan? Ini dapat membantu mendekode tag kecil tetapi mungkin atau mungkin tidak membantu dalam kondisi pencahayaan yang aneh atau kondisi cahaya rendah |
Searchpath | ['apriltags'] | Di mana mencari perpustakaan apriltag 3, harus menjadi daftar |
debug | 0 | Jika 1, akan menyimpan gambar debug. Berjalan sangat lambat |
Deteksi tag dalam gambar dilakukan dengan menjalankan metode detect
detektor:
tags = at_detector.detect(img, estimate_tag_pose=False, camera_params=None, tag_size=None)
Jika Anda juga ingin mengekstrak pose tag, estimate_tag_pose
harus diatur ke True
dan camera_params
( [fx, fy, cx, cy]
) dan tag_size
(dalam meter) harus disediakan. Metode detect
mengembalikan daftar objek Detection
yang masing -masing memiliki atribut berikut (perhatikan bahwa yang dengan tanda bintang dihitung hanya jika estimate_tag_pose=True
):
Atribut | Penjelasan |
---|---|
tag_family | Keluarga tag. |
tag_id | ID decoded tag. |
Hamming | Berapa banyak bit kesalahan yang diperbaiki? Catatan: Menerima sejumlah besar kesalahan yang dikoreksi menyebabkan tingkat positif palsu yang sangat meningkat. Catatan: Pada implementasi ini, detektor tidak dapat mendeteksi tag dengan jarak hamming lebih besar dari 3. |
Decision_margin | Ukuran kualitas proses decoding biner: perbedaan rata -rata antara intensitas bit data versus ambang keputusan. Angka yang lebih tinggi secara kasar menunjukkan decod yang lebih baik. Ini adalah ukuran akurasi deteksi yang masuk akal hanya untuk tag yang sangat kecil- tidak efektif untuk tag yang lebih besar (di mana kami dapat mengambil sampel di mana saja dalam sel sedikit dan masih mendapatkan deteksi yang baik.) |
homografi | Matriks homografi 3x3 yang menggambarkan proyeksi dari tag "ideal" (dengan sudut di (-1,1), (1,1), (1, -1), dan (-1, -1)) ke piksel di dalam gambar. |
tengah | Pusat deteksi dalam koordinat piksel gambar. |
sudut | Sudut -sudut tag dalam koordinat piksel gambar. Ini selalu membungkus jam balasan di sekitar tag. |
masalah sulit* | Matriks rotasi estimasi pose. |
pose_t* | Terjemahan estimasi pose. |
pose_err* | Kesalahan ruang objek dari estimasi. |
Jika Anda ingin menggunakan tata letak khusus, Anda perlu membuat sumber C dan header untuk itu dan kemudian membangun perpustakaan lagi. Kemudian gunakan perpustakaan libapriltag.so
baru. Anda dapat menemukan informasi lebih lanjut tentang repositori apriltags asli.
Roda dibangun di dalam wadah Docker. Dockerfile di akar repositori ini adalah templat untuk lingkungan pembangunan. Lingkungan build didasarkan pada ubuntu:18.04
dan versi Python yang benar dipasang dengan cepat. Perintah make build
akan menciptakan lingkungan build jika tidak ada sebelum membangun roda.
Setelah lingkungan build (gambar Docker) siap, wadah Docker diluncurkan dengan konfigurasi berikut:
/source
;dist/
dipasang sebagai direktori tujuan di bawah /out
; Skrip bangunan dari assets/build.sh
akan dieksekusi di dalam wadah. Langkah -langkah pembuatannya adalah:
/source
ke lokasi temp (di dalam wadah)apriltags/
(akan menghasilkan file perpustakaan .so)package_data
)/out
(akan muncul di dist/
di luar wadah)