Этот фрагмент кода использует OpenCV для определения положения маркера в каждом кадре, захваченном видеоустройством. Основываясь на физических размерах маркера, он также позволяет оценить положение. Для каждого определенного маркера данные доступны через UDP в виде обычного текста. Он возвращает преобразование вращения объекта относительно камеры и координаты XY 2D-центроида объекта, появляющегося на изображении камеры. Если маркер не виден, возвращаемые числа будут NaN.
Обратите внимание, что этот код НЕ использует временную информацию для отслеживания.
Вместо этого он пытается обнаружить маркер и оценить его положение в каждом захваченном кадре.
.ini
. Вам нужна стандартная среда Python с cv2
и доступными модулями numpy
. Хотя код был разработан с использованием Python 2.7 и OpenCV 3.4.1 на Mac, он также должен работать с Python 3 и другими платформами. Вот несколько шагов для создания маркера: 1. Сфотографируйте объект и обрежьте его. В идеале разрешение должно быть совместимо с вашей камерой. 2. Отредактируйте файл конфигурации и убедитесь, что в нем установлены следующие строки:
[General]
В общем разделе вы можете оставить практически всё то же самое, но вам нужно будет откалибровать камеру! О том, как калибровать, читайте здесь. При добавлении нового маркера вам потребуется более тонкая настройка, поэтому убедитесь, что изображение камеры будет видно.
camera_show_picture = 1
В противном случае новый маркер добавляется как новый раздел в файле конфигурации.
Заголовок — это понятное имя маркера.
[My custom marker]
Укажите имя файла и физические размеры маркера:
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
При настройке нового маркера вам потребуется изменить следующие настройки:
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
marker_minimum_matching_distance
обратно пропорционален качеству совпадения объектов между изображением маркера и камерой. Если установлено слишком высокое значение, будут сопоставляться объекты за пределами маркера, а если установлено слишком низкое, сопоставления не будут выполняться вообще.
marker_minimum_number_of_matches
требуется для оценки позы. Для расчета координат translation
и углов rotation
необходимы как минимум 4 совпадающие точки. Однако чем больше совпадений требуется для преобразования, тем точнее будет оценка. Если установлено слишком высокое значение, оценка позы будет работать только в нескольких кадрах.
Наконец, pose_estimation_running_average
устанавливает, сколько данных о положении кадров должно быть усреднено. Увеличьте это число, если возвращаемые позиции слишком «рывки». Однако чем больше кадров усредняется, тем больше будет задержка.
Более того, каждый colour
канал может быть любым натуральным числом от 0
до 255
. Элементы marker_feature_colour_*
предназначены для отображения совпадений хорошего качества между изображением маркера и изображением камеры. Настройки marker_indicator_colour_*
определяют цвет отдельного индикатора, который показывает координаты, рассчитанные по средним значениям отображаемых совпадений. В идеале этот индикатор всегда должен находиться внутри маркера и возвращается в пакете UDP как centroid
.
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
Удачи!