#ifdef USE_3D_ADAM_MODEL #ifndef OPENPOSE_3D_JOINT_ANGLE_ESTIMATION_HPP #define OPENPOSE_3D_JOINT_ANGLE_ESTIMATION_HPP #ifdef USE_EIGEN #include #endif #ifdef USE_3D_ADAM_MODEL #include #endif #include namespace op { OP_API int mapOPToAdam(const int oPPart); class OP_API JointAngleEstimation { public: static const std::shared_ptr getTotalModel(); JointAngleEstimation(const bool returnJacobian); virtual ~JointAngleEstimation(); void initializationOnThread(); void adamFastFit(Eigen::Matrix& adamPose, Eigen::Vector3d& adamTranslation, Eigen::Matrix& vtVec, Eigen::Matrix& j0Vec, Eigen::VectorXd& adamFacecoeffsExp, const Array& poseKeypoints3D, const Array& faceKeypoints3D, const std::array, 2>& handKeypoints3D); private: // PIMPL idiom // http://www.cppsamples.com/common-tasks/pimpl.html struct ImplJointAngleEstimation; std::shared_ptr spImpl; // PIMP requires DELETE_COPY & destructor, or extra code // http://oliora.github.io/2015/12/29/pimpl-and-rule-of-zero.html DELETE_COPY(JointAngleEstimation); }; } #endif // OPENPOSE_3D_JOINT_ANGLE_ESTIMATION_HPP #endif