From d3b7bbe7102cd089680a828f5d8f6402c8cf6342 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期四, 07 三月 2019 14:43:28 +0800
Subject: [PATCH] GB28181集成完成,集成推流模块

---
 QiaoJiaSystem/StructureApp/YoloRpcElement.cpp |  207 +++++++++++++++++----------------------------------
 1 files changed, 68 insertions(+), 139 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
index 0a47849..e3ccd11 100644
--- a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
+++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp
@@ -6,24 +6,20 @@
 #include <basic/util/opencv/CvUtil.h>
 
 
-#include <basic/db/Elasticsearch/EsDBTool.h>
-#include <uuid/uuid.h>
-#include <jsoncpp/json/json.h>
-
-#include <QtCore/QJsonDocument>
-#include <QtCore/QJsonObject>
-
-YoloRpcElement::YoloRpcElement(string shareMemoryName) :
+YoloRpcElement::YoloRpcElement(std::string shareMemoryName) :
     rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
-              appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
-    m_triggerElement(0, 50), trackingTrigger(nullptr) {
+              appPref.getIntData("yolo.port"), "tcp"),
+    sharedMemory(nullptr),
+    trackingTrigger(nullptr)
+{
+     trackingTrigger = new TrackingTrigger(0.5);
     sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
 //    DBG(shareMemoryName);
     //1520 x 2688   1080 x 1920 //2560 * 1440 * 4
     if (!sharedMemory->create(4608 * 2592 * 4)) {
         sharedMemory->attach();
     }
-    trackingTrigger = new TrackingTrigger(0.5);
+
     try {
         auto server = rpcClient.getServer();
         cocoData = server->getCocoData();
@@ -37,39 +33,65 @@
     if (sharedMemory) {
         delete sharedMemory;
     }
-    if (trackingTrigger) {
+    if(trackingTrigger)
+    {
         delete trackingTrigger;
+        trackingTrigger=nullptr;
     }
 }
+void YoloRpcElement::setImage(const cv::Mat &value)
+{
+    if (value.size != image.size)
+    {
+        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
+    }
+    value.copyTo(image);
+}
+::YoloDetect::ObjInfos YoloRpcElement::getObjects() const
+{
+    return objs;
+}
 
-void YoloRpcElement::threadFunc() {
-//    ClockTimer ct("YoloRpcElement::threadFunc");.
-    triggerMats.clear();
+
+std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const {
+    return trackingTrigger->getLastScoreRects();
+}
+
+ cv::Mat YoloRpcElement::getImage() const
+{
+    return image;
+}
+
+void YoloRpcElement::threadFunc()
+{
+ //  ClockTimer ct("YoloRpcElement::threadFunc");
+        triggerScoredRects.clear();
     try {
-        auto server = rpcClient.getServer();
-        if (!server) {
-            ERR("server is null");
-            return;
+            auto server = rpcClient.getServer();
+            if (!server)
+            {
+                ERR("server is null");
+                return;
+            }
+            objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
         }
-        objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
-        if (objs.size() <= 0) {
-            m_triggerElement.setState(false);
-            m_triggerElement.triggerOnce(false);
-            trackingTrigger->triggerLine();
-            return;
-        } else {
-            m_triggerElement.setState(true);
+        catch (std::exception &e)
+        {
+            ERR(e.what())
         }
-        string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
-        float t_det_sc =
-            appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+//        int size=objs.size();
+//        if(size>30)
+//        {
 
-        for (auto &obj: objs) {
+//            DBG("size="<<size);
+//            return;
+//        }
+
+        for (auto &obj: objs)
+        {
             if (obj.type != 0)
                 continue;
-            if (obj.prob < t_det_sc) {
-                continue;
-            }
+
             ScoredRect scoredRect;
 
             int x = obj.rcObj.left * image.cols;
@@ -77,122 +99,29 @@
             int w = (obj.rcObj.right - obj.rcObj.left) * image.cols;
             int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows;
             scoredRect.rect = cv::Rect(x, y, w, h);
-
             scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0;
-            if (trackingTrigger->triggerOnce(scoredRect)) {
+            scoredRect.properties["time"] = getProperty("time");
+            scoredRect.properties["imgKey"]=getProperty("imgKey");
+            if (trackingTrigger->triggerOnce(scoredRect))
+            {
                 trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id);
                 trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type];
-                auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone();
-                triggerMats.push_back(t_image);
-
-                std::string strImgUrl = "http://";
-                if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) {
-                    fdfsClient->rwLock.rdlock();
-                    std::vector<unsigned char> buffer;
-                    CvUtil::cvMat2Buffer(t_image, buffer);
-                    std::string strImgUrlTmp = "";
-                    fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg");
-                    strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp);
-                    strImgUrl.clear();
-                    strImgUrl = strImgUrlTmp;
-//                    strImgUrl.append("/").append(strImgUrlTmp);
-                    fdfsClient->rwLock.unlock();
-                }
-
-                //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture
-                {
-                    //#todo
-                    EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
-
-                    string str_uuid;
-                    uuid_t t_uuid;
-                    char str[36];
-                    uuid_generate(t_uuid);
-                    uuid_unparse(t_uuid, str);
-                    str_uuid = str;
-
-//                jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d  锛燂紵锛熸嬁涓嶅埌
-//                jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒�
-//                jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑  锛燂紵锛� 鎷夸笉鍒�
-//                jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞  锛燂紵锛� 鎷夸笉鍒�
-//                jsonyolo.insert("Image","");//蹇収  锛燂紵锛� 鎷夸笉鍒�
-//                jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷
-//                jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎
-
-                    Json::Value t_json;
-                    t_json["Id"] = str_uuid; //涓婚敭
-//#todo
-
-                    t_json["picName"] = "wait todo";
-                    t_json["DataType"] = cocoData[obj.type];
-                    t_json["Score"] = obj.prob;
-
-                    t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store
-                    t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿
-                    t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
-                    t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞
-                    t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞
-                    t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
-
-//                    faceRpcElement.setProperty("frame_number", frame_number);
-                    t_json["picDate"] = getProperty("time");
-                    t_json["content"] = "wait todo";
-                    t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
-                    t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
-                    t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
-
-
-                    t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭
-                    t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
-                    t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
-                    t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
-
-                    t_json["indeviceid"] = appPref.getStringData("fxDevID");
-                    t_json["indevicename"] = appPref.getStringData("fxDevNAME");
-
-                    DBG(t_json.toStyledString());
-                    bool retface = false;
-                    retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid);
-                    if (retface) {
-                        INFO("facedb success");
-                    } else {
-                        ERR("facedb fail");
-                    }
-                }
+                trackingTrigger->getLastRect().properties["time"] = getProperty("time");
+                trackingTrigger->getLastRect().properties["imgKey"]=getProperty("imgKey");
+              //  DBG("time)"<<getProperty("time"));
+                triggerScoredRects.push_back(trackingTrigger->getLastRect());
             }
         }
         trackingTrigger->triggerLine();
-        m_triggerElement.triggerOnce(false);
-        if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+//        if(trackingTrigger->getLastScoreRects().size()>20)
+//        {
+//            DBG("");
+//        }
         fireConnectors();
-    } catch (std::exception &e) {
-        ERR(e.what())
-    }
 }
 
-::YoloDetect::ObjInfos YoloRpcElement::getObjects() const {
-    return objs;
-}
 
-bool YoloRpcElement::getTrigger() const {
-    return (objs.size() > 0 ? true : false);
-}
 
-std::vector<cv::Mat> YoloRpcElement::getTriggerMats() {
-    return triggerMats;
-}
 
-std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const {
-    return trackingTrigger->getLastScoreRects();
-}
 
-void YoloRpcElement::setImage(const cv::Mat &value) {
-    if (value.size != image.size) {
-        image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data());
-    }
-    value.copyTo(image);
-}
 
-bool YoloRpcElement::getTriggerState() const {
-    return m_triggerElement.getTriggerState();
-}

--
Gitblit v1.8.0