From a3905422e67af577630ad5e2a01b34379e82d368 Mon Sep 17 00:00:00 2001
From: Maciej Wielgosz <maciej.wielgosz@nibio.no>
Date: Wed, 18 Jan 2023 13:03:00 +0100
Subject: [PATCH] instance segmentation in oracle cloud pipeline flow

---
 config/config.yaml      | 23 +++++++++++++++++++----
 run.py                  | 31 +++++++++++++++++++++++++++----
 run_bash_scripts/tls.sh |  2 --
 3 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/config/config.yaml b/config/config.yaml
index 815cf88..4166035 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -1,10 +1,25 @@
 general:
-  input_folder: 'some_path'
-  output_folder: 'some_path'
+  input_folder: './maciek'
+  output_folder: './maciek_results'
+  clean_output_folder: true
   run_sematic_segmentation: true
-  run_instance_segmentation: false
+  run_instance_segmentation: true
 label_formats:
   label_for_instances_in_gt: 'treeID'
   label_for_instances_in_predicted: 'instance_nr'
 semantic_segmentation_params:
-  first: 'some'
+  sematic_segmentation_script: './run_bash_scripts/sem_seg_sean.sh'
+  tile_size: 10 # tile size in meters
+  min_density: 100 # minimum density of points in a tile(used for removing small tiles)
+  remove_small_tiles: 1 # 1: remove small tiles, 0: not remove small tiles
+instance_segmentation_params:
+  instance_segmentation_script: './run_bash_scripts/tls.sh' 
+  n_tiles: 3
+  slice_thickness: 0.5
+  find_stems_height: 1.5
+  find_stems_thickness: 0.5
+  graph_maximum_cumulative_gap: 3
+  add_leaves_voxel_length: 0.5
+  find_stems_min_points: 50
+  graph_edge_length: 1.0
+  add_leaves_edge_length: 1.0
\ No newline at end of file
diff --git a/run.py b/run.py
index 50f7f34..75402e5 100644
--- a/run.py
+++ b/run.py
@@ -21,7 +21,7 @@ def main(path_to_config_file):
     if not os.path.exists(config["general"]["output_folder"]):
         os.mkdir(config["general"]["output_folder"])
 
-    ### sematic segmentation section
+    ### sematic segmentation section ###
     if config["general"]["run_sematic_segmentation"]:
         logger.info("Running semantic segmentation")
         sem_seg_command = config["semantic_segmentation_params"]["sematic_segmentation_script"]
@@ -44,11 +44,34 @@ def main(path_to_config_file):
         logging.info("Running semantic segmentation with the arguments")
         RunCommandBash(sem_seg_command, sem_seg_args)()
 
-
+    ### instance segmentation section ###
     if config["general"]["run_instance_segmentation"]:
         logger.info("Running instance segmentation")
-    else:
-        logger.info("Not running instance segmentation")
+        ins_seg_command = config["instance_segmentation_params"]["instance_segmentation_script"]
+
+        # print the instance segmentation parameters
+        for key, value in config["instance_segmentation_params"].items():
+            logger.info(key + ": " + str(value))
+
+        # read all the parameters from the config file for the instance segmentation
+        ins_seg_args = []
+
+        ins_seg_args.extend([
+        "-d", str(config["general"]["input_folder"]),
+        "-n", str(config["instance_segmentation_params"]["n_tiles"]),
+        "-s", str(config["instance_segmentation_params"]["slice_thickness"]),
+        "-h", str(config["instance_segmentation_params"]["find_stems_height"]),
+        "-t", str(config["instance_segmentation_params"]["find_stems_thickness"]),
+        "-g", str(config["instance_segmentation_params"]["graph_maximum_cumulative_gap"]),
+        "-l", str(config["instance_segmentation_params"]["add_leaves_voxel_length"]),
+        "-m", str(config["instance_segmentation_params"]["find_stems_min_points"]),
+        "-o", str(config["instance_segmentation_params"]["graph_edge_length"]),
+        "-p", str(config["instance_segmentation_params"]["add_leaves_edge_length"])
+        ])
+
+        # run the command with the arguments
+        logging.info("Running instance segmentation with the arguments")
+        RunCommandBash(ins_seg_command, ins_seg_args)()
 
     # do cleaning up folders
     if config["general"]["clean_output_folder"]:
diff --git a/run_bash_scripts/tls.sh b/run_bash_scripts/tls.sh
index 996c1fd..9f76038 100755
--- a/run_bash_scripts/tls.sh
+++ b/run_bash_scripts/tls.sh
@@ -201,8 +201,6 @@ for segmented_point_cloud_in_ply in $data_folder/results/segmented_point_clouds/
     --writers.las.extra_dims=all
 done
 
-python nibio_preprocessing/add_ground_to_inst_seg_folders.py --sem_seg_folder sample_playground/results/segmented_point_clouds/ --inst_seg_folder sample_playground/results/instance_segmented_point_clouds/ --output_folder sample_playground/instance_seg_with_ground --verbose
-
 # create the instance segmented point clouds with ground folder
 mkdir -p $data_folder/results/instance_segmented_point_clouds_with_ground
 
-- 
GitLab