From 17675f1c6447b6e014b520608ce6d5f1f2e9707a Mon Sep 17 00:00:00 2001
From: xuxiuxi <554325746@qq.com>
Date: 星期一, 04 三月 2019 16:28:42 +0800
Subject: [PATCH] add models, daos and controllers for tables.

---
 QiaoJiaSystem/YoloServer/DnDetect.h |   89 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 73 insertions(+), 16 deletions(-)

diff --git a/QiaoJiaSystem/YoloServer/DnDetect.h b/QiaoJiaSystem/YoloServer/DnDetect.h
index 3718aed..fc1a37c 100644
--- a/QiaoJiaSystem/YoloServer/DnDetect.h
+++ b/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

--
Gitblit v1.8.0