Проблема Open3d Python: нет атрибута "Estimation_normals"
Я работаю с open3d для python3 в Windows. Он был установлен через pip через'pip install open3d-python'
. Я проверил документацию, и мой сценарий, который пытается преобразовать файл облака точек (.ply) в сетку (.stl), кажется правильным. Однако при исполнении я получаюattribute error: 'open3d.open3d.geometry.PointCloud' has no attribute 'estimate_normals'
. Любая помощь будет оценена. Спасибо
Вот мой сценарий
import open3d as o3d
import trimesh
import numpy as np
pcd = o3d.io.read_point_cloud("pointcloud.ply")
pcd.estimate_normals()
#pcd = pcd2.normals
# estimate radius for rolling ball
distances = pcd.compute_nearest_neighbor_distance()
avg_dist = np.mean(distances)
radius = 1.5 * avg_dist
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(pcd,o3d.utility.DoubleVector([radius, radius * 2]))
trimesh = trimesh.Trimesh(np.asarray(mesh.vertices), np.asarray(mesh.triangles),vertex_normals=np.asarray(mesh.vertex_normals))
trimesh.export('stuff.stl')
РЕДАКТИРОВАТЬ
Я где-то читал, что компиляция исходного пакета из исходного кода поможет, но я пользователь Mac и пытаюсь сделать это в Windows, поэтому я не могу понять, как это сделать. вот ссылка на github для пакета https://github.com/intel-isl/Open3D
3 ответа
У меня та же проблема, и я обнаружил, что проблема возникла из-за неправильной версии open3d, которая была установлена через pip install open3d-python
. Для меня это былоv0.6.0
. Документация основана на новых выпусках. Начиная с версииv0.8.0
open3d должен быть установлен как pip install open3d
или conda install -c open3d-admin open3d
для конды. Нашел ту информацию в релизах. Это решило проблему на моем Mac.
Это работает для меня:
- Удаление другой версии open3d, установленной как
open3d
иopen3d-python
:pip uninstall open3d open3d-python
- Установка
open3d 0.8
:pip install open3d==0.8.0.0
- Вычислить нормали к поверхности:
pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
- Визуализируйте нормали поверхности, нажав
n
когда окно дисплея открывается для просмотра нормалей:o3d.visualization.draw_geometries([pcd])
Лучшим решением для меня было просто использовать документацию для версии, которую я использовал (0.13.0). Похоже, что с обновлениями они изменили API, и поэтому некоторые старые команды невозможны.