派生自 development/c++

xuxiuxi
2019-03-04 17675f1c6447b6e014b520608ce6d5f1f2e9707a
QiaoJiaSystem/YoloServer/DnDetect.h
@@ -1,26 +1,83 @@
#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