派生自 development/c++

pansen
2019-01-10 59408e43480b48b6acd6e76641ff1a97811e7ab5
QiaoJiaSystem/YoloServer/DnDetect.h
@@ -1,17 +1,68 @@
#ifndef DNDETECT_H
#define DNDETECT_H
#define GPU
#include <darknet.h>
#include <opencv2/opencv.hpp>
class DnDetect
{
#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<cv::Rect2f> detect(cv::Mat&);
        std::vector<YoloObjInfo> detect(cv::Mat &);
private:
    image matToImg(cv::Mat& RefImg);
        static int init(void *arg);
private:
    network *m_net;
@@ -19,8 +70,14 @@
    float m_hier_thresh;
    float m_nms;
    char **names;
    image **alphabet;
        std::mutex dataMtx;
        bool m_bInitThd;
        std::thread m_thdInit;
};
}
#endif