#ifndef OPENPOSE_POSE_POSE_RENDERER_HPP #define OPENPOSE_POSE_POSE_RENDERER_HPP #include #include #include #include #include #include namespace op { class OP_API PoseRenderer : public Renderer { public: PoseRenderer(const Point& heatMapsSize, const Point& outputSize, const PoseModel poseModel, const std::shared_ptr& poseExtractor, const float renderThreshold, const bool blendOriginalFrame = true, const float alphaKeypoint = POSE_DEFAULT_ALPHA_KEYPOINT, const float alphaHeatMap = POSE_DEFAULT_ALPHA_HEAT_MAP, const unsigned int elementToRender = 0u, const RenderMode renderMode = RenderMode::Gpu); ~PoseRenderer(); void initializationOnThread(); bool getBlendOriginalFrame() const; bool getShowGooglyEyes() const; void setBlendOriginalFrame(const bool blendOriginalFrame); void setShowGooglyEyes(const bool showGooglyEyes); std::pair renderPose(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput = -1.f); private: const float mRenderThreshold; const Point mHeatMapsSize; const Point mOutputSize; const PoseModel mPoseModel; const std::map mPartIndexToName; const std::shared_ptr spPoseExtractor; const RenderMode mRenderMode; std::atomic mBlendOriginalFrame; std::atomic mShowGooglyEyes; // Init with thread float* pGpuPose; // GPU aux memory std::pair renderPoseCpu(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput = -1.f); std::pair renderPoseGpu(Array& outputData, const Array& poseKeypoints, const float scaleNetToOutput = -1.f); DELETE_COPY(PoseRenderer); }; } #endif // OPENPOSE_POSE_POSE_RENDERER_HPP