Это привязки Python для библиотеки Apriltags 3, разработанной Aprilrobotics. Вдохновленный привязками Apriltags2 Мэттом Цукером.
Оригинальная библиотека опубликована с лицензией BSD 2-CLAUSE.
Вы можете установить с помощью pip
(или pip3
для Python 3):
pip install dt-apriltags
И если вам нужен конкретный релиз, добавьте его так:
pip install [email protected]
Клонировать этот репозиторий и перейдите по нему. Затем инициализируйте подмодуль Apriltags:
$ git submodule init
$ git submodule update
Создайте библиотеку Apiltags C и встройте недавно построенную библиотеку в колесо PIP.
$ make build
Новое колесо будет доступно в каталоге dist/
. Теперь вы можете установить колесо
pip install dt_apriltags-VERSION-pyPYMAJOR-none-ARCH.whl
ПРИМЕЧАНИЕ. На основании текущей VERSION
этой библиотеки и версии Python использовался PYMAJOR
, вместе с архитектурой вашей ARCH
процессора, вышеупомянутое имя файла варьируется.
Эта библиотека поддерживает строительные колеса для Python 2
и 3
. Python 2 будет использоваться по умолчанию. Используйте следующую команду для создания для Python 3.
make build PYTHON_VERSION=3
Эта библиотека поддерживает строительные колеса для архитектуры процессора amd64
, arm32v7
и arm64v8
. Архитектура по умолчанию amd64
. При строительстве колес для архитектур ARM QEMU будет использоваться для эмуляции целевого процессора. Используйте следующую команду, чтобы построить для архитектуры 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 | Когда ненулевые края каждого квадрата регулируются на «Snap до» сильных градиентов поблизости. Это полезно, когда используется искушение, поскольку она может существенно повысить качество первоначальной оценки квадрата. Обычно рекомендуется быть на (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
, и должны быть предоставлены true, и camera_params
( [fx, fy, cx, cy]
) и tag_size
(в метрах). Метод detect
возвращает список объектов Detection
, каждый из которых имеет следующие атрибуты (обратите внимание, что те с звездочками вычисляются только при estimate_tag_pose=True
):
Атрибут | Объяснение |
---|---|
tag_family | Семья тега. |
tag_id | Декодированный идентификатор тега. |
Хэмминг | Сколько битов ошибок было исправлено? Примечание. Принятие большого количества исправленных ошибок приводит к значительному увеличению ложных положительных показателей. Примечание. Начиная с этой реализацией детектор не может обнаружить теги с расстоянием химинга, превышающим 3. |
Decision_margin | Мера качества процесса бинарного декодирования: средняя разница между интенсивностью бита данных по сравнению с порогом принятия решений. Более высокие числа примерно указывают на лучшие декоды. Это разумная мера точности обнаружения только для очень маленьких тегов- не эффективно для более крупных тегов (где мы могли бы выбрать где-нибудь в битовой ячейке и при этом получить хорошее обнаружение.) |
гомография | Матрица гомографии 3x3, описывающая проекцию из «идеального» тега (с углом по (-1,1), (1,1), (1, -1) и (-1, -1)) до пикселей в изображение. |
центр | Центр обнаружения в координатах пикселей изображения. |
угла | Углы тега в координатах пикселей изображения. Они всегда обертывают встречную зашитку вокруг тега. |
pose_r* | Матрица вращения позы оценки. |
pose_t* | Перевод оценки позы. |
pose_err* | Ошибка объектного пространства оценки. |
Если вы хотите использовать пользовательский макет, вам необходимо создать для него файлы источника C и заголовка, а затем создать библиотеку снова. Затем используйте новую библиотеку libapriltag.so
. Вы можете найти больше информации об оригинальном репозитории Apriltags.
Колесо построено внутри контейнера Docker. Dockerfile в корне этого хранилища является шаблоном для среды сборки. Среда сборки основана на ubuntu:18.04
, а правильная версия Python установлена на лету. Команда make build
создаст среду сборки, если она не существует до создания колеса.
Как только среда сборки (изображение Docker) готова, запускается контейнер Docker со следующей конфигурацией:
/source
;dist/
установлен в качестве каталога назначения под /out
; Сценарий здания из assets/build.sh
будет выполнен внутри контейнера. Шаги сборки:
/source
в местном месте (внутри контейнера)apriltags/
(будет создан файл библиотеки .so)package_data
)/out
(появится в dist/
Outside в контейнере)