From db0258430aa716854859979720c5f49b2dbb8c65 Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Mon, 11 Aug 2025 16:18:17 +0200 Subject: [PATCH 1/7] Enable command-line overrides for key parameters in whorl_pose_detect.py --- whorl_pose_detect.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/whorl_pose_detect.py b/whorl_pose_detect.py index 5f45847..f38f9c4 100644 --- a/whorl_pose_detect.py +++ b/whorl_pose_detect.py @@ -24,23 +24,37 @@ #################################################################################################################################### +# Parse CLI arguments first +parser = argparse.ArgumentParser() +parser.add_argument("--dir_root", default="data", help="Path to root folder where .las/.laz files are stored") +parser.add_argument("--my_model", default="whorl_pose_nano_1000px/weights/best.pt", help="Path to YOLO model weights") +parser.add_argument("--alpha", type=float, default=0.5, help="Alpha value for plotting") +parser.add_argument("--min_internodal_d", type=float, default=0.3, help="Minimum internodal distance in meters") +parser.add_argument("--tree_id_label", default="treeID", help="Column name for tree IDs") +parser.add_argument("--semantic_label", default="semantic", help="Column name for semantic labels") +args = parser.parse_args() + +# --------------------------------------------------------- +# Default parameters (can be overridden by CLI arguments) +# --------------------------------------------------------- + # directory to where YOLO temp predictions are stored -dir_root="data" # path to root folder where .las/.laz files are stored +dir_root = args.dir_root # path to root folder where .las/.laz files are stored # alpha for plotting -alpha= 0.5 +alpha = args.alpha # minimum distance between whorls (used to remove duplicates) -min_internodal_d= 0.3 # in m (it can be set to something like 0.01 to allow the full output to post-process later) +min_internodal_d = args.min_internodal_d # in m (can be set to 0.01 to allow full output post-processing later) # pose model -my_model="whorl_pose_nano_1000px/weights/best.pt" +my_model = args.my_model # label for the column with tree instance unique identifiers -tree_id_label='treeID' +tree_id_label = args.tree_id_label -# label for the column with semantic labels (non required) -semantic_label='semantic' +# label for the column with semantic labels (non-required) +semantic_label = args.semantic_label #################################################################################################################################### # files_to_process= list_las_laz_files(dir_root) @@ -145,3 +159,4 @@ # Cleanup temp files import shutil shutil.rmtree(dir_pred) + From e4ff918a1525b039d32b766476b860ee4687fc9b Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Mon, 11 Aug 2025 16:21:32 +0200 Subject: [PATCH 2/7] Update README.md removed line: "cd whorl_pose_detector" changed command line example from "python whorl_pose_detect_CLI.py --dir_root data ......" to "python whorl_pose_detect.py --dir_root data ......" --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ce9baca..4a1c214 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ conda activate BranchPoseNet Then install the required libraries ``` -cd whorl_pose_detector pip install -r requirements.txt ``` @@ -31,7 +30,7 @@ For predicting on your own data just point the --dir_root to the path to the fol ### 🖥️ To run using command line (CLI): ``` -python whorl_pose_detect_CLI.py --dir_root data --my_model whorl_pose_nano_1000px/weights/best.pt --alpha 0.5 --min_internodal_d 0.3 --tree_id_label treeID --semantic_label semantic +python whorl_pose_detect.py --dir_root data --my_model whorl_pose_nano_1000px/weights/best.pt --alpha 0.5 --min_internodal_d 0.3 --tree_id_label treeID --semantic_label semantic ``` ### 🎮 Demo version From 50596d5e9d1c160aa23f0706cfc20e0628cb33fb Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Mon, 11 Aug 2025 16:23:02 +0200 Subject: [PATCH 3/7] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a1c214..bc366cb 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ For predicting on your own data just point the --dir_root to the path to the fol ### 🖥️ To run using command line (CLI): ``` -python whorl_pose_detect.py --dir_root data --my_model whorl_pose_nano_1000px/weights/best.pt --alpha 0.5 --min_internodal_d 0.3 --tree_id_label treeID --semantic_label semantic +python whorl_pose_detect.py --dir_root data --my_model models/whorl_pose_nano_1000px/weights/best.pt --alpha 0.5 --min_internodal_d 0.3 --tree_id_label treeID --semantic_label semantic ``` ### 🎮 Demo version From 0d39a150e1f5b57fb46dfc5e9662090cd485b108 Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Mon, 11 Aug 2025 17:00:15 +0200 Subject: [PATCH 4/7] Add files via upload --- requirements.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ac16299 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +pandas +numpy +laspy[lazrs] +Pillow +scipy +matplotlib +ultralytics From 93fc0acf67904b6f7d737e0dd77fbcd8248f0602 Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Mon, 11 Aug 2025 17:10:50 +0200 Subject: [PATCH 5/7] Update whorl_pose_detect.py --- whorl_pose_detect.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/whorl_pose_detect.py b/whorl_pose_detect.py index f38f9c4..c0121a6 100644 --- a/whorl_pose_detect.py +++ b/whorl_pose_detect.py @@ -12,7 +12,7 @@ import matplotlib matplotlib.use('Agg') # Use Agg backend for non-GUI rendering import matplotlib.pyplot as plt - +import argparse import ultralytics from ultralytics import YOLO @@ -160,3 +160,4 @@ import shutil shutil.rmtree(dir_pred) + From 72712ceecd83c3383f7b919820719720c7a0befe Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Wed, 13 Aug 2025 10:19:55 +0200 Subject: [PATCH 6/7] Update whorl_pose_detect.py --- whorl_pose_detect.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/whorl_pose_detect.py b/whorl_pose_detect.py index c0121a6..d152327 100644 --- a/whorl_pose_detect.py +++ b/whorl_pose_detect.py @@ -27,7 +27,7 @@ # Parse CLI arguments first parser = argparse.ArgumentParser() parser.add_argument("--dir_root", default="data", help="Path to root folder where .las/.laz files are stored") -parser.add_argument("--my_model", default="whorl_pose_nano_1000px/weights/best.pt", help="Path to YOLO model weights") +parser.add_argument("--my_model", default="models/whorl_pose_nano_1000px/weights/best.pt", help="Path to YOLO model weights") parser.add_argument("--alpha", type=float, default=0.5, help="Alpha value for plotting") parser.add_argument("--min_internodal_d", type=float, default=0.3, help="Minimum internodal distance in meters") parser.add_argument("--tree_id_label", default="treeID", help="Column name for tree IDs") @@ -161,3 +161,4 @@ shutil.rmtree(dir_pred) + From 4d43dde8981d401af2afda49767c779d403b747d Mon Sep 17 00:00:00 2001 From: Alexander Scharf Date: Wed, 13 Aug 2025 10:21:26 +0200 Subject: [PATCH 7/7] Update model path in demo_predict_whorl_pose.ipynb --- demo_predict_whorl_pose.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo_predict_whorl_pose.ipynb b/demo_predict_whorl_pose.ipynb index f84b691..3f89f19 100644 --- a/demo_predict_whorl_pose.ipynb +++ b/demo_predict_whorl_pose.ipynb @@ -149,7 +149,7 @@ "min_internodal_d= 0.3 # in m (it can be set to something like 0.01 to allow the full output to post-process later)\n", "\n", "# pose model\n", - "my_model=\"whorl_pose_nano_1000px/weights/best.pt\"\n", + "my_model=\"models/whorl_pose_nano_1000px/weights/best.pt\"\n", "\n", "# label for the column with tree instance unique identifiers\n", "tree_id_label='treeID' \n",