diff --git a/include/openpose/core/datum.hpp b/include/openpose/core/datum.hpp index da93c6941..ba70953b6 100644 --- a/include/openpose/core/datum.hpp +++ b/include/openpose/core/datum.hpp @@ -332,7 +332,69 @@ namespace op */ Datum clone() const; + /** + * Safe poseKeypoint get function + * If the body poses are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted poseKeypoints if not none, empty list if none + */ + Array getPoseKeypoints(); + + /** + * Safe poseIds get function + * If the body poses are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted poseIds if not none, empty list if none + */ + Array getPoseIds(); + + /** + * Safe poseScores get function + * If the body poses are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted poseScores if not none, empty list if none + */ + Array getPoseScores(); + + /** + * Safe poseHeatMaps get function + * If the body poses are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted poseHeatMaps if not none, empty list if none + */ + Array getPoseHeatMaps(); + /** + * Safe faceKeypoints get function + * If the face keypoints are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted faceKeypoints if not none, empty list if none + */ + Array getFaceKeypoints(); + + /** + * Safe faceHeatMaps get function + * If the face keypoints are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted faceHeatMaps if not none, empty list if none + */ + Array getFaceHeatMaps(); + + /** + * Safe poseKeypoints3D get function + * If the pose keypoints are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted poseKeypoints3D if not none, empty list if none + */ + Array getPoseKeypoints3D(); + + /** + * Safe faceKeypoints3D get function + * If the face keypoints are empty, it returns an empty array instead of NULL + * Returning too many NULLs can cause python to die + * @return extracted faceKeypoints3D if not none, empty list if none + */ + Array getFaceKeypoints3D(); diff --git a/python/openpose/openpose_python.cpp b/python/openpose/openpose_python.cpp index d8d6e9e59..73a4e3874 100644 --- a/python/openpose/openpose_python.cpp +++ b/python/openpose/openpose_python.cpp @@ -359,6 +359,14 @@ namespace op // Datum Object py::class_>(m, "Datum") .def(py::init<>()) + .def("getPoseKeypoints", &Datum::getPoseKeypoints) + .def("getPoseIds", &Datum::getPoseIds) + .def("getPoseScores", &Datum::getPoseScores) + .def("getPoseHeatMaps", &Datum::getPoseHeatMaps) + .def("getFaceKeypoints", &Datum::getFaceKeypoints) + .def("getFaceHeatMaps", &Datum::getFaceHeatMaps) + .def("getPoseKeypoints3D", &Datum::getPoseKeypoints3D) + .def("getFaceKeypoints3D", &Datum::getFaceKeypoints3D) .def_readwrite("id", &Datum::id) .def_readwrite("subId", &Datum::subId) .def_readwrite("subIdMax", &Datum::subIdMax) diff --git a/src/openpose/core/datum.cpp b/src/openpose/core/datum.cpp index 0840fe945..5034abc0e 100644 --- a/src/openpose/core/datum.cpp +++ b/src/openpose/core/datum.cpp @@ -292,6 +292,78 @@ namespace op { } + Array Datum::getPoseKeypoints(){ + if(!poseKeypoints.empty()){ + return poseKeypoints; + } + else { + return Array(1, -1); + } + } + + Array Datum::getPoseIds(){ + if(!poseIds.empty()){ + return poseIds; + } + else { + return Array(1, -1); + } + } + + Array Datum::getPoseScores(){ + if(!poseScores.empty()){ + return poseScores; + } + else { + return Array(1, -1); + } + } + + Array Datum::getPoseHeatMaps(){ + if(!poseHeatMaps.empty()){ + return poseHeatMaps; + } + else { + return Array(1, -1); + } + } + + Array Datum::getFaceKeypoints(){ + if(!faceKeypoints.empty()){ + return faceKeypoints; + } + else { + return Array(1, -1); + } + } + + Array Datum::getFaceHeatMaps(){ + if(!faceHeatMaps.empty()){ + return faceHeatMaps; + } + else { + return Array(1, -1); + } + } + + Array Datum::getPoseKeypoints3D(){ + if(!poseKeypoints3D.empty()){ + return poseKeypoints3D; + } + else { + return Array(1, -1); + } + } + + Array Datum::getFaceKeypoints3D(){ + if(!faceKeypoints3D.empty()){ + return faceKeypoints3D; + } + else { + return Array(1, -1); + } + } + Datum Datum::clone() const { try