派生自 development/c++

pansen
2019-03-07 979bc003bce710bf300bc2bd87a8278585678763
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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