From e4c9b5bfb1d9000c08d84f2f044cd0c3605a2945 Mon Sep 17 00:00:00 2001
From: miyanhui <dennismi1024@gmail.com>
Date: 星期三, 13 二月 2019 14:17:13 +0800
Subject: [PATCH] 修复检测结果ImgKey不对应的问题

---
 QiaoJiaSystem/StructureApp/AppPipeController.cpp |  230 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 165 insertions(+), 65 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
index 8bf95e3..fc5db6f 100644
--- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -7,6 +7,7 @@
 #include <QtCore/QtGlobal>
 #include <net_config.h>
 
+#include <basic/pipe_element/ffmpeg/basic_struct_for_video_image.h>
 //AppPipeController::AppPipeController(std::string folderPath, const Json::Value &json) :
 //    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0),
 //    m_folderPath(folderPath),
@@ -18,7 +19,9 @@
 
 //}
 AppPipeController::AppPipeController(std::string folderPath, const SdkRuleMap &ruleMap) :
-    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0),
+    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")),
+//    videoCaptureElement(40),
+    m_index(0),
     m_folderPath(folderPath),
     m_sdkRuleMap(ruleMap),
     fdfsClient(nullptr),
@@ -27,7 +30,10 @@
     faceExtractElement(folderPath + "faceExtract", ruleMap[FaceSdk]),
     triggerElement(25, 10),
     recordVideoElement(-1, ""),
