Skip to content

Commit 607cb60

Browse files
committed
Set detectors config from external place
1 parent 15a7f77 commit 607cb60

4 files changed

Lines changed: 62 additions & 121 deletions

File tree

Detector/BaseDetector.cpp

Lines changed: 31 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -13,144 +13,64 @@
1313
///
1414
BaseDetector* CreateDetector(
1515
tracking::Detectors detectorType,
16+
const BaseDetector::config_t& config,
1617
bool collectPoints,
1718
cv::UMat& gray
1819
)
1920
{
21+
BaseDetector* detector = nullptr;
22+
2023
switch (detectorType)
2124
{
2225
case tracking::Motion_VIBE:
23-
{
24-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_VIBE, collectPoints, gray);
25-
BaseDetector::config_t config;
26-
if (!detector->Init(config))
27-
{
28-
delete detector;
29-
detector = nullptr;
30-
}
31-
return detector;
32-
}
26+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_VIBE, collectPoints, gray);
27+
break;
3328

3429
case tracking::Motion_MOG:
35-
{
36-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_MOG, collectPoints, gray);
37-
BaseDetector::config_t config;
38-
if (!detector->Init(config))
39-
{
40-
delete detector;
41-
detector = nullptr;
42-
}
43-
return detector;
44-
}
30+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_MOG, collectPoints, gray);
31+
break;
4532

4633
case tracking::Motion_GMG:
47-
{
48-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_GMG, collectPoints, gray);
49-
BaseDetector::config_t config;
50-
if (!detector->Init(config))
51-
{
52-
delete detector;
53-
detector = nullptr;
54-
}
55-
return detector;
56-
}
34+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_GMG, collectPoints, gray);
35+
break;
5736

5837
case tracking::Motion_CNT:
59-
{
60-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_CNT, collectPoints, gray);
61-
BaseDetector::config_t config;
62-
if (!detector->Init(config))
63-
{
64-
delete detector;
65-
detector = nullptr;
66-
}
67-
return detector;
68-
}
38+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_CNT, collectPoints, gray);
39+
break;
6940

7041
case tracking::Motion_SuBSENSE:
71-
{
72-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_SuBSENSE, collectPoints, gray);
73-
BaseDetector::config_t config;
74-
if (!detector->Init(config))
75-
{
76-
delete detector;
77-
detector = nullptr;
78-
}
79-
return detector;
80-
}
42+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_SuBSENSE, collectPoints, gray);
43+
break;
8144

8245
case tracking::Motion_LOBSTER:
83-
{
84-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_LOBSTER, collectPoints, gray);
85-
BaseDetector::config_t config;
86-
if (!detector->Init(config))
87-
{
88-
delete detector;
89-
detector = nullptr;
90-
}
91-
return detector;
92-
}
46+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_LOBSTER, collectPoints, gray);
47+
break;
9348

9449
case tracking::Motion_MOG2:
95-
{
96-
MotionDetector* detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_MOG2, collectPoints, gray);
97-
BaseDetector::config_t config;
98-
if (!detector->Init(config))
99-
{
100-
delete detector;
101-
detector = nullptr;
102-
}
103-
return detector;
104-
}
50+
detector = new MotionDetector(BackgroundSubtract::BGFG_ALGS::ALG_MOG2, collectPoints, gray);
51+
break;
10552

10653
case tracking::Face_HAAR:
107-
{
108-
FaceDetector* detector = new FaceDetector(collectPoints, gray);
109-
BaseDetector::config_t config;
110-
config["cascadeFileName"] = "../data/haarcascade_frontalface_alt2.xml";
111-
if (!detector->Init(config))
112-
{
113-
delete detector;
114-
detector = nullptr;
115-
}
116-
return detector;
117-
}
54+
detector = new FaceDetector(collectPoints, gray);
55+
break;
11856

11957
case tracking::Pedestrian_HOG:
12058
case tracking::Pedestrian_C4:
121-
{
122-
PedestrianDetector* detector = new PedestrianDetector(collectPoints, gray);
123-
BaseDetector::config_t config;
124-
config["detectorType"] = (detectorType == tracking::Pedestrian_HOG) ?
125-
std::to_string(PedestrianDetector::HOG) : std::to_string(PedestrianDetector::C4);
126-
config["cascadeFileName1"] = "../data/combined.txt.model";
127-
config["cascadeFileName2"] = "../data/combined.txt.model_";
128-
if (!detector->Init(config))
129-
{
130-
delete detector;
131-
detector = nullptr;
132-
}
133-
return detector;
134-
}
59+
detector = new PedestrianDetector(collectPoints, gray);
60+
break;
13561

13662
case tracking::DNN:
137-
{
138-
DNNDetector* detector = new DNNDetector(collectPoints, gray);
139-
BaseDetector::config_t config;
140-
config["modelConfiguration"] = "../data/MobileNetSSD_deploy.prototxt";
141-
config["modelBinary"] = "../data/MobileNetSSD_deploy.caffemodel";
142-
config["confidenceThreshold"] = "0.2";
143-
if (!detector->Init(config))
144-
{
145-
delete detector;
146-
detector = nullptr;
147-
}
148-
return detector;
149-
}
150-
63+
detector = new DNNDetector(collectPoints, gray);
64+
break;
15165

15266
default:
153-
return nullptr;
67+
break;
68+
}
69+
70+
if (!detector->Init(config))
71+
{
72+
delete detector;
73+
detector = nullptr;
15474
}
155-
return nullptr;
75+
return detector;
15676
}

