#ifndef OPENPOSE_HAND_HAND_DETECTOR_HPP #define OPENPOSE_HAND_HAND_DETECTOR_HPP #include #include #include namespace op { // Note: This class is thread-safe, so several GPUs can be running hands and using `updateTracker`, and updateTracker will keep the latest known // tracking class OP_API HandDetector { public: explicit HandDetector(const PoseModel poseModel); virtual ~HandDetector(); std::vector, 2>> detectHands(const Array& poseKeypoints) const; std::vector, 2>> trackHands(const Array& poseKeypoints); void updateTracker(const std::array, 2>& handKeypoints, const unsigned long long id); private: enum class PosePart : unsigned int { LWrist = 0, LElbow, LShoulder, RWrist, RElbow, RShoulder, Size, }; const std::array mPoseIndexes; std::vector, (int)PosePart::Size>> mPoseTrack; std::vector> mHandLeftPrevious; std::vector> mHandRightPrevious; unsigned long long mCurrentId; std::mutex mMutex; std::array getPoseKeypoints(const PoseModel poseModel, const std::array& poseStrings) const; DELETE_COPY(HandDetector); }; } #endif // OPENPOSE_HAND_HAND_DETECTOR_HPP