Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion async_detector/AsyncDetector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ void AsyncDetector::CaptureThread(std::string fileName, int startFrame, float* f
const int minStaticTime = 5;

TrackerSettings trackerSettings;
trackerSettings.SetDistances({ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f });
trackerSettings.SetDistance(tracking::DistCenters);
trackerSettings.m_kalmanType = tracking::KalmanLinear;
trackerSettings.m_filterGoal = tracking::FilterRect;
trackerSettings.m_lostTrackType = tracking::TrackKCF; // Use KCF tracker for collisions resolving
Expand Down
2 changes: 1 addition & 1 deletion cars_counting/CarsCounting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ bool CarsCounting::InitTracker(cv::UMat frame)
m_detector->SetMinObjectSize(cv::Size(m_minObjWidth, m_minObjWidth));

TrackerSettings settings;
settings.SetDistances({ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistCenters);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackCSRT; // Use KCF tracker for collisions resolving
Expand Down
2 changes: 1 addition & 1 deletion example/MouseExample.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ void MouseTracking(cv::CommandLineParser parser)
cv::setMouseCallback("Video", mv_MouseCallback, (void*)&pointXY);

TrackerSettings settings;
settings.SetDistances({ 1.0f, 0.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistCenters);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterCenter;
settings.m_lostTrackType = tracking::TrackNone;
Expand Down
14 changes: 7 additions & 7 deletions example/examples.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,14 @@ class MotionDetectorExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistCenters);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackKCF; // Use visual objects tracker for collisions resolving
settings.m_matchType = tracking::MatchHungrian;
settings.m_dt = 0.4f; // Delta time for Kalman filter
settings.m_accelNoiseMag = 0.5f; // Accel noise magnitude for Kalman filter
settings.m_distThres = 0.6f; // frame.rows / 10.f; // Distance threshold between region and object on two frames
settings.m_distThres = frame.rows / 10.f; // Distance threshold between region and object on two frames

settings.m_useAbandonedDetection = false;
if (settings.m_useAbandonedDetection)
Expand Down Expand Up @@ -175,7 +175,7 @@ class FaceDetectorExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistJaccard);
settings.m_kalmanType = tracking::KalmanUnscented;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackCSRT; // Use visual objects tracker for collisions resolving
Expand Down Expand Up @@ -271,7 +271,7 @@ class PedestrianDetectorExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 1.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistRects);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackCSRT; // Use visual objects tracker for collisions resolving
Expand Down Expand Up @@ -368,7 +368,7 @@ class SSDMobileNetExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 1.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistRects);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackCSRT; // Use visual objects tracker for collisions resolving
Expand Down Expand Up @@ -492,7 +492,7 @@ class YoloExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 1.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistRects);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackCSRT; // Use visual objects tracker for collisions resolving
Expand Down Expand Up @@ -616,7 +616,7 @@ class YoloDarknetExample : public VideoExample
bool InitTracker(cv::UMat frame)
{
TrackerSettings settings;
settings.SetDistances({ 0.0f, 1.0f, 0.0f, 0.0f, 0.0f });
settings.SetDistance(tracking::DistRects);
settings.m_kalmanType = tracking::KalmanLinear;
settings.m_filterGoal = tracking::FilterRect;
settings.m_lostTrackType = tracking::TrackKCF; // Use visual objects tracker for collisions resolving
Expand Down
8 changes: 4 additions & 4 deletions src/Tracker/Ctracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,9 @@ void CTracker::UpdateTrackingState(
}

// Update Kalman Filters state
const ptrdiff_t stop_i = static_cast<int>(assignment.size());
const ptrdiff_t stop_i = static_cast<ptrdiff_t>(assignment.size());
#pragma omp parallel for
for (int i = 0; i < stop_i; ++i)
for (ptrdiff_t i = 0; i < stop_i; ++i)
{
// If track updated less than one time, than filter state is not correct.
if (assignment[i] != -1) // If we have assigned detect, then update using its coordinates,
Expand Down Expand Up @@ -156,11 +156,11 @@ void CTracker::CreateDistaceMatrix(const regions_t& regions, distMatrix_t& costM
const size_t N = m_tracks.size(); // Tracking objects
maxCost = 0;

for (size_t i = 0; i < m_tracks.size(); i++)
for (size_t i = 0; i < m_tracks.size(); ++i)
{
const auto& track = m_tracks[i];

for (size_t j = 0; j < regions.size(); j++)
for (size_t j = 0; j < regions.size(); ++j)
{
auto dist = maxPossibleCost;
if (m_tracks[i]->CheckType(regions[j].m_type))
Expand Down
18 changes: 13 additions & 5 deletions src/Tracker/Ctracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ struct TrackerSettings
bool CheckDistance() const
{
track_t sum = std::accumulate(m_distType.begin(), m_distType.end(), 0.0f);
track_t maxOne = std::max(1.0f, std::fabs(sum));
return std::fabs(sum - 1.0f) <= std::numeric_limits<track_t>::epsilon() * maxOne;
track_t maxOne = std::max(1.0f, std::fabs(sum));
return std::fabs(sum - 1.0f) <= std::numeric_limits<track_t>::epsilon() * maxOne;
}

///
Expand All @@ -105,6 +105,14 @@ struct TrackerSettings
}
return res;
}

///
bool SetDistance(tracking::DistType distType)
{
std::fill(m_distType.begin(), m_distType.end(), 0.0f);
m_distType[distType] = 1.f;
return true;
}
};

///
Expand All @@ -114,9 +122,9 @@ class CTracker
{
public:
CTracker(const TrackerSettings& settings);
CTracker(const CTracker&) = delete;
CTracker(CTracker&&) = delete;
CTracker& operator=(const CTracker&) = delete;
CTracker(const CTracker&) = delete;
CTracker(CTracker&&) = delete;
CTracker& operator=(const CTracker&) = delete;
CTracker& operator=(CTracker&&) = delete;

~CTracker(void);
Expand Down
35 changes: 18 additions & 17 deletions src/Tracker/track.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,28 +101,29 @@ track_t CTrack::CalcDistHist(const CRegion& reg, cv::UMat currFrame) const
{
track_t res = 1;

if (reg.m_hist.empty())
{
int bins = 64;
std::vector<int> histSize;
std::vector<float> ranges;
std::vector<int> channels;
for (int i = 0, stop = currFrame.channels(); i < stop; ++i)
{
histSize.push_back(bins);
ranges.push_back(0);
ranges.push_back(255);
channels.push_back(i);
}
std::vector<cv::UMat> regROI = { currFrame(reg.m_brect) };
cv::calcHist(regROI, channels, cv::Mat(), reg.m_hist, histSize, ranges, false);
if (reg.m_hist.empty())
{
int bins = 64;
std::vector<int> histSize;
std::vector<float> ranges;
std::vector<int> channels;

for (int i = 0, stop = currFrame.channels(); i < stop; ++i)
{
histSize.push_back(bins);
ranges.push_back(0);
ranges.push_back(255);
channels.push_back(i);
}

std::vector<cv::UMat> regROI = { currFrame(reg.m_brect) };
cv::calcHist(regROI, channels, cv::Mat(), reg.m_hist, histSize, ranges, false);
cv::normalize(reg.m_hist, reg.m_hist, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());
}
if (!reg.m_hist.empty() && !m_lastRegion.m_hist.empty())
{
res = static_cast<track_t>(cv::compareHist(reg.m_hist, m_lastRegion.m_hist, CV_COMP_BHATTACHARYYA));
//res = 1.f - static_cast<track_t>(cv::compareHist(reg.m_hist, m_lastRegion.m_hist, CV_COMP_CORREL));
}

return res;
Expand Down