gaze  0.1.0
Perform gaze tracking with common webcams.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Groups Pages
config.h
1 #ifndef INCLUDE_GAZE_UTIL_CONFIG_H_
2 #define INCLUDE_GAZE_UTIL_CONFIG_H_
3 
4 #include "opencv2/opencv.hpp"
5 #include "yaml-cpp/yaml.h"
6 
7 
8 namespace gaze {
9 
10 namespace util {
11 
19 YAML::Node get_config();
20 
33 YAML::Node get_config(int pipeline_step_number);
34 
35 } // namespace util
36 
37 } // namespace gaze
38 
39 
47 namespace YAML {
48 
53 template<>
54 struct convert<cv::Point3d> {
62  static Node encode(const cv::Point3d& rhs) {
63  Node node;
64  node.push_back(rhs.x);
65  node.push_back(rhs.y);
66  node.push_back(rhs.z);
67  return node;
68  }
69 
78  static bool decode(const Node& node, cv::Point3d& rhs) { // NOLINT
79  if (!node.IsSequence() || node.size() != 3) {
80  return false;
81  }
82  rhs.x = node[0].as<double>();
83  rhs.y = node[1].as<double>();
84  rhs.z = node[2].as<double>();
85  return true;
86  }
87 };
88 
89 
94 template<>
95 struct convert<cv::Vec3d> {
103  static Node encode(const cv::Vec3d& rhs) {
104  Node node;
105  node.push_back(rhs[0]);
106  node.push_back(rhs[1]);
107  node.push_back(rhs[2]);
108  return node;
109  }
110 
119  static bool decode(const Node& node, cv::Vec3d& rhs) { // NOLINT
120  if (!node.IsSequence() || node.size() != 3) {
121  return false;
122  }
123  rhs[0] = node[0].as<double>();
124  rhs[1] = node[1].as<double>();
125  rhs[2] = node[2].as<double>();
126  return true;
127  }
128 };
129 
130 
135 template<>
136 struct convert<cv::Mat> {
143  static Node encode(const cv::Mat& rhs) {
144  Node node;
145  node["rows"] = rhs.rows;
146  node["cols"] = rhs.cols;
147  node["dt"] = 'd';
148 
149  Node data;
150  for (auto d = rhs.datastart; d != rhs.dataend; ++d) {
151  data.push_back(static_cast<double>(*d));
152  }
153  node["data"] = data;
154  return node;
155  }
156 
165  static bool decode(const Node& node, cv::Mat& rhs) { // NOLINT
166  if (!node["rows"] || !node["cols"] || !node["dt"] || !node["data"] ||
167  !node["data"].IsSequence()) {
168  return false;
169  }
170  char dt = node["dt"].as<char>();
171  if (dt != 'd') {
172  return false;
173  }
174  int rows = node["rows"].as<int>();
175  int cols = node["cols"].as<int>();
176  if (static_cast<decltype(node["data"].size())>(rows * cols) !=
177  node["data"].size()) {
178  return false;
179  }
180 
181  double* data = new double[rows * cols];
182  for (auto i = decltype(node["data"].size()){0}; i < node["data"].size();
183  ++i) {
184  data[i] = node["data"][i].as<double>();
185  }
186  cv::Mat mat = cv::Mat(rows, cols, CV_64F, data);
187  mat.copyTo(rhs);
188  delete[] data;
189  return true;
190  }
191 };
192 
193 } // namespace YAML
194 
195 #endif // INCLUDE_GAZE_UTIL_CONFIG_H_
static bool decode(const Node &node, cv::Point3d &rhs)
Definition: config.h:78
void copyTo(OutputArray m) const
static Node encode(const cv::Vec3d &rhs)
Definition: config.h:103
const uchar * datastart
size_t size() const
int cols() const
Point3_< double > Point3d
static Node encode(const cv::Mat &rhs)
Definition: config.h:143
static bool decode(const Node &node, cv::Vec3d &rhs)
Definition: config.h:119
#define CV_64F
static bool decode(const Node &node, cv::Mat &rhs)
Definition: config.h:165
const uchar * dataend
static Node encode(const cv::Point3d &rhs)
Definition: config.h:62
int rows() const
YAML::Node get_config()
Definition: config.in.cpp:12