OpenPose
1.7.0
The first real-time multi-person system to jointly detect human body, hand, facial, and foot keypoints
|
#include <datum.hpp>
Public Member Functions | |
Datum () | |
Datum (const Datum &datum) | |
Datum & | operator= (const Datum &datum) |
Datum (Datum &&datum) | |
Datum & | operator= (Datum &&datum) |
virtual | ~Datum () |
Datum | clone () const |
bool | operator< (const Datum &datum) const |
bool | operator> (const Datum &datum) const |
bool | operator<= (const Datum &datum) const |
bool | operator>= (const Datum &datum) const |
bool | operator== (const Datum &datum) const |
bool | operator!= (const Datum &datum) const |
Public Attributes | |
unsigned long long | id |
unsigned long long | subId |
unsigned long long | subIdMax |
std::string | name |
unsigned long long | frameNumber |
Matrix | cvInputData |
std::vector< Array< float > > | inputNetData |
Array< float > | outputData |
Matrix | cvOutputData |
Matrix | cvOutputData3D |
Array< float > | poseKeypoints |
Array< long long > | poseIds |
Array< float > | poseScores |
Array< float > | poseHeatMaps |
std::vector< std::vector< std::array< float, 3 > > > | poseCandidates |
std::vector< Rectangle< float > > | faceRectangles |
Array< float > | faceKeypoints |
Array< float > | faceHeatMaps |
std::vector< std::array< Rectangle< float >, 2 > > | handRectangles |
std::array< Array< float >, 2 > | handKeypoints |
std::array< Array< float >, 2 > | handHeatMaps |
Array< float > | poseKeypoints3D |
Array< float > | faceKeypoints3D |
std::array< Array< float >, 2 > | handKeypoints3D |
Matrix | cameraMatrix |
Matrix | cameraExtrinsics |
Matrix | cameraIntrinsics |
Array< float > | poseNetOutput |
std::vector< double > | scaleInputToNetInputs |
std::vector< Point< int > > | netInputSizes |
double | scaleInputToOutput |
Point< int > | netOutputSize |
double | scaleNetToOutput |
std::pair< int, std::string > | elementRendered |
Datum: The OpenPose Basic Piece of Information Between Threads Datum is one the main OpenPose classes/structs. The workers and threads share by default a std::shared_ptr<std::vector<Datum>>. It contains all the parameters that the different workers and threads need to exchange.
|
explicit |
Default constructor struct. It simply initializes the struct, id is temporary set to 0 and each other variable is assigned to its default value.
op::Datum::Datum | ( | const Datum & | datum | ) |
Copy constructor. It performs fast copy
: For performance purpose, copying a Datum or Array<T> or cv::Mat just copies the reference, it still shares the same internal data. Modifying the copied element will modify the original one. Use clone() for a slower but real copy, similarly to cv::Mat and Array<T>.
datum | Datum to be copied. |
op::Datum::Datum | ( | Datum && | datum | ) |
|
virtual |
Destructor class. Declared virtual so that Datum can be inherited.
Datum op::Datum::clone | ( | ) | const |
Clone function. Similar to cv::Mat::clone and Array<T>::clone. It performs a real but slow copy of the data, i.e., even if the copied element is modified, the original one is not.
|
inline |
|
inline |
|
inline |
Copy assignment. Similar to Datum::Datum(const Datum& datum).
datum | Datum to be copied. |
Move assignment. Similar to Datum::Datum(Datum&& datum).
datum | Datum to be moved. |
|
inline |
|
inline |
|
inline |
Matrix op::Datum::cameraExtrinsics |
Matrix op::Datum::cameraIntrinsics |
Matrix op::Datum::cameraMatrix |
Matrix op::Datum::cvInputData |
Matrix op::Datum::cvOutputData |
Matrix op::Datum::cvOutputData3D |
std::pair<int, std::string> op::Datum::elementRendered |
Pair with the element key id POSE_BODY_PART_MAPPING on pose/poseParameters.hpp
and its mapped value (e.g. 1 and "Neck").
Array<float> op::Datum::faceHeatMaps |
Array<float> op::Datum::faceKeypoints |
Array<float> op::Datum::faceKeypoints3D |
std::vector<Rectangle<float> > op::Datum::faceRectangles |
unsigned long long op::Datum::frameNumber |
std::array<Array<float>, 2> op::Datum::handHeatMaps |
std::array<Array<float>, 2> op::Datum::handKeypoints |
Hand keypoints (x,y,score) locations for each person in the image. It has been resized to the same resolution as poseKeypoints
. handKeypoints[0] corresponds to left hands, and handKeypoints[1] to right ones. Size each Array: #people x #hand parts (21) x 3 ((x,y) coordinates + score)
std::array<Array<float>, 2> op::Datum::handKeypoints3D |
Hand keypoints (x,y,z,score) locations for each person in the image. It has been resized to the same resolution as poseKeypoints3D
. handKeypoints[0] corresponds to left hands, and handKeypoints[1] to right ones. Size each Array: #people x #hand parts (21) x 4 ((x,y,z) coordinates + score)
std::vector<std::array<Rectangle<float>, 2> > op::Datum::handRectangles |
unsigned long long op::Datum::id |
std::vector<Array<float> > op::Datum::inputNetData |
Original image to be processed in Array<float> format. It has been resized to the net input resolution, as well as reformatted Array<float> format to be compatible with the net. If >1 scales, each scale is right- and bottom-padded to fill the greatest resolution. The scales are sorted from bigger to smaller. Vector size: #scales Each array size: 3 x input_net_height x input_net_width
std::string op::Datum::name |
std::vector<Point<int> > op::Datum::netInputSizes |
Point<int> op::Datum::netOutputSize |
Array<float> op::Datum::outputData |
Rendered image in Array<float> format. It consists of a blending of the cvInputData and the pose/body part(s) heatmap/PAF(s). If rendering is disabled (e.g., no_render_pose
flag in the demo), outputData will be empty. Size: 3 x output_net_height x output_net_width
std::vector<std::vector<std::array<float,3> > > op::Datum::poseCandidates |
Body pose candidates for the whole image. This parameter is by default empty and disabled for performance. It can be enabled with candidates_body
. Candidates refer to all the detected body parts, before being assembled into people. Note that the number of candidates is equal or higher than the number of body parts after being assembled into people. Size: #body parts x min(part candidates, POSE_MAX_PEOPLE) x 3 (x,y,score). Rather than vector, it should ideally be: std::array<std::vector<std::array<float,3>>, #BP> poseCandidates;
Array<float> op::Datum::poseHeatMaps |
Body pose heatmaps (body parts, background and/or PAFs) for the whole image. This parameter is by default empty and disabled for performance. Each group (body parts, background and PAFs) can be individually enabled. #heatmaps = #body parts (if enabled) + 1 (if background enabled) + 2 x #PAFs (if enabled). Each PAF has 2 consecutive channels, one for x- and one for y-coordinates. Order heatmaps: body parts + background (as appears in POSE_BODY_PART_MAPPING) + (x,y) channel of each PAF (sorted as appears in POSE_BODY_PART_PAIRS). See pose/poseParameters.hpp
. The user can choose the heatmaps normalization: ranges [0, 1], [-1, 1] or [0, 255]. Check the heatmaps_scale
flag in {OpenPose_path}/doc/advanced/demo_advanced.md for more details. Size: #heatmaps x output_net_height x output_net_width
Array<long long> op::Datum::poseIds |
People ID It returns a person ID for each body pose, providing temporal consistency. The ID will be the same one for a person across frames. I.e. this ID allows to keep track of the same person in time. If either person identification is disabled or poseKeypoints is empty, poseIds will also be empty. Size: #people
Array<float> op::Datum::poseKeypoints |
Array<float> op::Datum::poseKeypoints3D |
Array<float> op::Datum::poseNetOutput |
If it is not empty, OpenPose will not run its internal body pose estimation network and will instead use this data as the substitute of its network. The size of this element must match the size of the output of its internal network, or it will lead to core dumped (segmentation) errors. You can modify the pose estimation flags to match the dimension of both elements (e.g., --net_resolution
, --scale_number
, etc.).
Array<float> op::Datum::poseScores |
Body pose global confidence/score for each person in the image. It does not only consider the score of each body keypoint, but also the score of each PAF association. Optimized for COCO evaluation metric. It will highly penalyze people with missing body parts (e.g., cropped people on the borders of the image). If poseKeypoints is empty, poseScores will also be empty. Size: #people
std::vector<double> op::Datum::scaleInputToNetInputs |
Scale ratio between the input Datum::cvInputData and the net input size.
double op::Datum::scaleInputToOutput |
Scale ratio between the input Datum::cvInputData and the output Datum::cvOutputData.
double op::Datum::scaleNetToOutput |
Scale ratio between the net output and the final output Datum::cvOutputData.
unsigned long long op::Datum::subId |
unsigned long long op::Datum::subIdMax |