| | |
| | | #ifndef DNDETECT_H |
| | | #define DNDETECT_H |
| | | #define GPU |
| | | |
| | | #include <darknet.h> |
| | | #include <opencv2/opencv.hpp> |
| | | class DnDetect |
| | | { |
| | | public: |
| | | DnDetect(const int gpuIndex); |
| | | virtual ~DnDetect(); |
| | | #include <thread> |
| | | |
| | | std::vector<cv::Rect2f> detect(cv::Mat&); |
| | | private: |
| | | image matToImg(cv::Mat& RefImg); |
| | | namespace DnDetect { |
| | | |
| | | private: |
| | | network *m_net; |
| | | float m_thresh; |
| | | float m_hier_thresh; |
| | | float m_nms; |
| | | char **names; |
| | | 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; |
| | | } |
| | | |
| | | image **alphabet; |
| | | }; |
| | | ~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 |