#python #object-detection #point-cloud-library #yolov5 #ply-file-format
Вопрос:
Я надеюсь, что это застанет вас в добром здравии. Я действительно новичок в работе с 3d-объектами. В последнее время я работаю с алгоритмом обнаружения объектов (YOLO). Поскольку Yolo возвращает координаты ограничивающей рамки объекта, мы можем легко получить координаты (x,y) ограничивающих рамок. Однако недавно я добавил в проект камеру TOF, которая может определять dept(координату оси z) для каждого пикселя. Все эти данные хранятся в соответствующем «.ply». Я хочу получить значение оси z для каждой координаты ограничивающей рамки, которую выводит yolo.
Прямо сейчас мой файл .ply показывает этот вывод:
array([[-818.5 , -830.75, 1949.25],
[-748. , -814.5 , 1918.5 ],
[-704. , -806.75, 1905.25],
...,
[ 903.75, 790. , 1844.25],
[ 906.75, 789.5 , 1843. ],
[ 915. , 793.75, 1852.25]], dtype=float32)
Я использую библиотеку plyfile python для чтения данных из моего файла .ply
Вот как далеко я зашел:
def read_ply(filename):
""" read XYZ point cloud from filename PLY file """
plydata = PlyData.read(filename)
x = np.asarray(plydata.elements[0].data['x'])
y = np.asarray(plydata.elements[0].data['y'])
z = np.asarray(plydata.elements[0].data['z'])
return np.stack([x,y,z], axis=1)
coors = read_ply("test.ply")
coors
Этот скрипт считывает данный файл .ply и выводит следующие значения вершин (x,y,z) из файла ply:
array([[-818.5 , -830.75, 1949.25],
[-748. , -814.5 , 1918.5 ],
[-704. , -806.75, 1905.25],
...,
[ 903.75, 790. , 1844.25],
[ 906.75, 789.5 , 1843. ],
[ 915. , 793.75, 1852.25]], dtype=float32)
Теперь я хочу найти ось z для соответствующих пикселей, которые присутствуют в ограничивающем поле, которое выводит YOLO.
Ответ №1:
Наконец-то понял, что я делал не так. Это правильный рабочий код. Ура!
#Enter your x amp; y coors to get corresponding z-axis value
x = 2300
y = 1822
xy = np.array([x, y])
z = coors[np.all(np.isclose(coors[:, :2], xy), axis=1), 2][0]
print("x= {} y= {} z= {}".format(x, y, z))