Как открывать и просматривать файлы pcd в Python?

#pandas #numpy #csv #data-analysis #point-cloud-library

#pandas #numpy #csv #анализ данных #точка-облако-библиотека

Вопрос:

Описание проблемы:

Мне нужно просмотреть файлы pcd (данные облака точек) в этом конкретном формате (не ply). Я протестировал такие библиотеки, как pypcd (основное решение) и некоторые альтернативы, такие как pyntcloud (дополнительное решение), open3d, python-pcl и pcd3ply, как описано в предложениях решения 1. и 2. ниже. 1. Я также добавил соответствующий файл .pcd, который, по словам моего друга-разработчика, должен выполняться с предлагаемым кодом.

Я добавил образец соответствующего файла .pcd в конце этого вопроса, а также скриншот из заголовка dataset файла .csv на рисунках 2 и 3. Мне удалось просмотреть файлы .pcd с помощью программного обеспечения с открытым исходным кодом под названием CloudCompare, скриншот которого я добавлю в конце этого документа на картинке.

Заголовок набора данных в экспорте .csv выглядит следующим образом (1-я строка, включающая временную метку, вторая строка — некоторое неизвестное целое число, а 3-я строка содержит следующие 54 параметра, из которых первые 8 параметров относятся к координатам облака точек x, y, z, За которыми следует ввод данных RGB и т. Д.): grid_pos_x;grid_pos_y;pos_3d_x;pos_3d_y;pos_3d_z;normal_x;normal_y;normal_z … , В то время какостальные строки (4—> 2500 ) содержат соответствующие значения, подобные этому (демонстрируя первые 8, как в фрагменте столбца): -17;-30;-1.012568473815918;-0.9698562622070312;3.468137264251709;-0.17042680084705353;0.0034385689068585634;-0.9853643178939819 … .

Администраторам: Пожалуйста, обратите внимание, что я новичок в Stack Overflow. Я потратил пару часов на формулирование этого вопроса, и я безнадежен, чтобы решить эту проблему. Пожалуйста, разрешите ответы. Я на 100% готов принять любые изменения, которые предлагаются, чтобы сделать мой пост лучше. Для этого домена доступно не так много документации.

Что было сделано:

Я использовал Jupyter Notebook, Google Colab и PyCharm для просмотра файлов с помощью pypcd, но каждый раз при сборке python-lzf возникает следующая ошибка: журнал ошибок командной строки при использовании pip install для библиотеки pypcd

Сначала ошибка указывала на отсутствие Microsoft Visual Studio для просмотра C на Python ( дополнительно также загружена библиотека cython), после чего я попытался выполнить код в 3 вышеупомянутых IDE, но всегда с той же ошибкой. При выполнении с помощью Python 3 приведенный ниже код «from pypcd import pypcd» должен заставить его работать, и я также выполнил его в ядре Python 2, потому что поддержка Python3 для pypcd кажется неопределенной. Это может быть вопрос дампа, но могу ли я вообще больше выполнять коды в Python2, поскольку обслуживание официально закончилось? Итак, вы знаете; Я пользователь Windows 10.

