Нахождение точного расстояния между объектами на изображении YOLO
Обучил модель YOLO на поиск объекта. Далее происходит измерение расстояния между объектами: известно, какой размер имеет сам объект, и несложными формулами пиксели переводятся в миллиметры. Подскажите, пожалуйста, как сделать так, чтобы сильно повысить точность измерения расстояния? Сейчас при измерении получается очень высокий диапазон значений, никакой стабильности.
Вычисление размеров
objects = {'line': []}
for i, box in enumerate(corners):
label = names[int(cls[i])]
pts = box.reshape(4, 2)
center = self.get_obb_center(pts)
width = self.get_obb_width(pts)
if label in objects:
objects[label].append((center, width, pts))
scale_mm_per_pixel = 3.0 / np.median([w for _, w, _ in objects['line']])
Отрисовка линий
lines_sorted = sorted(objects['line'], key=lambda x: x[0][0])
for i in range(len(lines_sorted) - 1):
c1, w1, _ = lines_sorted[i]
c2, w2, _ = lines_sorted[i + 1]
right1 = c1[0] + w1 / 2
left2 = c2[0] - w2 / 2
dist_mm = (left2 - right1) * scale_mm_per_pixel
pt1 = (int(right1), int(c1[1]))
pt2 = (int(left2), int(c2[1]))
mid = (int((pt1[0] + pt2[0]) / 2) - 15,
int((pt1[1] + pt2[1]) / 2) - 10)
cv2.line(visualization, pt1, pt2, (0, 255, 0), 2)
cv2.putText(visualization, f"{dist_mm:.2f}", mid,
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
Источник: Stack Overflow на русском