mirror of
https://github.com/gosticks/openpose.git
synced 2026-08-12 20:30:20 +00:00
Improved tracker template
This commit is contained in:
@@ -15,11 +15,10 @@ namespace op
|
||||
|
||||
virtual ~PersonTracker();
|
||||
|
||||
void track(Array<float>& poseKeypoints, const cv::Mat& cvMatInput, const Array<long long>& poseIds,
|
||||
const unsigned long long imageViewIndex = 0ull);
|
||||
void track(Array<float>& poseKeypoints, const cv::Mat& cvMatInput, const Array<long long>& poseIds);
|
||||
|
||||
void trackLockThread(Array<float>& poseKeypoints, const cv::Mat& cvMatInput, const Array<long long>& poseIds,
|
||||
const unsigned long long imageViewIndex, const long long frameId);
|
||||
const long long frameId);
|
||||
|
||||
private:
|
||||
const bool mMergeResults;
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace op
|
||||
public:
|
||||
PoseExtractor(const std::shared_ptr<PoseExtractorNet>& poseExtractorNet,
|
||||
const std::shared_ptr<PersonIdExtractor>& personIdExtractor = nullptr,
|
||||
const std::shared_ptr<PersonTracker>& personTracker = nullptr,
|
||||
const std::vector<std::shared_ptr<PersonTracker>>& personTracker = {},
|
||||
const int numberPeopleMax = -1, const int tracking = -1);
|
||||
|
||||
virtual ~PoseExtractor();
|
||||
@@ -61,7 +61,7 @@ namespace op
|
||||
const int mTracking;
|
||||
const std::shared_ptr<PoseExtractorNet> spPoseExtractorNet;
|
||||
const std::shared_ptr<PersonIdExtractor> spPersonIdExtractor;
|
||||
const std::shared_ptr<PersonTracker> spPersonTracker;
|
||||
const std::vector<std::shared_ptr<PersonTracker>> spPersonTrackers;
|
||||
|
||||
DELETE_COPY(PoseExtractor);
|
||||
};
|
||||
|
||||
@@ -607,14 +607,16 @@ namespace op
|
||||
const auto personIdExtractor = (wrapperStructPose.identification
|
||||
? std::make_shared<PersonIdExtractor>() : nullptr);
|
||||
// Person tracker
|
||||
const auto personTracker = (wrapperStructPose.tracking > -1
|
||||
? std::make_shared<PersonTracker>(wrapperStructPose.tracking == 0) : nullptr);
|
||||
std::vector<std::shared_ptr<PersonTracker>> personTrackers;
|
||||
if (wrapperStructPose.tracking > -1)
|
||||
personTrackers.resize(spWPoseExtractors.size(),
|
||||
std::make_shared<PersonTracker>(wrapperStructPose.tracking == 0));
|
||||
for (auto i = 0u; i < spWPoseExtractors.size(); i++)
|
||||
{
|
||||
|
||||
// OpenPose keypoint detector + ID extractor (experimental) + tracking (experimental)
|
||||
const auto poseExtractor = std::make_shared<PoseExtractor>(
|
||||
poseExtractorNets.at(i), personIdExtractor, personTracker,
|
||||
poseExtractorNets.at(i), personIdExtractor, personTrackers,
|
||||
wrapperStructPose.numberPeopleMax, wrapperStructPose.tracking);
|
||||
spWPoseExtractors.at(i) = {std::make_shared<WPoseExtractor<TDatumsPtr>>(poseExtractor)};
|
||||
// // Just OpenPose keypoint detector
|
||||
|
||||
@@ -24,18 +24,15 @@ namespace op
|
||||
}
|
||||
|
||||
void PersonTracker::track(Array<float>& poseKeypoints, const cv::Mat& cvMatInput,
|
||||
const Array<long long>& poseIds, const unsigned long long imageViewIndex)
|
||||
const Array<long long>& poseIds)
|
||||
{
|
||||
try
|
||||
{
|
||||
// if mergeResults == true --> Combine OP + LK tracker
|
||||
// if mergeResults == false --> Run LK tracker ONLY IF poseKeypoints.empty()
|
||||
// imageViewIndex has camera view index (for 3D, i.e. index 2 means that there are at least
|
||||
// 3 cameras and this is camera index 2)
|
||||
UNUSED(poseKeypoints);
|
||||
UNUSED(cvMatInput);
|
||||
UNUSED(poseIds);
|
||||
UNUSED(imageViewIndex);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
@@ -44,8 +41,7 @@ namespace op
|
||||
}
|
||||
|
||||
void PersonTracker::trackLockThread(Array<float>& poseKeypoints, const cv::Mat& cvMatInput,
|
||||
const Array<long long>& poseIds, const unsigned long long imageViewIndex,
|
||||
const long long frameId)
|
||||
const Array<long long>& poseIds, const long long frameId)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -53,7 +49,7 @@ namespace op
|
||||
while (mLastFrameId < frameId - 1)
|
||||
std::this_thread::sleep_for(std::chrono::microseconds{100});
|
||||
// Extract IDs
|
||||
track(poseKeypoints, cvMatInput, poseIds, imageViewIndex);
|
||||
track(poseKeypoints, cvMatInput, poseIds);
|
||||
// Update last frame id
|
||||
mLastFrameId = frameId;
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@ namespace op
|
||||
|
||||
PoseExtractor::PoseExtractor(const std::shared_ptr<PoseExtractorNet>& poseExtractorNet,
|
||||
const std::shared_ptr<PersonIdExtractor>& personIdExtractor,
|
||||
const std::shared_ptr<PersonTracker>& personTracker,
|
||||
const std::vector<std::shared_ptr<PersonTracker>>& personTrackers,
|
||||
const int numberPeopleMax, const int tracking) :
|
||||
mNumberPeopleMax{numberPeopleMax},
|
||||
mTracking{tracking},
|
||||
spPoseExtractorNet{poseExtractorNet},
|
||||
spPersonIdExtractor{personIdExtractor},
|
||||
spPersonTracker{personTracker}
|
||||
spPersonTrackers{personTrackers}
|
||||
{
|
||||
}
|
||||
|
||||
@@ -160,10 +160,9 @@ namespace op
|
||||
if (!poseKeypoints.empty() && poseIds.empty() && mNumberPeopleMax != 1)
|
||||
error(errorMessage, __LINE__, __FUNCTION__, __FILE__);
|
||||
// Run person ID extractor
|
||||
if (spPersonTracker)
|
||||
spPersonTracker->track(poseKeypoints, cvMatInput,
|
||||
(poseIds.empty() ? Array<long long>{1, 0} : poseIds),
|
||||
imageViewIndex);
|
||||
if (!spPersonTrackers.empty() && spPersonTrackers.at(imageViewIndex))
|
||||
spPersonTrackers[imageViewIndex]->track(
|
||||
poseKeypoints, cvMatInput, (poseIds.empty() ? Array<long long>{1, 0} : poseIds));
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
@@ -181,11 +180,11 @@ namespace op
|
||||
if (!poseKeypoints.empty() && poseIds.empty() && mNumberPeopleMax != 1)
|
||||
error(errorMessage, __LINE__, __FUNCTION__, __FILE__);
|
||||
// Run person ID extractor
|
||||
if (spPersonTracker)
|
||||
if (!spPersonTrackers.empty() && spPersonTrackers.at(imageViewIndex))
|
||||
{
|
||||
spPersonTracker->trackLockThread(poseKeypoints, cvMatInput,
|
||||
(poseIds.empty() ? Array<long long>{1, 0} : poseIds),
|
||||
imageViewIndex, frameId);
|
||||
spPersonTrackers[imageViewIndex]->trackLockThread(
|
||||
poseKeypoints, cvMatInput, (poseIds.empty() ? Array<long long>{1, 0} : poseIds),
|
||||
frameId);
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
|
||||
Reference in New Issue
Block a user