#ifndef DNDETECT_H
|
#define DNDETECT_H
|
#define GPU
|
|
#include <darknet.h>
|
#include <opencv2/opencv.hpp>
|
#include <thread>
|
|
namespace DnDetect {
|
|
class ClockTimer {
|
public:
|
ClockTimer(const std::string &flag, int nMscTimeout = 0) {
|
timeval time;
|
gettimeofday(&time, nullptr);
|
m_start = time.tv_sec * 1000000 + time.tv_usec;
|
m_flag = flag;
|
m_nMscTimeout = nMscTimeout;
|
}
|
|
~ClockTimer() {
|
timeval time1;
|
gettimeofday(&time1, nullptr);
|
double end = time1.tv_sec * 1000000 + time1.tv_usec;
|
int n = (end - m_start) / 1000;
|
if (0 >= m_nMscTimeout) {
|
// std::cout << m_flag << ">> Time elapsed: " << n << "ms" << std::endl;
|
INFO(m_flag << ">> Time elapsed: " << n << "ms");
|
} else if (n >= m_nMscTimeout) {
|
// std::cout << m_flag << ">> Time out: " << n << "ms" << std::endl;
|
INFO(m_flag << ">> Time out: " << n << "ms");
|
}
|
}
|
|
private:
|
double m_start;
|
std::string m_flag;
|
int m_nMscTimeout;
|
};
|
|
struct Rect {
|
float left;
|
float top;
|
float right;
|
float bottom;
|
};
|
|
struct YoloObjInfo {
|
int type;
|
float prob;
|
Rect rcObj;
|
};
|
|
class DnDetect {
|
public:
|
DnDetect(const int gpuIndex);
|
|
virtual ~DnDetect();
|
|
std::vector<YoloObjInfo> detect(cv::Mat &);
|
|
private:
|
image matToImg(cv::Mat &RefImg);
|
|
static int init(void *arg);
|
|
private:
|
network *m_net;
|
float m_thresh;
|
float m_hier_thresh;
|
float m_nms;
|
char **names;
|
image **alphabet;
|
|
std::mutex dataMtx;
|
|
bool m_bInitThd;
|
std::thread m_thdInit;
|
};
|
}
|
|
|
#endif
|