add native 3D object detection using ZED SDK optimized models
Add engines::ZedNative class wrapping ZED SDK's TensorRT-optimized object detection. On every frame grab, detected objects (label, confidence, 3D position, 2D/3D bounding boxes) are serialized as a flat float32 array and sent as a new "objects" dora output with frame_id correlation to image_bgr. Extract shared env-var helpers into src/util/env.h and expose sl::Camera& via Camera::handle() for engine access. Closes #3
This commit is contained in:
+14
-39
@@ -1,8 +1,7 @@
|
||||
#include "zed/camera.h"
|
||||
#include "util/env.h"
|
||||
|
||||
#include <cctype>
|
||||
#include <chrono>
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
#include <string>
|
||||
@@ -10,34 +9,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
int get_env_int(const char* name, int default_value) {
|
||||
const char* value = std::getenv(name);
|
||||
if (!value || std::string(value).empty()) {
|
||||
return default_value;
|
||||
}
|
||||
return std::stoi(value);
|
||||
}
|
||||
|
||||
bool get_env_bool(const char* name, bool default_value) {
|
||||
const char* value = std::getenv(name);
|
||||
if (!value || std::string(value).empty()) {
|
||||
return default_value;
|
||||
}
|
||||
std::string v(value);
|
||||
for (auto& c : v) {
|
||||
c = static_cast<char>(std::tolower(c));
|
||||
}
|
||||
return v == "1" || v == "true" || v == "yes" || v == "on";
|
||||
}
|
||||
|
||||
std::string get_env_str(const char* name, const std::string& default_value) {
|
||||
const char* value = std::getenv(name);
|
||||
if (!value || std::string(value).empty()) {
|
||||
return default_value;
|
||||
}
|
||||
return std::string(value);
|
||||
}
|
||||
|
||||
sl::RESOLUTION parse_resolution(int resolution) {
|
||||
switch (resolution) {
|
||||
case 1080:
|
||||
@@ -86,15 +57,15 @@ namespace zed {
|
||||
|
||||
Config Config::from_env() {
|
||||
Config c;
|
||||
c.resolution = get_env_int("ZED_RESOLUTION", c.resolution);
|
||||
c.fps = get_env_int("ZED_FPS", c.fps);
|
||||
c.depth_mode = get_env_str("ZED_DEPTH_MODE", c.depth_mode);
|
||||
c.depth_min_mm = get_env_int("ZED_DEPTH_MIN_MM", c.depth_min_mm);
|
||||
c.depth_max_mm = get_env_int("ZED_DEPTH_MAX_MM", c.depth_max_mm);
|
||||
c.depth_fill = get_env_bool("ZED_DEPTH_FILL", c.depth_fill);
|
||||
c.flip = get_env_str("ZED_FLIP", c.flip);
|
||||
c.warmup_frames = get_env_int("ZED_WARMUP_FRAMES", c.warmup_frames);
|
||||
int retry_seconds = get_env_int("ZED_RETRY_INTERVAL_SECONDS", 5);
|
||||
c.resolution = util::get_env_int("ZED_RESOLUTION", c.resolution);
|
||||
c.fps = util::get_env_int("ZED_FPS", c.fps);
|
||||
c.depth_mode = util::get_env_str("ZED_DEPTH_MODE", c.depth_mode);
|
||||
c.depth_min_mm = util::get_env_int("ZED_DEPTH_MIN_MM", c.depth_min_mm);
|
||||
c.depth_max_mm = util::get_env_int("ZED_DEPTH_MAX_MM", c.depth_max_mm);
|
||||
c.depth_fill = util::get_env_bool("ZED_DEPTH_FILL", c.depth_fill);
|
||||
c.flip = util::get_env_str("ZED_FLIP", c.flip);
|
||||
c.warmup_frames = util::get_env_int("ZED_WARMUP_FRAMES", c.warmup_frames);
|
||||
int retry_seconds = util::get_env_int("ZED_RETRY_INTERVAL_SECONDS", 5);
|
||||
c.retry_interval_ms = retry_seconds * 1000;
|
||||
return c;
|
||||
}
|
||||
@@ -172,4 +143,8 @@ sl::Mat& Camera::point_cloud() {
|
||||
return point_cloud_mat_;
|
||||
}
|
||||
|
||||
sl::Camera& Camera::handle() {
|
||||
return zed_;
|
||||
}
|
||||
|
||||
} // namespace zed
|
||||
|
||||
Reference in New Issue
Block a user