iVS3D v2.0.0
Loading...
Searching...
No Matches
helpers.hpp
1#pragma once
2
3#include <string>
4#include <vector>
5#include <opencv2/core.hpp>
6
7struct ClassInfo {
8 std::string name;
9 std::array<uint8_t, 3> color; // RGB color
10};
11
13{
14 std::vector<float> mean;
15 std::vector<float> std;
16 std::vector<ClassInfo> classes;
17};
18
19ModelConfig load_config(const std::string &config_path)
20{
21 cv::FileStorage fs(config_path, cv::FileStorage::READ | cv::FileStorage::FORMAT_JSON);
22 if (!fs.isOpened()) {
23 throw std::runtime_error("Could not open config file: " + config_path);
24 }
25
26 ModelConfig config;
27
28 cv::FileNode mean_node = fs["mean"];
29 for (const auto& val : mean_node) {
30 config.mean.push_back((float)val);
31 }
32
33 cv::FileNode std_node = fs["std"];
34 for (const auto& val : std_node) {
35 config.std.push_back((float)val);
36 }
37
38 cv::FileNode classes_node = fs["classes"];
39 for (const auto& class_node : classes_node) {
40 ClassInfo class_info;
41 class_node["name"] >> class_info.name;
42 //class_node["color"] >> class_info.color;
43 cv::FileNode color_node = class_node["color"];
44 for (int i = 0; i < 3; ++i) {
45 if (color_node[i].isInt()) {
46 color_node[i] >> class_info.color[i];
47 } else {
48 throw std::runtime_error("Color values must be integers in range [0, 255]");
49 }
50 }
51 config.classes.push_back(class_info);
52 }
53
54 return config;
55}
Definition helpers.hpp:7
Definition helpers.hpp:13