Skip to content

Commit 2315bcb

Browse files
committed
Add cv::Mat API for Detectors
1 parent 9916ed8 commit 2315bcb

17 files changed

Lines changed: 174 additions & 38 deletions

src/Detector/BaseDetector.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
///
2020
std::unique_ptr<BaseDetector> BaseDetector::CreateDetector(tracking::Detectors detectorType,
2121
const config_t& config,
22-
cv::UMat& frame)
22+
const cv::UMat& frame)
2323
{
2424
std::unique_ptr<BaseDetector> detector;
2525

@@ -92,3 +92,15 @@ std::unique_ptr<BaseDetector> BaseDetector::CreateDetector(tracking::Detectors d
9292
detector.reset();
9393
return std::move(detector);
9494
}
95+
96+
///
97+
std::unique_ptr<BaseDetector> BaseDetector::CreateDetectorKV(tracking::Detectors detectorType, const KeyVal& config, const cv::Mat& gray)
98+
{
99+
config_t mconfig;
100+
for (auto kv : config.m_config)
101+
{
102+
mconfig.emplace(kv.first, kv.second);
103+
}
104+
cv::UMat uframe = gray.getUMat(cv::ACCESS_READ);
105+
return CreateDetector(detectorType, mconfig, uframe);
106+
}

src/Detector/BaseDetector.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@
33
#include <memory>
44
#include "defines.h"
55

6+
///
7+
/// \brief The BaseDetector class
8+
///
9+
struct KeyVal
10+
{
11+
KeyVal() = default;
12+
void Add(const std::string& key, const std::string& val)
13+
{
14+
m_config.emplace_back(key, val);
15+
}
16+
17+
std::vector<std::pair<std::string, std::string>> m_config;
18+
};
19+
620
///
721
/// \brief The BaseDetector class
822
///
@@ -19,6 +33,15 @@ class BaseDetector
1933
m_minObjectSize.height = m_minObjectSize.width;
2034
}
2135
///
36+
/// \brief BaseDetector
37+
/// \param frame
38+
///
39+
BaseDetector(const cv::Mat& frame)
40+
{
41+
m_minObjectSize.width = std::max(5, frame.cols / 100);
42+
m_minObjectSize.height = m_minObjectSize.width;
43+
}
44+
///
2245
/// \brief ~BaseDetector
2346
///
2447
virtual ~BaseDetector(void) = default;
@@ -172,7 +195,8 @@ class BaseDetector
172195
}
173196

174197
///
175-
static std::unique_ptr<BaseDetector> CreateDetector(tracking::Detectors detectorType, const config_t& config, cv::UMat& gray);
198+
static std::unique_ptr<BaseDetector> CreateDetector(tracking::Detectors detectorType, const config_t& config, const cv::UMat& gray);
199+
static std::unique_ptr<BaseDetector> CreateDetectorKV(tracking::Detectors detectorType, const KeyVal& config, const cv::Mat& gray);
176200

177201

178202
protected:

src/Detector/FaceDetector.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ FaceDetector::FaceDetector(const cv::UMat& gray)
99
{
1010
}
1111

12+
///
13+
/// \brief FaceDetector::FaceDetector
14+
/// \param gray
15+
///
16+
FaceDetector::FaceDetector(const cv::Mat& gray)
17+
: BaseDetector(gray)
18+
{
19+
}
20+
1221
///
1322
/// \brief FaceDetector::Init
1423
/// \param cascadeFileName

