#include "config.hpp" #include "door_risk.hpp" #include #include 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"); if(j.contains("lazy_inference")) { auto const& gate=j.at("lazy_inference"); config.lazy_gate.threshold_percent=gate.value("threshold_percent",15); config.lazy_gate.can_timeout_ms=gate.value("can_timeout_ms",1000); config.lazy_gate.motion_timeout_ms=gate.value("motion_timeout_ms",300); } return config; } }