From 47c84d408ef77ae793993d4e892bb841c5ae394d Mon Sep 17 00:00:00 2001 From: gineshidalgo99 Date: Fri, 4 May 2018 17:21:35 -0400 Subject: [PATCH] Improved tracker template --- .../experimental/tracking/personTracker.hpp | 5 ++--- include/openpose/pose/poseExtractor.hpp | 4 ++-- include/openpose/wrapper/wrapper.hpp | 8 +++++--- .../experimental/tracking/personTracker.cpp | 10 +++------- src/openpose/pose/poseExtractor.cpp | 19 +++++++++---------- 5 files changed, 21 insertions(+), 25 deletions(-) diff --git a/include/openpose/experimental/tracking/personTracker.hpp b/include/openpose/experimental/tracking/personTracker.hpp index 8fd1aae3..247b7f4d 100644 --- a/include/openpose/experimental/tracking/personTracker.hpp +++ b/include/openpose/experimental/tracking/personTracker.hpp @@ -15,11 +15,10 @@ namespace op virtual ~PersonTracker(); - void track(Array& poseKeypoints, const cv::Mat& cvMatInput, const Array& poseIds, - const unsigned long long imageViewIndex = 0ull); + void track(Array& poseKeypoints, const cv::Mat& cvMatInput, const Array& poseIds); void trackLockThread(Array& poseKeypoints, const cv::Mat& cvMatInput, const Array& poseIds, - const unsigned long long imageViewIndex, const long long frameId); + const long long frameId); private: const bool mMergeResults; diff --git a/include/openpose/pose/poseExtractor.hpp b/include/openpose/pose/poseExtractor.hpp index df32d799..37691077 100644 --- a/include/openpose/pose/poseExtractor.hpp +++ b/include/openpose/pose/poseExtractor.hpp @@ -15,7 +15,7 @@ namespace op public: PoseExtractor(const std::shared_ptr& poseExtractorNet, const std::shared_ptr& personIdExtractor = nullptr, - const std::shared_ptr& personTracker = nullptr, + const std::vector>& personTracker = {}, const int numberPeopleMax = -1, const int tracking = -1); virtual ~PoseExtractor(); @@ -61,7 +61,7 @@ namespace op const int mTracking; const std::shared_ptr spPoseExtractorNet; const std::shared_ptr spPersonIdExtractor; - const std::shared_ptr spPersonTracker; + const std::vector> spPersonTrackers; DELETE_COPY(PoseExtractor); }; diff --git a/include/openpose/wrapper/wrapper.hpp b/include/openpose/wrapper/wrapper.hpp index fcabd1c8..d368bbca 100644 --- a/include/openpose/wrapper/wrapper.hpp +++ b/include/openpose/wrapper/wrapper.hpp @@ -607,14 +607,16 @@ namespace op const auto personIdExtractor = (wrapperStructPose.identification ? std::make_shared() : nullptr); // Person tracker - const auto personTracker = (wrapperStructPose.tracking > -1 - ? std::make_shared(wrapperStructPose.tracking == 0) : nullptr); + std::vector> personTrackers; + if (wrapperStructPose.tracking > -1) + personTrackers.resize(spWPoseExtractors.size(), + std::make_shared(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( - poseExtractorNets.at(i), personIdExtractor, personTracker, + poseExtractorNets.at(i), personIdExtractor, personTrackers, wrapperStructPose.numberPeopleMax, wrapperStructPose.tracking); spWPoseExtractors.at(i) = {std::make_shared>(poseExtractor)}; // // Just OpenPose keypoint detector diff --git a/src/openpose/experimental/tracking/personTracker.cpp b/src/openpose/experimental/tracking/personTracker.cpp index 67f2a89b..205e3507 100644 --- a/src/openpose/experimental/tracking/personTracker.cpp +++ b/src/openpose/experimental/tracking/personTracker.cpp @@ -24,18 +24,15 @@ namespace op } void PersonTracker::track(Array& poseKeypoints, const cv::Mat& cvMatInput, - const Array& poseIds, const unsigned long long imageViewIndex) + const Array& 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& poseKeypoints, const cv::Mat& cvMatInput, - const Array& poseIds, const unsigned long long imageViewIndex, - const long long frameId) + const Array& 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; } diff --git a/src/openpose/pose/poseExtractor.cpp b/src/openpose/pose/poseExtractor.cpp index ecf238b6..5983b2f9 100644 --- a/src/openpose/pose/poseExtractor.cpp +++ b/src/openpose/pose/poseExtractor.cpp @@ -7,13 +7,13 @@ namespace op PoseExtractor::PoseExtractor(const std::shared_ptr& poseExtractorNet, const std::shared_ptr& personIdExtractor, - const std::shared_ptr& personTracker, + const std::vector>& 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{1, 0} : poseIds), - imageViewIndex); + if (!spPersonTrackers.empty() && spPersonTrackers.at(imageViewIndex)) + spPersonTrackers[imageViewIndex]->track( + poseKeypoints, cvMatInput, (poseIds.empty() ? Array{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{1, 0} : poseIds), - imageViewIndex, frameId); + spPersonTrackers[imageViewIndex]->trackLockThread( + poseKeypoints, cvMatInput, (poseIds.empty() ? Array{1, 0} : poseIds), + frameId); } } catch (const std::exception& e)