From 7dc85ba7eb53c1700713a84ed8a64dd675d3f3dd Mon Sep 17 00:00:00 2001 From: WilyHyperion Date: Thu, 12 Mar 2026 00:55:01 +0000 Subject: [PATCH 1/5] store target types and send them to the gcs --- configs/dev.json | 2 +- include/cv/aggregator.hpp | 1 + src/camera/mock.cpp | 13 +++++++------ src/cv/aggregator.cpp | 1 + src/network/gcs_routes.cpp | 3 +++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/configs/dev.json b/configs/dev.json index e55ddd1f..0ad5b18c 100644 --- a/configs/dev.json +++ b/configs/dev.json @@ -54,7 +54,7 @@ }, "cv": { "yolo_model_dir": "/workspaces/obcpp/models/yolo-wittner-v2.onnx", - "detection_threshold": 0.35, + "detection_threshold": 0.1, "input_width": 1024, "input_height": 1024 }, diff --git a/include/cv/aggregator.hpp b/include/cv/aggregator.hpp index 003173a9..21f80bd7 100644 --- a/include/cv/aggregator.hpp +++ b/include/cv/aggregator.hpp @@ -24,6 +24,7 @@ struct AggregatedRun { cv::Mat annotatedImage; // The "big image" with bounding boxes drawn std::vector bboxes; // All bounding boxes in that image std::vector coords; // Matching lat-longs for each bounding box + std::vector targetTypes; // The corrsponding target types for each detection }; struct CVResults { diff --git a/src/camera/mock.cpp b/src/camera/mock.cpp index 730c3a61..8a9e6765 100644 --- a/src/camera/mock.cpp +++ b/src/camera/mock.cpp @@ -113,12 +113,13 @@ std::optional MockCamera::takePicture(const std::chrono::milliseconds ImageTelemetry telemetry = telemetryOpt.value(); - httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + - "&lat=" + std::to_string(telemetry.latitude_deg) + - "&lon=" + std::to_string(telemetry.longitude_deg) + - "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT - "&heading=" + std::to_string(telemetry.heading_deg) + - "&format=png"); + // httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + + // "&lat=" + std::to_string(telemetry.latitude_deg) + + // "&lon=" + std::to_string(telemetry.longitude_deg) + + // "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT + // "&heading=" + std::to_string(telemetry.heading_deg) + + // "&format=png"); + httplib::Result res = cli.Get("/generate?&format=png"); if (!res || res->status != 200) { LOG_F(ERROR, "Failed to query server for images"); diff --git a/src/cv/aggregator.cpp b/src/cv/aggregator.cpp index 1e61b098..df10e4df 100644 --- a/src/cv/aggregator.cpp +++ b/src/cv/aggregator.cpp @@ -87,6 +87,7 @@ void CVAggregator::worker(ImageData image, int thread_num) { for (auto& det : pipeline_results.targets) { run.bboxes.push_back(det.bbox); run.coords.push_back(det.coord); + run.targetTypes.push_back(det.likely_airdrop); } { diff --git a/src/network/gcs_routes.cpp b/src/network/gcs_routes.cpp index 33eb3f0c..1a15cabf 100644 --- a/src/network/gcs_routes.cpp +++ b/src/network/gcs_routes.cpp @@ -383,6 +383,9 @@ DEF_GCS_HANDLE(Get, targets, all) { proto_bbox->set_y1(run.bboxes[i].y1); proto_bbox->set_x2(run.bboxes[i].x2); proto_bbox->set_y2(run.bboxes[i].y2); + + //add a target type + target.add_target_type(run.targetTypes[i]); } // copy the target to a record object to store From 3c71d990caa45df51725119f75de6116c55c8dd7 Mon Sep 17 00:00:00 2001 From: WilyHyperion Date: Thu, 12 Mar 2026 00:55:01 +0000 Subject: [PATCH 2/5] store target types and send them to the gcs --- configs/dev.json | 2 +- include/cv/aggregator.hpp | 1 + src/camera/mock.cpp | 13 +++++++------ src/cv/aggregator.cpp | 1 + src/network/gcs_routes.cpp | 3 +++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/configs/dev.json b/configs/dev.json index ec756677..cb9da43a 100644 --- a/configs/dev.json +++ b/configs/dev.json @@ -54,7 +54,7 @@ }, "cv": { "yolo_model_dir": "/workspaces/obcpp/models/yolo-wittner-v2.onnx", - "detection_threshold": 0.35, + "detection_threshold": 0.1, "input_width": 1024, "input_height": 1024 }, diff --git a/include/cv/aggregator.hpp b/include/cv/aggregator.hpp index 003173a9..21f80bd7 100644 --- a/include/cv/aggregator.hpp +++ b/include/cv/aggregator.hpp @@ -24,6 +24,7 @@ struct AggregatedRun { cv::Mat annotatedImage; // The "big image" with bounding boxes drawn std::vector bboxes; // All bounding boxes in that image std::vector coords; // Matching lat-longs for each bounding box + std::vector targetTypes; // The corrsponding target types for each detection }; struct CVResults { diff --git a/src/camera/mock.cpp b/src/camera/mock.cpp index 730c3a61..8a9e6765 100644 --- a/src/camera/mock.cpp +++ b/src/camera/mock.cpp @@ -113,12 +113,13 @@ std::optional MockCamera::takePicture(const std::chrono::milliseconds ImageTelemetry telemetry = telemetryOpt.value(); - httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + - "&lat=" + std::to_string(telemetry.latitude_deg) + - "&lon=" + std::to_string(telemetry.longitude_deg) + - "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT - "&heading=" + std::to_string(telemetry.heading_deg) + - "&format=png"); + // httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + + // "&lat=" + std::to_string(telemetry.latitude_deg) + + // "&lon=" + std::to_string(telemetry.longitude_deg) + + // "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT + // "&heading=" + std::to_string(telemetry.heading_deg) + + // "&format=png"); + httplib::Result res = cli.Get("/generate?&format=png"); if (!res || res->status != 200) { LOG_F(ERROR, "Failed to query server for images"); diff --git a/src/cv/aggregator.cpp b/src/cv/aggregator.cpp index 1e61b098..df10e4df 100644 --- a/src/cv/aggregator.cpp +++ b/src/cv/aggregator.cpp @@ -87,6 +87,7 @@ void CVAggregator::worker(ImageData image, int thread_num) { for (auto& det : pipeline_results.targets) { run.bboxes.push_back(det.bbox); run.coords.push_back(det.coord); + run.targetTypes.push_back(det.likely_airdrop); } { diff --git a/src/network/gcs_routes.cpp b/src/network/gcs_routes.cpp index 2bfbc63b..f40dd880 100644 --- a/src/network/gcs_routes.cpp +++ b/src/network/gcs_routes.cpp @@ -383,6 +383,9 @@ DEF_GCS_HANDLE(Get, targets, all) { proto_bbox->set_y1(run.bboxes[i].y1); proto_bbox->set_x2(run.bboxes[i].x2); proto_bbox->set_y2(run.bboxes[i].y2); + + //add a target type + target.add_target_type(run.targetTypes[i]); } // copy the target to a record object to store From 53c991278fe3d42cbec17717495d4b545e349ff0 Mon Sep 17 00:00:00 2001 From: WilyHyperion Date: Fri, 1 May 2026 00:34:38 +0000 Subject: [PATCH 3/5] reserve list before adding --- src/cv/aggregator.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cv/aggregator.cpp b/src/cv/aggregator.cpp index df10e4df..744db687 100644 --- a/src/cv/aggregator.cpp +++ b/src/cv/aggregator.cpp @@ -83,11 +83,12 @@ void CVAggregator::worker(ImageData image, int thread_num) { run.annotatedImage = pipeline_results.imageData.DATA.clone(); run.bboxes.reserve(pipeline_results.targets.size()); run.coords.reserve(pipeline_results.targets.size()); - + run.targetTypes.reserve(pipeline_results.targets.size()); + for (auto& det : pipeline_results.targets) { run.bboxes.push_back(det.bbox); run.coords.push_back(det.coord); - run.targetTypes.push_back(det.likely_airdrop); + run.targetTypes.push_back(det.likely_airdrop); } { From d406d42250e4892e42da31639417562de3cd2196 Mon Sep 17 00:00:00 2001 From: WilyHyperion Date: Tue, 2 Jun 2026 22:06:32 +0000 Subject: [PATCH 4/5] Lint and swap mock camera back to old code --- include/cv/aggregator.hpp | 10 +++++----- src/camera/mock.cpp | 14 +++++++------- src/cv/aggregator.cpp | 4 +--- src/network/gcs_routes.cpp | 3 +-- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/include/cv/aggregator.hpp b/include/cv/aggregator.hpp index 21f80bd7..e2103f80 100644 --- a/include/cv/aggregator.hpp +++ b/include/cv/aggregator.hpp @@ -20,11 +20,11 @@ #include "utilities/lockptr.hpp" struct AggregatedRun { - int run_id; // Unique integer ID for this pipeline run - cv::Mat annotatedImage; // The "big image" with bounding boxes drawn - std::vector bboxes; // All bounding boxes in that image - std::vector coords; // Matching lat-longs for each bounding box - std::vector targetTypes; // The corrsponding target types for each detection + int run_id; // Unique integer ID for this pipeline run + cv::Mat annotatedImage; // The "big image" with bounding boxes drawn + std::vector bboxes; // All bounding boxes in that image + std::vector coords; // Matching lat-longs for each bounding box + std::vector targetTypes; // The corrsponding target types for each detection }; struct CVResults { diff --git a/src/camera/mock.cpp b/src/camera/mock.cpp index 8a9e6765..2d483501 100644 --- a/src/camera/mock.cpp +++ b/src/camera/mock.cpp @@ -113,13 +113,13 @@ std::optional MockCamera::takePicture(const std::chrono::milliseconds ImageTelemetry telemetry = telemetryOpt.value(); - // httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + - // "&lat=" + std::to_string(telemetry.latitude_deg) + - // "&lon=" + std::to_string(telemetry.longitude_deg) + - // "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT - // "&heading=" + std::to_string(telemetry.heading_deg) + - // "&format=png"); - httplib::Result res = cli.Get("/generate?&format=png"); + httplib::Result res = cli.Get("/stream/frame?session_id=" + this->session_id + + "&lat=" + std::to_string(telemetry.latitude_deg) + + "&lon=" + std::to_string(telemetry.longitude_deg) + + "&alt_ft=" + std::to_string(static_cast((telemetry.altitude_agl_m * 3.281))) + //NOLINT + "&heading=" + std::to_string(telemetry.heading_deg) + + "&format=png"); + // httplib::Result res = cli.Get("/generate?&format=png"); if (!res || res->status != 200) { LOG_F(ERROR, "Failed to query server for images"); diff --git a/src/cv/aggregator.cpp b/src/cv/aggregator.cpp index 744db687..93b246ef 100644 --- a/src/cv/aggregator.cpp +++ b/src/cv/aggregator.cpp @@ -84,13 +84,11 @@ void CVAggregator::worker(ImageData image, int thread_num) { run.bboxes.reserve(pipeline_results.targets.size()); run.coords.reserve(pipeline_results.targets.size()); run.targetTypes.reserve(pipeline_results.targets.size()); - for (auto& det : pipeline_results.targets) { run.bboxes.push_back(det.bbox); run.coords.push_back(det.coord); - run.targetTypes.push_back(det.likely_airdrop); + run.targetTypes.push_back(det.likely_airdrop); } - { Lock lock(this->mut); this->results->runs.push_back(std::move(run)); diff --git a/src/network/gcs_routes.cpp b/src/network/gcs_routes.cpp index c4cbf6a1..75fe9b4d 100644 --- a/src/network/gcs_routes.cpp +++ b/src/network/gcs_routes.cpp @@ -383,8 +383,7 @@ DEF_GCS_HANDLE(Get, targets, all) { proto_bbox->set_y1(run.bboxes[i].y1); proto_bbox->set_x2(run.bboxes[i].x2); proto_bbox->set_y2(run.bboxes[i].y2); - - //add a target type + // Add a target type target.add_target_type(run.targetTypes[i]); } From 9cbb3205b1cdeadb822b14ae0654308e344f5afa Mon Sep 17 00:00:00 2001 From: WilyHyperion Date: Tue, 2 Jun 2026 22:08:53 +0000 Subject: [PATCH 5/5] Revert config change --- configs/dev.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/dev.json b/configs/dev.json index d07d07bb..9128d4e0 100644 --- a/configs/dev.json +++ b/configs/dev.json @@ -54,7 +54,7 @@ }, "cv": { "yolo_model_dir": "/workspaces/obcpp/models/yolo-wittner-v2.onnx", - "detection_threshold": 0.1, + "detection_threshold": 0.35, "input_width": 1024, "input_height": 1024 },