OpenPose  1.0.0rc2
OpenPose: A Real-Time Multi-Person Key-Point Detection And Multi-Threading C++ Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
datum.hpp
Go to the documentation of this file.
1 #ifndef OPENPOSE_CORE_DATUM_HPP
2 #define OPENPOSE_CORE_DATUM_HPP
3 
4 #ifdef USE_EIGEN
5  #include <Eigen/Core>
6 #endif
7 #include <opencv2/core/core.hpp> // cv::Mat
9 
10 namespace op
11 {
18  struct OP_API Datum
19  {
20  // ---------------------------------------- ID parameters ---------------------------------------- //
21  unsigned long long id;
23  unsigned long long subId;
25  unsigned long long subIdMax;
31 
37  unsigned long long frameNumber;
38 
39  // ------------------------------ Input image and rendered version parameters ------------------------------ //
44  cv::Mat cvInputData;
45 
55  std::vector<Array<float>> inputNetData;
56 
64 
71  cv::Mat cvOutputData;
72 
73  // ------------------------------ Resulting Array<float> data parameters ------------------------------ //
80 
89 
99 
113 
123  std::vector<std::vector<std::array<float,3>>> poseCandidates;
124 
130  std::vector<Rectangle<float>> faceRectangles;
131 
138 
145 
151  std::vector<std::array<Rectangle<float>, 2>> handRectangles;
152 
159  std::array<Array<float>, 2> handKeypoints;
160 
166  std::array<Array<float>, 2> handHeatMaps;
167 
168  // ---------------------------------------- 3-D Reconstruction parameters ---------------------------------------- //
174 
181 
188  std::array<Array<float>, 2> handKeypoints3D;
189 
193  cv::Mat cameraMatrix;
194 
199 
204 
205  // ---------------------------------------- Other (internal) parameters ---------------------------------------- //
209  std::vector<double> scaleInputToNetInputs;
210 
215  std::vector<Point<int>> netInputSizes;
216 
221 
226 
231 
236  std::pair<int, std::string> elementRendered;
237 
238  // 3D/Adam parameters
239  // Adam/Unity params
240  std::vector<double> adamPosePtr;
242  std::vector<double> adamTranslationPtr;
243  std::vector<double> vtVecPtr;
245  std::vector<double> j0VecPtr;
247  std::vector<double> adamFaceCoeffsExpPtr;
249  #ifdef USE_EIGEN
250  // Adam/Unity params
251  Eigen::Matrix<double, 62, 3, Eigen::RowMajor> adamPose;
252  Eigen::Vector3d adamTranslation;
253  // Adam params (Jacobians)
254  Eigen::Matrix<double, Eigen::Dynamic, 1> vtVec;
255  Eigen::Matrix<double, Eigen::Dynamic, 1> j0Vec;
256  Eigen::VectorXd adamFaceCoeffsExp;
257  #endif
258 
259 
260 
261 
262 
263  // ---------------------------------------- Functions ---------------------------------------- //
269  explicit Datum();
270 
279  Datum(const Datum& datum);
280 
287  Datum& operator=(const Datum& datum);
288 
294  Datum(Datum&& datum);
295 
302  Datum& operator=(Datum&& datum);
303 
308  virtual ~Datum();
309 
317  Datum clone() const;
318 
319 
320 
321 
322 
323  // ---------------------------------------- Comparison operators ---------------------------------------- //
329  inline bool operator<(const Datum& datum) const
330  {
331  // return id < datum.id;
332  return id < datum.id || (id == datum.id && subId < datum.subId);
333  }
339  inline bool operator>(const Datum& datum) const
340  {
341  // return id > datum.id;
342  return id > datum.id || (id == datum.id && subId > datum.subId);
343  }
349  inline bool operator<=(const Datum& datum) const
350  {
351  // return id <= datum.id;
352  return id < datum.id || (id == datum.id && subId <= datum.subId);
353  }
359  inline bool operator>=(const Datum& datum) const
360  {
361  // return id >= datum.id;
362  return id > datum.id || (id == datum.id && subId >= datum.subId);
363  }
369  inline bool operator==(const Datum& datum) const
370  {
371  // return id == datum.id;
372  return id == datum.id && subId == datum.subId;
373  }
379  inline bool operator!=(const Datum& datum) const
380  {
381  // return id != datum.id;
382  return id != datum.id || subId != datum.subId;
383  }
384  };
385 
386  // Defines for Datum. Added here rather than in `macros.hpp` to avoid circular dependencies
387  #define DATUM_BASE_NO_PTR std::vector<Datum>
388  #define DATUM_BASE std::shared_ptr<DATUM_BASE_NO_PTR>
389  #define DEFINE_TEMPLATE_DATUM(templateName) template class OP_API templateName<DATUM_BASE>
390  #define COMPILE_TEMPLATE_DATUM(templateName) extern DEFINE_TEMPLATE_DATUM(templateName)
391 }
392 
393 #endif // OPENPOSE_CORE_DATUM_HPP
int j0VecRows
Definition: datum.hpp:246
std::vector< double > adamPosePtr
Definition: datum.hpp:240
std::string name
Definition: datum.hpp:30
double scaleInputToOutput
Definition: datum.hpp:220
bool operator==(const Datum &datum) const
Definition: datum.hpp:369
Array< long long > poseIds
Definition: datum.hpp:88
std::vector< Array< float > > inputNetData
Definition: datum.hpp:55
int adamFaceCoeffsExpRows
Definition: datum.hpp:248
Array< float > faceKeypoints3D
Definition: datum.hpp:180
int vtVecRows
Definition: datum.hpp:244
Array< float > poseHeatMaps
Definition: datum.hpp:112
unsigned long long subId
Definition: datum.hpp:23
cv::Mat cameraMatrix
Definition: datum.hpp:193
std::array< Array< float >, 2 > handHeatMaps
Definition: datum.hpp:166
double scaleNetToOutput
Definition: datum.hpp:230
std::pair< int, std::string > elementRendered
Definition: datum.hpp:236
std::vector< double > vtVecPtr
Definition: datum.hpp:243
std::vector< double > scaleInputToNetInputs
Definition: datum.hpp:209
std::vector< std::vector< std::array< float, 3 > > > poseCandidates
Definition: datum.hpp:123
bool operator!=(const Datum &datum) const
Definition: datum.hpp:379
unsigned long long subIdMax
Definition: datum.hpp:25
std::vector< double > adamTranslationPtr
Definition: datum.hpp:242
Array< float > poseKeypoints3D
Definition: datum.hpp:173
std::array< Array< float >, 2 > handKeypoints3D
Definition: datum.hpp:188
std::vector< Rectangle< float > > faceRectangles
Definition: datum.hpp:130
cv::Mat cameraExtrinsics
Definition: datum.hpp:198
Array< float > poseKeypoints
Definition: datum.hpp:79
std::vector< std::array< Rectangle< float >, 2 > > handRectangles
Definition: datum.hpp:151
int adamPoseRows
Definition: datum.hpp:241
bool operator<(const Datum &datum) const
Definition: datum.hpp:329
Array< float > outputData
Definition: datum.hpp:63
std::array< Array< float >, 2 > handKeypoints
Definition: datum.hpp:159
std::vector< Point< int > > netInputSizes
Definition: datum.hpp:215
Definition: datum.hpp:18
Point< int > netOutputSize
Definition: datum.hpp:225
Array< float > faceHeatMaps
Definition: datum.hpp:144
cv::Mat cvInputData
Definition: datum.hpp:44
cv::Mat cvOutputData
Definition: datum.hpp:71
cv::Mat cameraIntrinsics
Definition: datum.hpp:203
std::vector< double > adamFaceCoeffsExpPtr
Definition: datum.hpp:247
Array< float > faceKeypoints
Definition: datum.hpp:137
Array< float > poseScores
Definition: datum.hpp:98
unsigned long long id
Definition: datum.hpp:21
bool operator<=(const Datum &datum) const
Definition: datum.hpp:349
std::vector< double > j0VecPtr
Definition: datum.hpp:245
#define OP_API
Definition: macros.hpp:18
bool operator>(const Datum &datum) const
Definition: datum.hpp:339
bool operator>=(const Datum &datum) const
Definition: datum.hpp:359
std::string string
Definition: cl2.hpp:574
unsigned long long frameNumber
Definition: datum.hpp:37