src/Detector/FaceDetector.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class FaceDetector final : public BaseDetector
99
{
1010
public:
1111
FaceDetector(const cv::UMat& gray);
12+
FaceDetector(const cv::Mat& gray);
1213
~FaceDetector(void) = default;
1314

1415
bool Init(const config_t& config) override;

src/Detector/MotionDetector.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@
55
/// \param algType
66
/// \param gray
77
///
8-
MotionDetector::MotionDetector(
9-
BackgroundSubtract::BGFG_ALGS algType,
10-
cv::UMat& gray)
11-
:
12-
BaseDetector(gray),
13-
m_algType(algType)
8+
MotionDetector::MotionDetector(BackgroundSubtract::BGFG_ALGS algType, const cv::UMat& gray)
9+
: BaseDetector(gray), m_algType(algType)
1410
{
15-
m_fg = gray.clone();
11+
m_fg.create(gray.size(), CV_8UC1);
12+
m_backgroundSubst = std::make_unique<BackgroundSubtract>(algType, gray.channels());
13+
}
14+
15+
///
16+
/// \brief MotionDetector::MotionDetector
17+
/// \param algType
18+
/// \param gray
19+
///
20+
MotionDetector::MotionDetector(BackgroundSubtract::BGFG_ALGS algType, const cv::Mat& gray)
21+
: BaseDetector(gray), m_algType(algType)
22+
{
23+
m_fg.create(gray.size(), CV_8UC1);
1624
m_backgroundSubst = std::make_unique<BackgroundSubtract>(algType, gray.channels());
1725
}
1826

src/Detector/MotionDetector.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
class MotionDetector : public BaseDetector
1010
{
1111
public:
12-
MotionDetector(BackgroundSubtract::BGFG_ALGS algType, cv::UMat& gray);
12+
MotionDetector(BackgroundSubtract::BGFG_ALGS algType, const cv::UMat& gray);
13+
MotionDetector(BackgroundSubtract::BGFG_ALGS algType, const cv::Mat& gray);
1314
~MotionDetector(void) = default;
1415

1516
bool Init(const config_t& config) override;

src/Detector/OCVDNNDetector.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
///
66
/// \brief OCVDNNDetector::OCVDNNDetector
7-
/// \param gray
7+
/// \param colorFrame
88
///
99
OCVDNNDetector::OCVDNNDetector(const cv::UMat& colorFrame)
1010
: BaseDetector(colorFrame)
@@ -18,6 +18,22 @@ OCVDNNDetector::OCVDNNDetector(const cv::UMat& colorFrame)
1818
"sheep", "sofa", "train", "tvmonitor" };
1919
}
2020

21+
///
22+
/// \brief OCVDNNDetector::OCVDNNDetector
23+
/// \param colorFrame
24+
///
25+
OCVDNNDetector::OCVDNNDetector(const cv::Mat& colorFrame)
26+
: BaseDetector(colorFrame)
27+
28+
{
29+
m_classNames = { "background",
30+
"aeroplane", "bicycle", "bird", "boat",
31+
"bottle", "bus", "car", "cat", "chair",
32+
"cow", "diningtable", "dog", "horse",
33+
"motorbike", "person", "pottedplant",
34+
"sheep", "sofa", "train", "tvmonitor" };
35+
}
36+
2137
///
2238
/// \brief OCVDNNDetector::Init
2339
/// \return

src/Detector/OCVDNNDetector.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class OCVDNNDetector final : public BaseDetector
1414
{
1515
public:
1616
OCVDNNDetector(const cv::UMat& colorFrame);
17+
OCVDNNDetector(const cv::Mat& colorFrame);
1718
~OCVDNNDetector(void) = default;
1819

1920
bool Init(const config_t& config) override;

src/Detector/PedestrianDetector.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,17 @@
66
/// \param gray
77
///
88
PedestrianDetector::PedestrianDetector(const cv::UMat& gray)
9-
:
10-
BaseDetector(gray),
9+
: BaseDetector(gray),
10+
m_scannerC4(HUMAN_height, HUMAN_width, HUMAN_xdiv, HUMAN_ydiv, 256, 0.8)
11+
{
12+
}
13+
14+
///
15+
/// \brief PedestrianDetector::PedestrianDetector
16+
/// \param gray
17+
///
18+
PedestrianDetector::PedestrianDetector(const cv::Mat& gray)
19+
: BaseDetector(gray),
1120
m_scannerC4(HUMAN_height, HUMAN_width, HUMAN_xdiv, HUMAN_ydiv, 256, 0.8)
1221
{
1322
}

src/Detector/PedestrianDetector.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class PedestrianDetector final : public BaseDetector
1616
};
1717

1818
PedestrianDetector(const cv::UMat& gray);
19+
PedestrianDetector(const cv::Mat& gray);
1920
~PedestrianDetector(void) = default;
2021

2122
bool Init(const config_t& config) override;

0 commit comments

Comments
 (0)