-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreconstruct_from_playback.py
More file actions
79 lines (62 loc) · 2.1 KB
/
Copy pathreconstruct_from_playback.py
File metadata and controls
79 lines (62 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
"""
Example: perform mesh reconstruction directly from sensors.
This example uses only one sensor.
"""
import sys
from argparse import ArgumentParser
from pathlib import Path
import pyRecFusionSDK as rf
parser = ArgumentParser()
parser.add_argument(
"playback",
type=Path,
help="Path to input playback file (*.rfs)"
)
parser.add_argument(
"license_key",
type=str,
help="RecFusionSDK license key required to export the final mesh",
)
parser.add_argument(
"--output-mesh",
type=str,
default="mesh.ply",
help="Path to the reconstructed mesh (*.ply)",
)
args = parser.parse_args()
print(f"Using RecFusionSDK v{rf.sdk.version()}")
if not rf.sdk.activate(args.license_key):
print("ERROR: Invalid RecFusion license. Export will be disabled")
rf.sdk.init()
playback = RFSPlayback()
playback.open(args.playback)
num_frames = playback.frame_count
print(f"Playback file contains {num_frames} frames")
cw, ch, dw, dh = playback.image_size
print(f"Image color size: {cw}x{ch}, depth size: {dw}x{dh}")
params = rf.ReconstructionParams()
# TODO: add ReconstructionParams::add_from_sensor(int, Sensor) ?? copy_from_sensor? fill_from_sensor?
# TODO: params.image_size = playback.image_size ???
params.set_image_size(cw, ch, dw, dh)
params.set_intrinsics(playback.depth_intrinsics)
params.set_color_intrinsics(playback.color_intrinsics)
params.set_depth_to_color_transformation(playback.depth_to_color_transformation)
reconstruction = rf.Reconstruction(params)
img_color = rf.ColorImage.for_playback(playback)
img_depth = rf.DepthImage.for_playback(playback)
for frame in range(num_frames):
if not playback.read_image(frame, img_depth, img_color):
continue
if not reconstruction.add_frame2(0, img_depth, img_color):
break
print("Processed frame:", frame)
playback.close()
print("Finished reconstruction")
if not reconstruction.good:
rf.sdk.deinit()
sys.exit("Failed to reconstruct a mesh")
mesh = reconstruction.get_mesh()
print("Mesh center: ", mesh.center)
print("Mesh #vertices: ", mesh.vertex_count)
print("Mesh #triangles: ", mesh.triangle_count)
rf.sdk.deinit()