Skip to content

Commit 2ae1963

Browse files
authored
Merge pull request RobotLocomotion#150 from RobotLocomotion/lm-paths
Fix paths for scripts
2 parents 3393443 + 3a39f22 commit 2ae1963

File tree

7 files changed

+225
-3839
lines changed

7 files changed

+225
-3839
lines changed

dense_correspondence/evaluation/make_video.ipynb

Lines changed: 149 additions & 3800 deletions
Large diffs are not rendered by default.

docker/install_more.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ sudo pip install opencv-contrib-python
1717
sudo pip install tensorboard_logger \
1818
tensorflow
1919

20-
sudo apt install python-tk
20+
sudo apt install python-tk \
21+
ffmpeg

modules/dense_correspondence_manipulation/change_detection/change_detection.py

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,20 @@ class ChangeDetection(object):
7676

7777
def __init__(self, app, view, cameraIntrinsics=None, debug=True,
7878
data_directory=None):
79+
"""
80+
This shouldn't be called directly. Should only be called via the staticmethod from_data_folder
81+
82+
:param app:
83+
:type app:
84+
:param view:
85+
:type view:
86+
:param cameraIntrinsics:
87+
:type cameraIntrinsics:
88+
:param debug:
89+
:type debug:
90+
:param data_directory: The 'processed' subfolder of a top level log folder
91+
:type data_directory:
92+
"""
7993

