Improved tracker template

This commit is contained in:
gineshidalgo99
2018-05-04 17:21:35 -04:00
parent f909c2071a
commit 47c84d408e
5 changed files with 21 additions and 25 deletions
@@ -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;
+2 -2
View File
@@ -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);
};
+5 -3
View File
@@ -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;
}
+9 -10
View File
@@ -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)