#ifndef OPENPOSE_POSE_POSE_EXTRACTOR_HPP #define OPENPOSE_POSE_POSE_EXTRACTOR_HPP #include #include #include #include #include #include #include namespace op { class OP_API PoseExtractor { public: PoseExtractor(const std::shared_ptr& poseExtractorNet, const std::shared_ptr& keepTopNPeople = nullptr, const std::shared_ptr& personIdExtractor = nullptr, const std::shared_ptr>>& personTracker = {}, const int numberPeopleMax = -1, const int tracking = -1); virtual ~PoseExtractor(); void initializationOnThread(); void forwardPass(const std::vector>& inputNetData, const Point& inputDataSize, const std::vector& scaleRatios, const Array& poseNetOutput = Array{}, const long long frameId = -1ll); // PoseExtractorNet functions Array getHeatMapsCopy() const; std::vector>> getCandidatesCopy() const; Array getPoseKeypoints() const; Array getPoseScores() const; float getScaleNetToOutput() const; // KeepTopNPeople functions void keepTopPeople(Array& poseKeypoints, const Array& poseScores) const; // PersonIdExtractor functions // Not thread-safe Array extractIds(const Array& poseKeypoints, const Matrix& cvMatInput, const unsigned long long imageIndex = 0ull); // Same than extractIds but thread-safe Array extractIdsLockThread(const Array& poseKeypoints, const Matrix& cvMatInput, const unsigned long long imageIndex, const long long frameId); // PersonTracker functions void track(Array& poseKeypoints, Array& poseIds, const Matrix& cvMatInput, const unsigned long long imageViewIndex = 0ull); void trackLockThread(Array& poseKeypoints, Array& poseIds, const Matrix& cvMatInput, const unsigned long long imageViewIndex, const long long frameId); private: const int mNumberPeopleMax; const int mTracking; const std::shared_ptr spPoseExtractorNet; const std::shared_ptr spKeepTopNPeople; const std::shared_ptr spPersonIdExtractor; const std::shared_ptr>> spPersonTrackers; DELETE_COPY(PoseExtractor); }; } #endif // OPENPOSE_POSE_POSE_EXTRACTOR_HPP