File size: 3,242 Bytes
7fc5a59 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #ifndef OPENPOSE_POSE_POSE_EXTRACTOR_HPP
#define OPENPOSE_POSE_POSE_EXTRACTOR_HPP
#include <openpose/core/common.hpp>
#include <openpose/core/enumClasses.hpp>
#include <openpose/core/keepTopNPeople.hpp>
#include <openpose/pose/poseParameters.hpp>
#include <openpose/pose/poseExtractorNet.hpp>
#include <openpose/tracking/personIdExtractor.hpp>
#include <openpose/tracking/personTracker.hpp>
namespace op
{
class OP_API PoseExtractor
{
public:
PoseExtractor(const std::shared_ptr<PoseExtractorNet>& poseExtractorNet,
const std::shared_ptr<KeepTopNPeople>& keepTopNPeople = nullptr,
const std::shared_ptr<PersonIdExtractor>& personIdExtractor = nullptr,
const std::shared_ptr<std::vector<std::shared_ptr<PersonTracker>>>& personTracker = {},
const int numberPeopleMax = -1, const int tracking = -1);
virtual ~PoseExtractor();
void initializationOnThread();
void forwardPass(const std::vector<Array<float>>& inputNetData,
const Point<int>& inputDataSize,
const std::vector<double>& scaleRatios,
const Array<float>& poseNetOutput = Array<float>{},
const long long frameId = -1ll);
// PoseExtractorNet functions
Array<float> getHeatMapsCopy() const;
std::vector<std::vector<std::array<float, 3>>> getCandidatesCopy() const;
Array<float> getPoseKeypoints() const;
Array<float> getPoseScores() const;
float getScaleNetToOutput() const;
// KeepTopNPeople functions
void keepTopPeople(Array<float>& poseKeypoints, const Array<float>& poseScores) const;
// PersonIdExtractor functions
// Not thread-safe
Array<long long> extractIds(const Array<float>& poseKeypoints, const Matrix& cvMatInput,
const unsigned long long imageIndex = 0ull);
// Same than extractIds but thread-safe
Array<long long> extractIdsLockThread(const Array<float>& poseKeypoints, const Matrix& cvMatInput,
const unsigned long long imageIndex,
const long long frameId);
// PersonTracker functions
void track(Array<float>& poseKeypoints, Array<long long>& poseIds,
const Matrix& cvMatInput, const unsigned long long imageViewIndex = 0ull);
void trackLockThread(Array<float>& poseKeypoints, Array<long long>& poseIds,
const Matrix& cvMatInput,
const unsigned long long imageViewIndex,
const long long frameId);
private:
const int mNumberPeopleMax;
const int mTracking;
const std::shared_ptr<PoseExtractorNet> spPoseExtractorNet;
const std::shared_ptr<KeepTopNPeople> spKeepTopNPeople;
const std::shared_ptr<PersonIdExtractor> spPersonIdExtractor;
const std::shared_ptr<std::vector<std::shared_ptr<PersonTracker>>> spPersonTrackers;
DELETE_COPY(PoseExtractor);
};
}
#endif // OPENPOSE_POSE_POSE_EXTRACTOR_HPP
|