Экспериментировал также с альтернативными подходами, такими как open3d и, в частности, с библиотекой pyntcloud, которая, по-видимому, поддерживается намного лучше и была бы дополнительным предпочтением для выполнения этой работы (источник: https://github.com/daavoo/pyntcloud ), но я получаю «ValueError: точки должны иметь координаты x, y и z Вот базовый код для чтения файлов pcdв pyntcloud:». Вывод данных должен быть в правильном формате, и особенно описанный ниже код pypcd должен работать с вводом out .pcd.

На что я стремлюсь получить ответы:

    1. Как я могу отладить ошибки при загрузке библиотеки pypcd?
    1. Если я не могу; Как я должен сформулировать входные данные координат x, y, z для просмотра данных pcd в pyntcloud, а если нет, то;
    1. What could be the next steps in working with .csv-based data in order to view and visualize them?

Solutions I’ve tired:

  1. Primary solution would be to directly view pcd files in pypcd, for which one developer proposed the following code as a solution, but the described pypcd/python-lzd error always occurs:

from pypcd import pypcd
import numpy as np
#from glob i
import numpy

 def read_files():
names = glob("*pcd")
names = sorted(names)
data = []
for item in names:
    cloud = pypcd.PointCloud.from_path(item)
    data.append(cloud)

print(names)
gridx = []
gridy = []
pos_3d_x = []
pos_3d_y = []
pos_3d_z = []
normal_x = []
normal_y = []
normal_z = []
for item in data:
    gridx.append(item.pc_data["grid_pos_x"])
    gridy.append(item.pc_data["grid_pos_y"])
    pos_3d_x.append(item.pc_data["pos_3d_x"])
    pos_3d_y.append(item.pc_data["pos_3d_y"])
    pos_3d_z.append(item.pc_data["pos_3d_z"])
    normal_x.append(item.pc_data["normal_x"])
    normal_y.append(item.pc_data["normal_y"])
    normal_z.append(item.pc_data["normal_z"])

point_clouds = []
for i in range(0, len(names)):
    point_cloud = np.array([np.array(gridx[i]), np.array(gridy[i]), np.array(pos_3d_x[i]), np.array(pos_3d_y[i]), np.array(pos_3d_z[i]), np.array(normal_x[i]), np.array(normal_y[i]), np.array(normal_z[i])])
    point_clouds.append(point_cloud)

return np.array(point_clouds)
 

point_clouds = read_files()
печать (point_clouds)

2.1 Вторичным решением (среди реализаций в pyntcloud или open3d) было бы включить просмотр и обработку файлов pcd в формате .csv, но их визуализация звучит гораздо более сложным процессом по сравнению с непосредственным открытием и просмотром файлов .pcd, для которых большинство простых решений рассматривают формат файла .ply и в этом использованииесли этот формат файла невозможно использовать.

С помощью следующей команды pandas мне удалось получить 54 столбца .csv, расположенных в строке 3, которые будут разделены соответствующими значениями (см. Рисунок ниже См. Вывод в jupyter);

 import numpy as np
import pandas as pd
import csv
import matplotlib.pyplot as plt
dotcloudcsv = pd.read_csv('dot_cloud_original_extended_00001 (1).csv', sep=';', header=0, skiprows=2)
dotcloudcsv.head(50)
 

Но я не знал, как мне продолжить визуализацию данных .csv, поэтому я попытался;

2.2 Исследование библиотеки pyntcloud, которая должна быть более современной и лучше поддерживаемой библиотекой, но после тестирования следующих примеров кода я получил «ValueError: точки должны иметь координаты x, y и z» в обоих случаях;

 my_point_cloud = PyntCloud.from_file("/content/dfs_dot_cloud_primary.pcd")
my_point_cloud.to_file("out_file.obj", internal=["points", "mesh"], header=0, names=["pos_3d_x","pos_3d_y","pos_3d_z"])
 

и

 from pyntcloud import PyntCloud
my_point_cloud = PyntCloud.from_file("/content/dfs_dot_cloud_primary.pcd")
my_point_cloud.to_file("out_file.obj", header=0, skiprows=2, sep=";")
 

2.3 Последнее дополнительное решение, с которым я столкнулся, может быть с библиотекой open3d, но я не смог разобраться в коде и сдался из-за всех предыдущих разочарований.

Некоторая справочная информация для контекста:

1. Заголовок исходного набора данных .csv для экспорта .pcd

2. Просмотр файла .csv в Jupyter с помощью pandas

3.CloudCompare скриншот просмотра файла .pcd

4. Ссылка на файл pypcd .py в качестве основного решения

5. Ссылка на обсуждаемый файл .pcd, подлежащий обработке