8094
self.app = app
8195
self.views = dict()
@@ -119,23 +133,6 @@ def __init__(self, app, view, cameraIntrinsics=None, debug=True,
119133
# dock.setMinimumWidth(300)
120134
# dock.setMinimumHeight(300)
121135

122-
if data_directory is not None:
123-
self.data_dir = data_directory
124-
self.loadData()
125-
126-
def loadData(self):
127-
"""
128-
Load the relevant data from the folder.
129-
130-
Key pieces of data are
131-
- background reconstruction
132-
- foreground reconstruction
133-
- images (depth and rgb)
134-
- camera pose data
135-
- camera intrinsics
136-
"""
137-
self.image_dir = os.path.join(self.data_dir, 'images')
138-
139136
@property
140137
def background_reconstruction(self):
141138
return self._background_reconstruction
@@ -338,7 +335,13 @@ def showCameraTransform(self):
338335

339336
def run(self, output_dir=None, rendered_images_dir=None):
340337
"""
341-
Run the mask generation algorithm
338+
Renders the masks and the depth images for the cropped scene
339+
340+
Produces 3 types of files
341+
342+
processed/image_masks/000000_mask.png
343+
processed/image_masks/000000_visible_mask.png
344+
processed/rendered_images/000000_depth_cropped.png
342345
:return:
343346
"""
344347

@@ -348,6 +351,8 @@ def run(self, output_dir=None, rendered_images_dir=None):
348351
if rendered_images_dir is None:
349352
rendered_images_dir = os.path.join(self.foreground_reconstruction.data_dir, 'rendered_images')
350353

354+
fusion_mesh_foreground_file = os.path.join(os.path.join(self.foreground_reconstruction.data_dir, 'fusion_mesh_foreground.ply'))
355+
351356
if not os.path.isdir(output_dir):
352357
os.makedirs(output_dir)
353358

@@ -356,8 +361,10 @@ def run(self, output_dir=None, rendered_images_dir=None):
356361

357362
start_time = time.time()
358363

364+
print "saving cropped mesh"
365+
self.foreground_reconstruction.save_poly_data(fusion_mesh_foreground_file)
366+
359367
# read in each image in the log
360-
image_dir = self.foreground_reconstruction.image_dir
361368
camera_pose_data = self.foreground_reconstruction.kinematics_pose_data
362369
img_file_extension = 'png'
363370

@@ -402,7 +409,8 @@ def run(self, output_dir=None, rendered_images_dir=None):
402409

403410
def render_depth_images(self, output_dir=None, rendered_images_dir=None):
404411
"""
405-
Run the mask generation algorithm
412+
Renders the depth images on the entire scene
413+
processed/rendered_images/000000_depth.png
406414
:return:
407415
"""
408416

@@ -479,7 +487,7 @@ def from_data_folder(data_folder, config=None, globalsDict=None, background_data
479487
Creates a ChangeDetection object from a data_folder which contains the
480488
3D reconstruction and the image files
481489
482-
:param data_folder:
490+
:param data_folder: This should point to the `processed` subfolder of a top level log folder
483491
:param config:
484492
:param globalsDict:
485493
:return:
@@ -512,6 +520,23 @@ def from_data_folder(data_folder, config=None, globalsDict=None, background_data
512520
return changeDetection, globalsDict
513521

514522

523+
@staticmethod
524+
def render_depth_images_full_scene(data_folder, config=None, background_data_folder=None):
525+
"""
526+
Renders depth images against the entire scene
527+
:param data_folder:
528+
:type data_folder:
529+
:param config:
530+
:type config:
531+
:param background_data_folder:
532+
:type background_data_folder:
533+
:return:
534+
:rtype:
535+
"""
536+
537+
change_detection.ChangeDetection.from_data_folder(data_folder, config=config, globalsDict=globalsDict,
538+
background_data_folder=background_scene_data_folder)
539+
515540

516541
##################### DEBUGGING FUNCTIONS #################
517542
def testCreateBackground(self):

modules/dense_correspondence_manipulation/fusion/fusion_reconstruction.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ def setup(self):
118118
self.load_poly_data()
119119
self.image_dir = os.path.join(self.data_dir, 'images')
120120

121+
def save_poly_data(self, filename):
122+
"""
123+
Save the poly data to a file
124+
:param filename:
125+
:type filename:
126+
:return:
127+
:rtype:
128+
"""
129+
ioUtils.writePolyData(self.poly_data, filename)
130+
121131
@property
122132
def poly_data_type(self):
123133
return self._poly_data_type
@@ -283,19 +293,6 @@ def load_poly_data(self):
283293
self.poly_data = self.poly_data_raw
284294
self.crop_poly_data()
285295

286-
# def crop_poly_data(self):
287-
# dim_x = self.config['crop_box']['dimensions']['x']
288-
# dim_y = self.config['crop_box']['dimensions']['y']
289-
# dim_z = self.config['crop_box']['dimensions']['z']
290-
# dimensions = [dim_x, dim_y, dim_z]
291-
#
292-
# transform = director_utils.transformFromPose(self.config['crop_box']['transform'])
293-
#
294-
# # store the old poly data
295-
# self.poly_data_uncropped = self.poly_data
296-
#
297-
# self.poly_data = segmentation.cropToBox(self.poly_data, transform, dimensions)
298-
299296
@property
300297
def fusion_pose_data(self):
301298
raise ValueError("TSDFReconstruction doesn't have fusion_pose_data")
@@ -322,6 +319,17 @@ def visualize_reconstruction(self, view, vis_uncropped=False, name=None):
322319

323320
@staticmethod
324321
def from_data_folder(data_folder, config=None, name=None):
322+
"""
323+
324+
:param data_folder: The 'processed' subfolder of a top level log folder
325+
:type data_folder:
326+
:param config:
327+
:type config:
328+
:param name:
329+
:type name:
330+
:return:
331+
:rtype:
332+
"""
325333
fr = TSDFReconstruction()
326334
fr.data_dir = data_folder
327335

modules/dense_correspondence_manipulation/scripts/batch_run_change_detection_pipeline.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ def main():
2020

2121
for idx, dir in enumerate(list_of_dirs):
2222

23-
data_folder = os.path.join(parent_folder, dir)
23+
log_folder = os.path.join(parent_folder, dir)
24+
data_folder = os.path.join(log_folder, 'processed')
2425

2526
if not os.path.isdir(data_folder):
2627
continue

modules/dense_correspondence_manipulation/scripts/run_change_detection.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import dense_correspondence_manipulation.utils.utils as utils
88
from dense_correspondence_manipulation.utils.constants import *
99
from director.timercallback import TimerCallback
10+
1011
"""
1112
Runs change detection to compute masks for each image
1213
"""
@@ -18,7 +19,7 @@ def run(data_folder, config_file=CONFIG_FILE, debug=False, globalsDict=None,
1819
background_scene_data_folder=None):
1920
"""
2021
Runs the change detection pipeline
21-
:param data_dir:
22+
:param data_dir: The 'processed' subfolder of a top-level log folder
2223
:param config_file:
2324
:return:
2425
"""
@@ -58,12 +59,12 @@ def single_shot_function():
5859

5960
if __name__ == "__main__":
6061
parser = argparse.ArgumentParser()
61-
parser.add_argument("--data_dir", type=str, default='/home/manuelli/code/data_volume/sandbox/drill_scenes/04_drill_long_downsampled')
62+
parser.add_argument("--data_dir", type=str, required=True, help="full path to the processed/ folder of a top level log folder")
6263

6364
default_config_file = os.path.join(utils.getDenseCorrespondenceSourceDir(), 'config', 'stations', 'RLG_iiwa_1', 'change_detection.yaml')
6465
parser.add_argument("--config_file", type=str, default=default_config_file)
6566

66-
parser.add_argument('--current_dir', action='store_true', default=False, help="run the script with --data_dir set to the current directory")
67+
parser.add_argument('--current_dir', action='store_true', default=False, help="run the script with --data_dir set to the current directory. You should be in the processed/ subfolder")
6768

6869
parser.add_argument('--debug', action='store_true', default=False,
6970
help="launch the app in debug mode")

modules/dense_correspondence_manipulation/scripts/run_change_detection_pipeline.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def already_ran_change_detection(processed_dir):
5050
return (os.path.isfile(file_to_check_1) and os.path.isfile(file_to_check_2))
5151

5252
def run_on_all_subfolders(directory, config_file):
53+
print "running on all subfolders"
5354

5455
for dir in sorted(os.listdir(directory)):
5556
full_dir = os.path.join(directory, dir)

0 commit comments

Comments
 (0)