Port complete CAN-aware risk pipeline to C++
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
#include "config.hpp"
|
||||
#include "door_risk.hpp"
|
||||
#include <fstream>
|
||||
#include <stdexcept>
|
||||
|
||||
namespace cms {
|
||||
PipelineConfig loadConfig(std::filesystem::path const& path) {
|
||||
std::ifstream file(path);
|
||||
if(!file)throw std::runtime_error("Cannot read configuration: "+path.string());
|
||||
auto j=Json::parse(file);PipelineConfig config;
|
||||
auto const& camera=j.at("camera");
|
||||
config.camera.device=camera.at("device");config.camera.width=camera.at("width");
|
||||
config.camera.height=camera.at("height");config.camera.fps=camera.at("fps");
|
||||
config.camera.buffers=camera.at("buffers");config.camera.timeout_ms=camera.at("timeout_ms");
|
||||
auto resolve=[&](std::string const& value){auto p=std::filesystem::path(value);return std::filesystem::absolute(p.is_absolute()?p:path.parent_path()/p);};
|
||||
auto const& inference=j.at("inference");
|
||||
config.engines=resolve(inference.at("engine_directory"));config.max_people=inference.at("max_people");
|
||||
config.detector_confidence=inference.at("detector_confidence");config.queue_capacity=inference.at("queue_capacity");
|
||||
auto const& door=j.at("door");config.door_mask=resolve(door.at("mask"));
|
||||
config.warning_relative=door.at("warning_relative");config.release_relative=door.at("release_relative");
|
||||
config.door_mask_calibration_verified=door.at("calibration_verified");
|
||||
config.door_zone_config=resolve(door.at("zone_config"));
|
||||
if(j.contains("can")) {
|
||||
auto const& can=j.at("can");config.can_enabled=can.value("enabled",true);
|
||||
config.can_side=can.value("side",std::string("left"));config.can_timeout_ms=can.value("timeout_ms",1000.0);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user