#ifndef DNDETECT_H #define DNDETECT_H #define GPU #include #include #include 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 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