jmartinezot commited on
Commit
fb4ab4b
1 Parent(s): f0027f2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -11
app.py CHANGED
@@ -22,20 +22,19 @@ def point_cloud_to_image(point_cloud):
22
 
23
  return pil_img
24
 
25
- def create_file_mesh_from_pcd(pcd):
26
 
27
  temp_file = tempfile.NamedTemporaryFile(suffix=".obj", delete=False)
28
  file_path = temp_file.name
29
  temp_file.close()
30
 
31
- alpha = 2
32
  # print(f"alpha={alpha:.3f}")
33
  mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha)
34
  mesh.compute_vertex_normals()
35
  o3d.io.write_triangle_mesh(file_path, mesh, write_triangle_uvs=True)
36
  return file_path
37
 
38
- def plane_detection(pointcloud_path, voxel_size=0.05, distance_threshold=0.01, num_iterations=1000):
39
  # Load point cloud from file
40
  pcd = o3d.io.read_point_cloud(pointcloud_path.name)
41
 
@@ -54,9 +53,9 @@ def plane_detection(pointcloud_path, voxel_size=0.05, distance_threshold=0.01, n
54
  a, b, c, d = plane_model
55
  plane_model = np.array([[a], [b], [c], [d]])
56
  df = pd.DataFrame(plane_model.reshape(1, 4), columns=["a", "b", "c", "d"])
57
- input_path = create_file_mesh_from_pcd(pcd)
58
- inlier_path = create_file_mesh_from_pcd(inlier_cloud)
59
- outlier_path = create_file_mesh_from_pcd(outlier_cloud)
60
  # Return inlier point cloud, outlier point cloud, and plane model
61
  # return point_cloud_to_image(inlier_cloud), point_cloud_to_image(outlier_cloud), df
62
  return input_path, inlier_path, outlier_path, df
@@ -76,16 +75,25 @@ outputs = [
76
  iface = gr.Interface(plane_detection,
77
  inputs=[
78
  File(label="Point cloud file (.ply or .pcd format)"),
79
- Slider(label="Voxel size", minimum=1, maximum=50, step=1, value=2),
80
- Slider(label="Distance threshold", minimum=0.5, maximum=50, step=0.5, value=5),
81
- Slider(label="Number of iterations", minimum=1, maximum=10000, step=1, value=100)
 
82
  ],
83
  outputs=outputs,
84
  title="Plane Detection using RANSAC",
85
  description="This app takes as input a point cloud file (.ply or .pcd format), voxel size, distance threshold, and number of iterations, finds a plane using RANSAC algorithm, displays the inlier and outlier point clouds, and returns the inlier point cloud, outlier point cloud, and the plane model.",
86
- allow_flagging="never"
 
 
 
 
 
 
 
 
87
  )
88
 
89
 
90
  # Launch the interface
91
- iface.launch()
 
22
 
23
  return pil_img
24
 
25
+ def create_file_mesh_from_pcd(pcd, alpha):
26
 
27
  temp_file = tempfile.NamedTemporaryFile(suffix=".obj", delete=False)
28
  file_path = temp_file.name
29
  temp_file.close()
30
 
 
31
  # print(f"alpha={alpha:.3f}")
32
  mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha)
33
  mesh.compute_vertex_normals()
34
  o3d.io.write_triangle_mesh(file_path, mesh, write_triangle_uvs=True)
35
  return file_path
36
 
37
+ def plane_detection(pointcloud_path, voxel_size=0.05, distance_threshold=0.01, num_iterations=1000, alpha=2):
38
  # Load point cloud from file
39
  pcd = o3d.io.read_point_cloud(pointcloud_path.name)
40
 
 
53
  a, b, c, d = plane_model
54
  plane_model = np.array([[a], [b], [c], [d]])
55
  df = pd.DataFrame(plane_model.reshape(1, 4), columns=["a", "b", "c", "d"])
56
+ input_path = create_file_mesh_from_pcd(pcd, alpha)
57
+ inlier_path = create_file_mesh_from_pcd(inlier_cloud, alpha)
58
+ outlier_path = create_file_mesh_from_pcd(outlier_cloud, alpha)
59
  # Return inlier point cloud, outlier point cloud, and plane model
60
  # return point_cloud_to_image(inlier_cloud), point_cloud_to_image(outlier_cloud), df
61
  return input_path, inlier_path, outlier_path, df
 
75
  iface = gr.Interface(plane_detection,
76
  inputs=[
77
  File(label="Point cloud file (.ply or .pcd format)"),
78
+ Slider(label="Voxel size", minimum=0.001, maximum=50, step=1, value=2),
79
+ Slider(label="Distance threshold", minimum=0.001, maximum=50, step=0.01, value=5),
80
+ Slider(label="Number of iterations", minimum=1, maximum=10000, step=1, value=100),
81
+ Slider(label="Alpha for surface reconstruction", minimum=0.02, maximum=100, step=0.01, value=2),
82
  ],
83
  outputs=outputs,
84
  title="Plane Detection using RANSAC",
85
  description="This app takes as input a point cloud file (.ply or .pcd format), voxel size, distance threshold, and number of iterations, finds a plane using RANSAC algorithm, displays the inlier and outlier point clouds, and returns the inlier point cloud, outlier point cloud, and the plane model.",
86
+ allow_flagging="never",
87
+ examples=[
88
+ # ["Pointclouds/p1.ply", 2, 5, 100, 2]
89
+ ["Pointclouds/cloud_bin_0.ply", 0.001, 0.03, 100, 0.05],
90
+ ["Pointclouds/cloud_bin_20.ply", 0.001, 0.03, 100, 0.05],
91
+ ["Pointclouds/cloud_bin_30.ply", 0.001, 0.03, 100, 0.05],
92
+ ["Pointclouds/cloud_bin_40.ply", 0.001, 0.03, 100, 0.05],
93
+ ["Pointclouds/cloud_bin_50.ply", 0.001, 0.03, 100, 0.05],
94
+ ],
95
  )
96
 
97
 
98
  # Launch the interface
99
+ iface.launch()