Detector/BaseDetector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,4 @@ class BaseDetector
147147
/// \param gray
148148
/// \return
149149
///
150-
BaseDetector* CreateDetector(tracking::Detectors detectorType, bool collectPoints, cv::UMat& gray);
150+
BaseDetector* CreateDetector(tracking::Detectors detectorType, const BaseDetector::config_t& config, bool collectPoints, cv::UMat& gray);

Detector/PedestrianDetector.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,14 @@ bool PedestrianDetector::Init(const config_t& config)
3232
{
3333
auto detectorType = config.find("detectorType");
3434

35-
m_detectorType = (detectorType == config.end()) ? HOG : (DetectorTypes)std::stoi(detectorType->second);
35+
if (detectorType == config.end())
36+
{
37+
m_detectorType = HOG;
38+
}
39+
else
40+
{
41+
m_detectorType = (detectorType->second == "HOG") ? HOG : C4;
42+
}
3643

3744
switch (m_detectorType)
3845
{

VideoExample.h

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ class MotionDetectorExample : public VideoExample
238238
{
239239
m_minObjWidth = frame.cols / 50;
240240

241-
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Motion_MOG2, m_useLocalTracking, frame));
241+
BaseDetector::config_t config;
242+
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Motion_MOG2, config, m_useLocalTracking, frame));
242243
m_detector->SetMinObjectSize(cv::Size(m_minObjWidth, m_minObjWidth));
243244

244245
m_tracker = std::make_unique<CTracker>(m_useLocalTracking,
@@ -307,7 +308,9 @@ class FaceDetectorExample : public VideoExample
307308
///
308309
bool InitTracker(cv::UMat frame)
309310
{
310-
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Face_HAAR, m_useLocalTracking, frame));
311+
BaseDetector::config_t config;
312+
config["cascadeFileName"] = "../data/haarcascade_frontalface_alt2.xml";
313+
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Face_HAAR, config, m_useLocalTracking, frame));
311314
if (!m_detector.get())
312315
{
313316
return false;
@@ -377,22 +380,28 @@ class PedestrianDetectorExample : public VideoExample
377380
///
378381
bool InitTracker(cv::UMat frame)
379382
{
380-
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Pedestrian_C4, m_useLocalTracking, frame));
383+
tracking::Detectors detectorType = tracking::Detectors::Pedestrian_C4; // tracking::Detectors::Pedestrian_HOG;
384+
385+
BaseDetector::config_t config;
386+
config["detectorType"] = (detectorType == tracking::Pedestrian_HOG) ? "HOG" : "C4";
387+
config["cascadeFileName1"] = "../data/combined.txt.model";
388+
config["cascadeFileName2"] = "../data/combined.txt.model_";
389+
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(detectorType, config, m_useLocalTracking, frame));
381390
if (!m_detector.get())
382391
{
383392
return false;
384393
}
385394
m_detector->SetMinObjectSize(cv::Size(frame.cols / 20, frame.rows / 20));
386395

387396
m_tracker = std::make_unique<CTracker>(m_useLocalTracking,
388-
tracking::DistJaccard,
397+
tracking::DistRects,
389398
tracking::KalmanLinear,
390399
tracking::FilterRect,
391400
tracking::TrackKCF, // Use KCF tracker for collisions resolving
392401
tracking::MatchHungrian,
393402
0.3f, // Delta time for Kalman filter
394403
0.1f, // Accel noise magnitude for Kalman filter
395-
0.8f, // Distance threshold between region and object on two frames
404+
frame.rows / 10, // Distance threshold between region and object on two frames
396405
1 * m_fps, // Maximum allowed skipped frames
397406
5 * m_fps // Maximum trace length
398407
);
@@ -414,7 +423,7 @@ class PedestrianDetectorExample : public VideoExample
414423
for (const auto& track : m_tracker->tracks)
415424
{
416425
if (track->IsRobust(m_fps / 2, // Minimal trajectory size
417-
0.7f, // Minimal ratio raw_trajectory_points / trajectory_lenght
426+
0.4f, // Minimal ratio raw_trajectory_points / trajectory_lenght
418427
cv::Size2f(0.1f, 8.0f)) // Min and max ratio: width / height
419428
)
420429
{
@@ -468,7 +477,8 @@ class HybridFaceDetectorExample : public VideoExample
468477
5 * m_fps // Maximum trace length
469478
);
470479

471-
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Motion_MOG2, m_useLocalTracking, frame));
480+
BaseDetector::config_t config;
481+
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::Motion_MOG2, config, m_useLocalTracking, frame));
472482
m_detector->SetMinObjectSize(cv::Size(frame.cols / 50, frame.rows / 50));
473483

474484
return true;
@@ -568,7 +578,11 @@ class DNNDetectorExample : public VideoExample
568578
///
569579
bool InitTracker(cv::UMat frame)
570580
{
571-
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::DNN, m_useLocalTracking, frame));
581+
BaseDetector::config_t config;
582+
config["modelConfiguration"] = "../data/MobileNetSSD_deploy.prototxt";
583+
config["modelBinary"] = "../data/MobileNetSSD_deploy.caffemodel";
584+
config["confidenceThreshold"] = "0.2";
585+
m_detector = std::unique_ptr<BaseDetector>(CreateDetector(tracking::Detectors::DNN, config, m_useLocalTracking, frame));
572586
if (!m_detector.get())
573587
{
574588
return false;

0 commit comments

Comments
 (0)