#ifndef OPENPOSE_POSE_POSE_EXTRACTOR_NET_HPP #define OPENPOSE_POSE_POSE_EXTRACTOR_NET_HPP #include #include #include #include namespace op { class OP_API PoseExtractorNet { public: PoseExtractorNet(const PoseModel poseModel, const std::vector& heatMapTypes = {}, const ScaleMode heatMapScaleMode = ScaleMode::ZeroToOneFixedAspect, const bool addPartCandidates = false, const bool maximizePositives = false); virtual ~PoseExtractorNet(); void initializationOnThread(); virtual void forwardPass( const std::vector>& inputNetData, const Point& inputDataSize, const std::vector& scaleRatios = {1.f}, const Array& poseNetOutput = Array{}) = 0; virtual const float* getCandidatesCpuConstPtr() const = 0; virtual const float* getCandidatesGpuConstPtr() const = 0; virtual const float* getHeatMapCpuConstPtr() const = 0; virtual const float* getHeatMapGpuConstPtr() const = 0; virtual std::vector getHeatMapSize() const = 0; Array getHeatMapsCopy() const; std::vector>> getCandidatesCopy() const; virtual const float* getPoseGpuConstPtr() const = 0; Array getPoseKeypoints() const; Array getPoseScores() const; float getScaleNetToOutput() const; double get(const PoseProperty property) const; void set(const PoseProperty property, const double value); void increase(const PoseProperty property, const double value); void clear(); protected: const PoseModel mPoseModel; Point mNetOutputSize; Array mPoseKeypoints; Array mPoseScores; float mScaleNetToOutput; void checkThread() const; virtual void netInitializationOnThread() = 0; private: const std::vector mHeatMapTypes; const ScaleMode mHeatMapScaleMode; const bool mAddPartCandidates; std::array, (int)PoseProperty::Size> mProperties; std::thread::id mThreadId; DELETE_COPY(PoseExtractorNet); }; } #endif // OPENPOSE_POSE_POSE_EXTRACTOR_NET_HPP