Dies sind Python -Bindungen für die von Aprilrobotics entwickelte Apriltags 3 -Bibliothek. Inspiriert von den Apriltags2 -Bindungen von Matt Zucker.
Die ursprüngliche Bibliothek wird mit einer BSD 2-Clause-Lizenz veröffentlicht.
Sie können mit pip
(oder pip3
für Python 3) installieren:
pip install dt-apriltags
Und wenn Sie eine bestimmte Veröffentlichung möchten, fügen Sie sie so hinzu:
pip install [email protected]
Klonen Sie dieses Repository und navigieren Sie darin. Initialisieren Sie dann das Apriltags -Submodul:
$ git submodule init
$ git submodule update
Bauen Sie die Apriltags C-Bibliothek und setzen Sie die neu gebaute Bibliothek in das PIP-Rad ein.
$ make build
Das neue Rad wird im Verzeichnis dist/
erhältlich sein. Sie können jetzt das Rad installieren
pip install dt_apriltags-VERSION-pyPYMAJOR-none-ARCH.whl
HINWEIS: Basierend auf der aktuellen VERSION
dieser Bibliothek und der Version von Python verwendete PYMAJOR
zusammen mit der Architektur Ihres CPU ARCH
, der obige Dateiname.
Diese Bibliothek unterstützt die Bauräder für Python 2
und 3
. Python 2 wird standardmäßig verwendet. Verwenden Sie den folgenden Befehl, um für Python 3 zu erstellen.
make build PYTHON_VERSION=3
Diese Bibliothek unterstützt Bauräder für die CPU -Architekturen amd64
, arm32v7
und arm64v8
. Die Standardarchitektur ist amd64
. Beim Bauen von Rädern für Armarchitekturen wird QEMU verwendet, um die Ziel -CPU zu emulieren. Verwenden Sie den folgenden Befehl, um für die arm32v7
-Architektur zu erstellen.
make build ARCH=arm32v7
Alle Räder, die in dist/
können (auf pypi.org gedrückt) durch Ausführen des Befehls freigegeben werden können
make upload
Verwenden Sie den folgenden Befehl, um Räder für die Python 2 und 3 und die CPU -Architektur amd64
und arm32v7
zu erstellen.
make release-all
Einige Beispiele für die Nutzung sind in der Datei test.py
zu sehen. Die Detector
ist eine Wrapper um die Apriltags -Funktionalität. Sie können es initialisieren wie folgt:
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)
Die Optionen sind:
Option | Standard | Erläuterung |
---|---|---|
Familien | 'Tag36H11' | Tag -Tag, getrennt mit einem Raum |
Nthreads | 1 | Anzahl der Threads |
max_hamming | 2 | Die maximale Anzahl von Bits, die umgedreht werden dürfen, um eine erfolgreiche Tag -Erkennung zu erzeugen. Kann dazu beitragen, falsche Negative zu verringern, wenn Rauschen dazu führt, dass einige Datenbits falsch gelesen werden, aber auch falsch positive Aspekte erhöhen können. |
quad_decimate | 2.0 | Die Erkennung von Quads kann auf einem Bild mit niedrigerer Auflösung durchgeführt werden, wodurch die Geschwindigkeit bei Kosten der Posegenauigkeit und einer leichten Abnahme der Erkennungsrate verbessert werden kann. Die Dekodierung der binären Nutzlast erfolgt immer noch bei voller Lösung. Stellen Sie dies auf 1.0 ein, um die vollständige Auflösung zu verwenden. |
Quad_Sigma | 0,0 | Welche Gaußsche Unschärfe sollte auf das segmentierte Bild angewendet werden. Parameter ist die Standardabweichung in Pixeln. Sehr verrauschte Bilder profitieren von Werten ungleich Null (z. B. 0,8) |
Refine_edges | 1 | Bei ungleich Null werden die Kanten jedes Quads auf "Snap an" starke Gradienten in der Nähe angepasst. Dies ist nützlich, wenn die Dezimierung verwendet wird, da sie die Qualität der anfänglichen Quad -Schätzung erheblich erhöhen kann. Im Allgemeinen empfohlen, (1) zu sein. Sehr rechnerisch günstig. Die Option wird ignoriert, wenn quad_decimate = 1 |
decode_sharpening | 0,25 | Wie viel Schärfen sollte für dekodierte Bilder getan werden? Dies kann helfen, kleine Tags zu dekodieren, kann jedoch bei seltsamen Beleuchtungsbedingungen oder bei schlechten Lichtverhältnissen helfen oder nicht |
Suchpfad | ['Apriltags'] | Wo Sie nach der Apriltag 3 -Bibliothek suchen müssen, muss eine Liste sein |
debuggen | 0 | Wenn 1, speichert Debug -Bilder. Läuft sehr langsam |
Die Erkennung von Tags in Bildern erfolgt durch Ausführen der detect
des Detektors:
tags = at_detector.detect(img, estimate_tag_pose=False, camera_params=None, tag_size=None)
Wenn Sie auch die Tag -Pose extrahieren möchten, sollte estimate_tag_pose
auf True
gesetzt und camera_params
( [fx, fy, cx, cy]
) und tag_size
(in Meter) geliefert werden. Die detect
gibt eine Liste von Detection
zurück, die jeweils die folgenden Attribute haben (Beachten Sie, dass diejenigen mit einem Sternchen nur berechnet werden, wenn estimate_tag_pose=True
):
Attribut | Erläuterung |
---|---|
Tag_Family | Die Familie des Tags. |
tag_id | Die dekodierte ID des Tags. |
Hamming | Wie viele Fehlerbits wurden korrigiert? Hinweis: Das Akzeptieren einer großen Anzahl von korrigierten Fehlern führt zu stark erhöhten falsch positiven Raten. HINWEIS: Zum Zeitpunkt dieser Implementierung können der Detektor Tags nicht mit einer Hamming -Entfernung von mehr als 3 erkennen. |
Entscheidung_Margin | Ein Maß für die Qualität des binären Dekodierungsprozesses: die durchschnittliche Differenz zwischen der Intensität eines Datenbits gegenüber dem Entscheidungsschwellenwert. Höhere Zahlen weisen grob auf bessere Decodes hin. Dies ist ein vernünftiges Maß für die Erkennungsgenauigkeit nur für sehr kleine Tags- für größere Tags nicht wirksam (bei denen wir uns überall in einer Bitzelle hätten probieren können und dennoch eine gute Erkennung erhalten haben.) |
Homographie | Die 3x3-Homographie-Matrix, die die Projektion aus einem "idealen" Tag (mit Ecken bei (-1,1), (1,1), (1, -1) und (-1, -1)) zu Pixel in der beschreibt Bild. |
Center | Die Mitte der Erkennung in Bildpixelkoordinaten. |
Ecken | Die Ecken des Tags in Bildpixelkoordinaten. Diese wickeln immer gegen den Tag um den Tag um das Etikett. |
Pose_r* | Rotationsmatrix der Posenschätzung. |
Pose_t* | Übersetzung der Posenschätzung. |
Pose_err* | Objektraumfehler der Schätzung. |
Wenn Sie ein benutzerdefiniertes Layout verwenden möchten, müssen Sie die C -Quell- und Header -Dateien dafür erstellen und die Bibliothek erneut erstellen. Verwenden Sie dann die neue Bibliothek libapriltag.so
. Weitere Informationen zum ursprünglichen Apriltags -Repository finden Sie.
Das Rad ist in einem Docker -Container gebaut. Die Dockerfile in der Stammin dieses Repositorys ist eine Vorlage für die Build -Umgebung. Die Build -Umgebung basiert auf ubuntu:18.04
und die richtige Version von Python ist im laufenden Fliegen installiert. Der Befehl make build
erstellt die Build -Umgebung, wenn sie vor dem Bau des Rades nicht vorhanden ist.
Sobald die Build -Umgebung (Docker -Image) fertig ist, wird ein Docker -Container mit der folgenden Konfiguration gestartet:
/source
montiert ist;dist/
wird als Zielverzeichnis unter /out
montiert; Das Gebäudeskript von assets/build.sh
wird im Container ausgeführt. Die Bauschritte sind:
/source
an einen TEMP -Speicherort (im Container)apriltags/
(erstellt eine .so -Bibliotheksdatei)package_data
eingebettet)/out
(wird in dist/
außerhalb des Containers angezeigt)