-    bRecordVideoEnable(false) {
+    bRecordVideoEnable(false),
+    rpcClient("RtspAnalysServer", "127.0.0.1",10009,"tcp"),
+    m_bSetWH(false)
+{
 
     init();
 
@@ -64,6 +70,7 @@
 //}
 AppPipeController::AppPipeController(std::string camId, const SdkRuleMap &ruleMap, bool RecordVideoEnable) :
     videoCaptureElement(appPref.getStringData(camId + "rtsp"), 25, 3000, appPref.getLongData("gpu.index")),
+//    videoCaptureElement(40),
     m_index(0),
     m_camId(camId),
     fdfsClient(nullptr),
@@ -80,7 +87,11 @@
     leftJudgment(ruleMap[KeepRightSdk]),
     rightJudgment(ruleMap[KeepRightSdk]),
     bRecordVideoEnable(RecordVideoEnable),
-    m_sdkRuleMap(ruleMap) {
+    m_sdkRuleMap(ruleMap),
+    rpcClient("RtspAnalysServer", "127.0.0.1",10009,"tcp"),
+    m_bSetWH(false)
+
+  {
     DBG("camId" << camId);
     init();
     initPerimeter();
@@ -160,11 +171,62 @@
 }
 
 bool AppPipeController::getRunning() {
-    return videoCaptureElement.isRunning();
+    //return videoCaptureElement.isRunning();
+    return false;
 }
 
 string test_str;
 
+
+void AppPipeController::RecordVideo() {
+    std::string imgKeyYolo = yoloRpcElement.getProperty("imgKey");
+
+    std::string imgKeyFace = faceRpcElement.getProperty("imgKey");
+    if(faceRpcElement.getTriggerState() ||
+       personElement.getTriggerState() ||
+       leftJudgment.getTriggerState() ||
+       rightJudgment.getTriggerState() ||
+       perimeterElement.getTriggerState() ||
+       crowdElement.getTriggerState() ||
+       perHubElement.getTriggerState() ||
+       perStaticElement.getTriggerState())
+    {
+        try {
+            auto server = rpcClient.getServer();
+            if (!server)
+            {
+                ERR("server is null");
+                return;
+            }
+
+            if(imgKeyFace != imgKeyYolo)
+            {
+                server->recordVideo(imgKeyFace);
+                server->recordVideo(imgKeyYolo);
+                INFO("Record Video Face: "<<imgKeyFace);
+                INFO("Record Video Yolo: "<<imgKeyYolo);
+            } else {
+                INFO("Record Video: "<<imgKeyYolo);
+                server->recordVideo(imgKeyFace);
+            }
+        }
+        catch (std::exception &e)
+        {
+            ERR("Record Video ImgKeyFace: "<<imgKeyFace <<" ImgKeyYolo :"<<imgKeyYolo <<"   Message: "<<e.what());
+            return ;
+        }
+    }
+    else {
+        INFO("faceRpcElement: "<< faceRpcElement.getTriggerState() <<" "<<
+                               "personElement: "<<personElement.getTriggerState() <<"  "<<
+                               "leftJudgment: "<<leftJudgment.getTriggerState() <<"   "<<
+                               "leftJudgment: "<<rightJudgment.getTriggerState() <<"    "<<
+                               "perimeterElement: "<<perimeterElement.getTriggerState()<<"  "<<
+                               "crowdElement: "<<crowdElement.getTriggerState()<<"   "<<
+                               "perHubElement: "<<perHubElement.getTriggerState()<<"   "<<
+                               "perStaticElement: "<<perStaticElement.getTriggerState());
+    }
+}
 void AppPipeController::init() {
 
     unsigned char ip_old[15] = {0};
@@ -192,85 +254,113 @@
     //  int max=appPref.getIntData("n_cut_max_duration");
     // recordInit(40,100);
     videoCaptureElement.registerConnector([&] {
-        mutex.lock();
-        cv::Mat imageTemp = videoCaptureElement.getImage();
 
-        std::string  strNewTime = AppUtil::getTimeUSecString();;
+        std::string imgKey;
+        m_hiredisTool.listRpop(m_camId,imgKey);
+        if(imgKey.empty())
+        {
+            ERR("imgKey.empty()  "<<imgKey);
+            return;
+        }
 
-        //DBG("m_camId="<<m_camId<<"  strNewTime="<<strNewTime);
-        cv::putText(imageTemp, strNewTime, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5,
-                    cv::Scalar(255, 255, 0), 2);
+        cv::Mat imageTemp;
+        m_hiredisTool.getKeyImage(imgKey,imageTemp);
+        if(!m_bSetWH)
+        {
+            INFO("SetWidth:"<<imageTemp.cols<<"  Height:"<<imageTemp.rows);
+            appPref.setIntData(m_camId+"width",imageTemp.cols);
+            appPref.setIntData(m_camId+"height",imageTemp.rows);
+            m_bSetWH=true;
+        }
+
+        m_hiredisTool.delKey(imgKey);
+        if(imageTemp.empty())
+        {
+            ERR("No Image Data In: "<<imgKey);
+            return;
+        }
+        std::string  strNewTime = AppUtil::getTimeUSecString();
+
+        ImageName_s_t imgSt = ImageName_s_t::fromString(imgKey);
+
         if (m_camId.size() > 0) {
-
-
-            if (bRecordVideoEnable) {
-                newRecordVideoElement.pushImgBuf(strNewTime, imageTemp);
-                newRecordVideoElement.setSdkTrigger(faceRpcElement.getTriggerState() ||//TODO
-                                                    personElement.getTriggerState() ||
-                                                    leftJudgment.getTriggerState() ||
-                                                    rightJudgment.getTriggerState() ||
-                                                    perimeterElement.getTriggerState() ||
-                                                    crowdElement.getTriggerState() ||
-                                                    perHubElement.getTriggerState() ||
-                                                    perStaticElement.getTriggerState()
-                );
-
+            if (!faceRpcElement.isBusy()) {
+                //#todo
+                faceRpcElement.setProperty("time", strNewTime);
+                faceRpcElement.setProperty("imgKey",imgKey);
+                INFO("Write To FaceRPC  ES time:"<<strNewTime<< "    ImgKey: "<<imgKey);
+                faceRpcElement.setImage(imageTemp);
+                faceRpcElement.submit();
             }
 
-        } else {
-            //#todo 璁$畻褰撳墠鏂囦欢鏃堕棿
-            //#TODO 杈撳嚭闂撮殧鐢ㄤ簬璁$畻鏃堕棿
-            // 鐜颁负姣忎笁甯ц绠椾竴娆★紝瀵艰嚧璁$畻鐨勬椂闂撮暱浜庢枃浠剁殑瀹為檯鏃堕棿
-            auto opit = 25;// videoCaptureElement.getOutPutInterval();
-            auto opidx = videoCaptureElement.getoutPutIndex();
-            int second = opidx / opit;
-            qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000;
-            QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime);
-            strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString();
+            if (!yoloRpcElement.isBusy()) {
+                //#todo
+                yoloRpcElement.setProperty("time", strNewTime);
+                yoloRpcElement.setProperty("imgKey",imgKey);
+                INFO("Write To YoloES time:"<<strNewTime<< "    ImgKey: "<<imgKey);
+                yoloRpcElement.setImage(imageTemp);
+                yoloRpcElement.submit();
+            }
 
+
+            if (appPref.getIntData("show.image") == 1 && !imageDrawElement.isBusy()) {
+                imageDrawElement.setImage(imageTemp);
+                imageDrawElement.submit();
+            }
+
+            /*if(faceRpcElement.getTriggerState() ||
+                 personElement.getTriggerState() ||
+                 leftJudgment.getTriggerState() ||
+                 rightJudgment.getTriggerState() ||
+                 perimeterElement.getTriggerState() ||
+                 crowdElement.getTriggerState() ||
+                 perHubElement.getTriggerState() ||
+                 perStaticElement.getTriggerState())
+            {
+                  try {
+                      auto server = rpcClient.getServer();
+                      if (!server)
+                      {
+                          ERR("server is null");
+                          return;
+                      }
+                      INFO("Record Video "<<imgKey);
+                      server->recordVideo(imgKey);
+                  }
+                  catch (std::exception &e)
+                  {
+                      ERR("Record Video Err: "<<imgKey <<"   Message: "<<e.what());
+                      return ;
+                  }
+            }
+            else {
+                INFO("faceRpcElement: "<< faceRpcElement.getTriggerState() <<" "<<
+                     "personElement: "<<personElement.getTriggerState() <<"  "<<
+                     "leftJudgment: "<<leftJudgment.getTriggerState() <<"   "<<
+                    "leftJudgment: "<<rightJudgment.getTriggerState() <<"    "<<
+                    "perimeterElement: "<<perimeterElement.getTriggerState()<<"  "<<
+                    "crowdElement: "<<crowdElement.getTriggerState()<<"   "<<
+                    "perHubElement: "<<perHubElement.getTriggerState()<<"   "<<
+                    "perStaticElement: "<<perStaticElement.getTriggerState());
+            }*/
         }
-         mutex.unlock();
-//        DBG(strNewTime);
-
-        if (!faceRpcElement.isBusy()) {
-//            faceRpcElement.setProperty("uuid", uuid);
-            //#todo
-            faceRpcElement.setProperty("time", strNewTime);
-//            faceRpcElement.setProperty("time", uuid);
-            faceRpcElement.setImage(imageTemp);
-            faceRpcElement.submit();
-        }
-
-        if (!yoloRpcElement.isBusy()) {
-//            yoloRpcElement.setProperty("uuid", uuid);
-            //#todo
-            yoloRpcElement.setProperty("time", strNewTime);
-            yoloRpcElement.setImage(imageTemp);
-            yoloRpcElement.submit();
-        }
-
-        if (!imageDrawElement.isBusy()) {
-            imageDrawElement.setImage(imageTemp);
-            imageDrawElement.submit();
-        }
-
-//        if (bRecordVideoEnable) {
-//            registerElement(triggerElement);
-//        }
     });
 
 
     yoloRpcElement.registerConnector([&] {
         imageDrawElement.setYoloObjects(personElement.getLastScoreRects());
         if (!personElement.isBusy()) {
-
             personElement.setObjsResults(yoloRpcElement.getLastScoreRects());
             personElement.submit();
         }
+        INFO("Record Video By Yolo");
+        this->RecordVideo();
     });
 
     faceRpcElement.registerConnector([&] {
         imageDrawElement.setFaces(faceRpcElement.getLastScoreRects());
+        INFO("Record Video By Face");
+        this->RecordVideo();
     });
 
     yoloRpcElement.registerConnector("YoloTrigger", [&] {
@@ -289,7 +379,7 @@
 
     imageDrawElement.registerConnector([&] {
         if (appPref.getIntData("show.image") == 1) {
-            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+           ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
         }
     });
 
@@ -302,7 +392,17 @@
         registerElement(faceRpcElement);
         registerElement(faceExtractElement);
     }
-    registerElement(imageDrawElement);
+    if(appPref.getIntData("show.image") == 1)
+    {
+        imageDrawElement.registerConnector([&] {
+
+            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+
+        });
+
+        registerElement(imageDrawElement);
+    }
+
    // registerElement(newRecordVideoElement);
     videoCaptureElement.setOutPutInterval(3);
     faceExtractElement.setProperty("index", to_string(m_index));

--
Gitblit v1.8.0