#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.
На что я стремлюсь получить ответы:
-
- Как я могу отладить ошибки при загрузке библиотеки pypcd?
-
- Если я не могу; Как я должен сформулировать входные данные координат x, y, z для просмотра данных pcd в pyntcloud, а если нет, то;
-
- What could be the next steps in working with .csv-based data in order to view and visualize them?
Solutions I’ve tired:
- 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