这段代码使用 OpenCV 来检测视频设备捕获的每一帧中标记的位置。根据标记的物理尺寸,它也可以进行姿势估计。对于每个定义的标记,可以通过 UDP 以纯文本形式获取数据。它返回对象相对于相机的旋转平移,以及出现在相机图像上的对象 2D 质心的 XY 坐标。如果标记不可见,则返回的数字将为 NaN。
请注意,此代码不使用时间信息进行跟踪。
相反,它尝试检测标记并估计其在每个捕获的帧中的姿势。
.ini
语法。您需要一个带有cv2
和numpy
模块的标准 Python 环境。虽然代码是在 Mac 上使用 Python 2.7 和 OpenCV 3.4.1 开发的,但它也应该适用于 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
。至少需要4个匹配点来计算translation
坐标和rotation
角度。然而,变换所需的匹配越多,估计就越精确。如果设置得太高,姿态估计将仅在少数帧中起作用。
最后, pose_estimation_running_average
设置应该对多少帧的位置数据进行平均。如果返回的位置太“不稳定”,请增加此数字。然而,一起平均的帧越多,延迟就越大。
此外,每个colour
通道可以是0
到255
之间的任何自然数。 marker_feature_colour_*
项用于显示标记图像和相机图像之间的良好质量匹配的位置。 marker_indicator_colour_*
设置确定单个指示器的颜色,该指示器显示由显示的匹配的平均值计算得出的坐标。理想情况下,该指示符应始终位于标记内部,并作为centroid
在 UDP 数据包中返回。
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
祝你好运!