|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
#include <iostream> |
|
|
#include <map> |
|
|
#include <string> |
|
|
#include <vector> |
|
|
|
|
|
#include "yaml-cpp/yaml.h" |
|
|
|
|
|
#ifdef _WIN32 |
|
|
#define OS_PATH_SEP "\\" |
|
|
#else |
|
|
#define OS_PATH_SEP "/" |
|
|
#endif |
|
|
|
|
|
namespace PaddleDetection { |
|
|
|
|
|
|
|
|
class ConfigPaser { |
|
|
public: |
|
|
ConfigPaser() {} |
|
|
|
|
|
~ConfigPaser() {} |
|
|
|
|
|
bool load_config(const std::string& model_dir, |
|
|
const std::string& cfg = "infer_cfg.yml") { |
|
|
|
|
|
YAML::Node config; |
|
|
config = YAML::LoadFile(model_dir + OS_PATH_SEP + cfg); |
|
|
|
|
|
|
|
|
if (config["mode"].IsDefined()) { |
|
|
mode_ = config["mode"].as<std::string>(); |
|
|
} else { |
|
|
std::cerr << "Please set mode, " |
|
|
<< "support value : paddle/trt_fp16/trt_fp32." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
|
|
|
if (config["arch"].IsDefined()) { |
|
|
arch_ = config["arch"].as<std::string>(); |
|
|
} else { |
|
|
std::cerr << "Please set model arch," |
|
|
<< "support value : FairMot, YOLO, PicoDet, LCNet etc" |
|
|
<< std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
|
|
|
if (config["min_subgraph_size"].IsDefined()) { |
|
|
min_subgraph_size_ = config["min_subgraph_size"].as<int>(); |
|
|
} else { |
|
|
std::cerr << "Please set min_subgraph_size." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (config["draw_threshold"].IsDefined()) { |
|
|
draw_threshold_ = config["draw_threshold"].as<float>(); |
|
|
} else { |
|
|
std::cerr << "Please set draw_threshold." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (config["Preprocess"].IsDefined()) { |
|
|
preprocess_info_ = config["Preprocess"]; |
|
|
} else { |
|
|
std::cerr << "Please set Preprocess." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (config["label_list"].IsDefined()) { |
|
|
label_list_ = config["label_list"].as<std::vector<std::string>>(); |
|
|
} else { |
|
|
std::cerr << "Please set label_list." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
|
|
|
if (config["use_dynamic_shape"].IsDefined()) { |
|
|
use_dynamic_shape_ = config["use_dynamic_shape"].as<bool>(); |
|
|
} else { |
|
|
std::cerr << "Please set use_dynamic_shape." << std::endl; |
|
|
return false; |
|
|
} |
|
|
|
|
|
|
|
|
if (config["tracker"].IsDefined()) { |
|
|
if (config["tracker"]["conf_thres"].IsDefined()) { |
|
|
conf_thresh_ = config["tracker"]["conf_thres"].as<float>(); |
|
|
} else { |
|
|
std::cerr << "Please set conf_thres in tracker." << std::endl; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (config["NMS"].IsDefined()) { |
|
|
nms_info_ = config["NMS"]; |
|
|
} |
|
|
|
|
|
if (config["fpn_stride"].IsDefined()) { |
|
|
fpn_stride_.clear(); |
|
|
for (auto item : config["fpn_stride"]) { |
|
|
fpn_stride_.emplace_back(item.as<int>()); |
|
|
} |
|
|
} |
|
|
|
|
|
return true; |
|
|
} |
|
|
std::string mode_; |
|
|
float draw_threshold_; |
|
|
std::string arch_; |
|
|
int min_subgraph_size_; |
|
|
YAML::Node preprocess_info_; |
|
|
YAML::Node nms_info_; |
|
|
std::vector<std::string> label_list_; |
|
|
std::vector<int> fpn_stride_; |
|
|
bool use_dynamic_shape_; |
|
|
float conf_thresh_; |
|
|
}; |
|
|
|
|
|
} |
|
|
|