🔲 ArUco-навигация
detect_aruco.py
Поиск ArUco-меток
aruco_examples/detect_aruco.pyНаходит ArUco-метки словаря DICT_ARUCO_ORIGINAL и публикует поток aruco.
Создаётся детектор cv2.aruco.ArucoDetector. В цикле кадр проверяется на наличие меток, найденные метки обводятся drawDetectedMarkers и публикуются в поток aruco.
Как работает
- Создать словарь, параметры и детектор ArUco.
- Создать
Camera()иImageViewer(). - В цикле получать кадр.
- Искать метки
aruco_detector.detectMarkers(frame). - Рисовать метки и публиковать кадр в поток
aruco. - В
finallyостановить камеру и поток.
Используемые методы SDK
Ключевые параметры
| Параметр | Значение | Описание |
|---|---|---|
dictionary | DICT_ARUCO_ORIGINAL | Словарь меток. |
fps | 30 | Частота кадров. |
Запуск
cd aruco_examples
python3 detect_aruco.pyРезультат
- Поток
rtsp://10.42.0.1:8889/aruco/с обведёнными метками.
Видеопотоки
rtsp://10.42.0.1:8889/aruco/
Примечания
- Метки из папки
aruco_markersсоответствуют словарю DICT_ARUCO_ORIGINAL.
Требования
- Драйвер камеры
gstreamer. - ArUco-метка в поле зрения.
Полный исходный код
Показать detect_aruco.py
from pioneer_sdk2 import Camera, ImageViewer # импортируем классы Camera и ImageViewer из библиотеки pioneer_sdk2
import cv2 # библиотека cv2 содержит функции для работы с изображениями
aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL) # выбираем словарь ArUco-меток
aruco_params = cv2.aruco.DetectorParameters() # создаем параметры для поиска ArUco-меток
aruco_detector = cv2.aruco.ArucoDetector(aruco_dict, aruco_params) # создаем детектор ArUco-меток
camera = Camera() # создаем экземпляр класса Camera для получения кадров с камеры
viewer = ImageViewer() # создаем экземпляр класса ImageViewer для трансляции изображения
try: # основной код находится внутри блока try
while True: # запускаем бесконечный цикл
frame = camera.get_cv_frame(timeout=1.0) # получаем один кадр с камеры
# timeout=1.0 - время ожидания кадра в секундах
if frame is None: # проверяем, что кадр не был получен
continue # пропускаем текущую итерацию цикла
corners, ids, rejected = aruco_detector.detectMarkers(frame) # ищем ArUco-метки на изображении
cv2.aruco.drawDetectedMarkers(frame, corners, ids) # рисуем найденные ArUco-метки на изображении
viewer.imshow("aruco", frame, fps=30) # запускаем трансляцию изображения
# aruco - название трансляции
# frame - изображение с камеры
# fps=30 - количество кадров в секунду
finally: # блок finally выполнится при завершении программы
camera.stop() # останавливаем получение кадров с камеры
viewer.close() # останавливаем видеопоток