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 |  556 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 323 insertions(+), 233 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
index 2a0062d..fc5db6f 100644
--- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -7,57 +7,102 @@
 #include <QtCore/QtGlobal>
 #include <net_config.h>
 
-AppPipeController::AppPipeController(std::string folderPath, const Json::Value &json) :
-    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0),
+#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),
+//    m_json(json), fdfsClient(nullptr), yoloRpcElement(folderPath + "yoloRpc"), faceRpcElement(folderPath + "faceRpc"),
+//    faceExtractElement(folderPath + "faceExtract"), triggerElement(25, 10),
+//    recordVideoElement(-1, json["rtsp"].asString()), bRecordVideoEnable(false) {
+
+//    init();
+
+//}
+AppPipeController::AppPipeController(std::string folderPath, const SdkRuleMap &ruleMap) :
+    videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")),
+//    videoCaptureElement(40),
+    m_index(0),
     m_folderPath(folderPath),
-    m_json(json), fdfsClient(nullptr), yoloRpcElement(folderPath + "yoloRpc"), faceRpcElement(folderPath + "faceRpc"),
-    faceExtractElement(folderPath + "faceExtract"), triggerElement(25, 10),
-    recordVideoElement(-1, json["rtsp"].asString()), bRecordVideoEnable(false) {
+    m_sdkRuleMap(ruleMap),
+    fdfsClient(nullptr),
+    yoloRpcElement(folderPath + "yoloRpc"),
+    faceRpcElement(folderPath + "faceRpc", ruleMap[FaceSdk]),
+    faceExtractElement(folderPath + "faceExtract", ruleMap[FaceSdk]),
+    triggerElement(25, 10),
+    recordVideoElement(-1, ""),
+    bRecordVideoEnable(false),
+    rpcClient("RtspAnalysServer", "127.0.0.1",10009,"tcp"),
+    m_bSetWH(false)
+{
 
     init();
 
 }
-
-AppPipeController::AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable) :
-    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index"), RecordVideoEnable),
-    m_index(index), fdfsClient(nullptr), yoloRpcElement(to_string(index) + "yoloRpc"),
-    faceRpcElement(to_string(index) + "faceRpc"), m_json(json), faceExtractElement(to_string(index) + "faceExtract"),
-    triggerElement(25, 4), recordVideoElement(index, json["rtsp"].asString()), bRecordVideoEnable(RecordVideoEnable) {
-    init();
-}
+//AppPipeController::AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable) :
+//    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index"), RecordVideoEnable),
+//    m_index(index), fdfsClient(nullptr), yoloRpcElement(to_string(index) + "yoloRpc"),
+//    faceRpcElement(to_string(index) + "faceRpc"), m_json(json), faceExtractElement(to_string(index) + "faceExtract"),
+//    triggerElement(25, 4), recordVideoElement(index, json["rtsp"].asString()), bRecordVideoEnable(RecordVideoEnable) {
+//    init();
+//}
 
 
-AppPipeController::AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable) :
-    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index")),
+//AppPipeController::AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable) :
+//    videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index")),
+//    m_index(0),
+//    m_camId(camId),
+//    fdfsClient(nullptr),
+//    yoloRpcElement(camId + "yoloRpc"),
+//    faceRpcElement(camId + "faceRpc"),
+//    m_json(json),
+//    faceExtractElement(camId + "faceExtract"),
+//    triggerElement(25, 4),
+//    recordVideoElement(camId, json["rtsp"].asString()),
+//    newRecordVideoElement(camId),
+//    perimeterElement(1),
+//    crowdElement(json["crowd.num"].asInt()),
+//    bRecordVideoEnable(RecordVideoEnable)
+//{
+//    init();
+//    initPerimeter();
+//    initCrowd();
+//    intKeepRight();
+//}
+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),
     yoloRpcElement(camId + "yoloRpc"),
-    faceRpcElement(camId + "faceRpc"),
-    m_json(json),
-    faceExtractElement(camId + "faceExtract"),
-   // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()),
-//    leftTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
-//    rightTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()),
-   // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()),
+    faceRpcElement(camId + "faceRpc", ruleMap[FaceSdk]),
+    faceExtractElement(camId + "faceExtract", ruleMap[FaceSdk]),
     triggerElement(25, 4),
-    recordVideoElement(camId, json["rtsp"].asString()),
+    recordVideoElement(camId, appPref.getStringData(camId + "rtsp")),
     newRecordVideoElement(camId),
-    perimeterElement(1),
-    crowdElement(json["crowd.num"].asInt()),
-    bRecordVideoEnable(RecordVideoEnable)
-{
+    perimeterElement(ruleMap[PerimeterSdk]),
+    crowdElement(ruleMap[CrowdSdk]),
+    perStaticElement(ruleMap[PerStaticSdk]),
+    perHubElement(ruleMap[PerHubSdk]),
+    leftJudgment(ruleMap[KeepRightSdk]),
+    rightJudgment(ruleMap[KeepRightSdk]),
+    bRecordVideoEnable(RecordVideoEnable),
+    m_sdkRuleMap(ruleMap),
+    rpcClient("RtspAnalysServer", "127.0.0.1",10009,"tcp"),
+    m_bSetWH(false)
+
+  {
+    DBG("camId" << camId);
     init();
     initPerimeter();
     initCrowd();
-    intKeepRight();
+    initKeepRight();
+    initPerHub();
+    initPerStatic();
 }
 
 AppPipeController::~AppPipeController() {
-      if(recordStatus==RECORD_DOING)
-      {
-          newRecordVideoElement.endRecord();
-      }
+
 }
 
 //************************************
@@ -95,9 +140,9 @@
     faceExtractElement.setProperty("dev_id", str_device_id);
     faceExtractElement.setProperty("ch_id", str_ch_id);
     faceExtractElement.setProperty("path", path);
-    yoloRpcElement.setProperty("dev_id", str_device_id);
-    yoloRpcElement.setProperty("ch_id", str_ch_id);
-    yoloRpcElement.setProperty("path", path);
+    personElement.setProperty("dev_id", str_device_id);
+    personElement.setProperty("ch_id", str_ch_id);
+    personElement.setProperty("path", path);
 
     //淇敼鏃堕棿涓哄疄闄呭彂鐢熸椂闂�
     QString strPath = QString::fromStdString(path);
@@ -126,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};
@@ -138,90 +234,133 @@
     if (!(GetIpAddress(net_ifname.c_str(), ip_old))) {
         ERR("couldn't get ip");
     }
-
+    m_localIp = std::string((char *) ip_old);
     bUp = false;
 
-    yoloRpcElement.setProperty("str_addr", m_json["addr"].asString());
-    yoloRpcElement.setProperty("local_ip", std::string((char *) ip_old));
+    personElement.setProperty("str_addr", m_sdkRuleMap[YoloSdk].strAddr.toStdString());
+    personElement.setProperty("local_ip", std::string((char *) ip_old));
 
-    faceExtractElement.setProperty("str_addr", m_json["addr"].asString());
+    faceExtractElement.setProperty("str_addr", m_sdkRuleMap[FaceSdk].strAddr.toStdString());
     faceExtractElement.setProperty("local_ip", std::string((char *) ip_old));
 
 
     if (bRecordVideoEnable) {
         faceExtractElement.setProperty("dev_id", m_camId);
-        yoloRpcElement.setProperty("dev_id", m_camId);
-        m_json_Record["rtsp"] = m_json["rtsp"].asString();
+        personElement.setProperty("dev_id", m_camId);
     }
 
 
-   //#todo
-  //  int max=appPref.getIntData("n_cut_max_duration");
-    recordInit(20,100);
+    //#todo
+    //  int max=appPref.getIntData("n_cut_max_duration");
+    // recordInit(40,100);
     videoCaptureElement.registerConnector([&] {
 
+        std::string imgKey;
+        m_hiredisTool.listRpop(m_camId,imgKey);
+        if(imgKey.empty())
+        {
+            ERR("imgKey.empty()  "<<imgKey);
+            return;
+        }
 
+        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;
+        }
 
-        std::string strNewTime;
+        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) {
-            strNewTime = AppUtil::getTimeUSecString();
-
-            if(bRecordVideoEnable)
-            {
-                newRecordVideoElement.pushImgBuf(strNewTime,videoCaptureElement.getImage());
-                setSdkTrigger();
-
-                doRecord();
+            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();
+            }
 
-        }
-//        DBG(strNewTime);
 
-        if (!faceRpcElement.isBusy()) {
-//            faceRpcElement.setProperty("uuid", uuid);
-            //#todo
-            faceRpcElement.setProperty("time", strNewTime);
-//            faceRpcElement.setProperty("time", uuid);
-            faceRpcElement.setImage(videoCaptureElement.getImage());
-            faceRpcElement.submit();
-        }
+            if (appPref.getIntData("show.image") == 1 && !imageDrawElement.isBusy()) {
+                imageDrawElement.setImage(imageTemp);
+                imageDrawElement.submit();
+            }
 
-        if (!yoloRpcElement.isBusy()) {
-//            yoloRpcElement.setProperty("uuid", uuid);
-            //#todo
-            yoloRpcElement.setProperty("time", strNewTime);
-            yoloRpcElement.setImage(videoCaptureElement.getImage());
-            yoloRpcElement.submit();
-        }
-
-        if (!imageDrawElement.isBusy()) {
-            imageDrawElement.setImage(videoCaptureElement.getImage());
-            imageDrawElement.submit();
-        }
-
-        if (bRecordVideoEnable) {
-            registerElement(triggerElement);
+            /*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());
+            }*/
         }
     });
 
 
     yoloRpcElement.registerConnector([&] {
-        imageDrawElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+        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", [&] {
@@ -240,22 +379,34 @@
 
     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());
         }
     });
 
     registerElement(videoCaptureElement);
-    if (m_json["yolo.enable"].asString() == "1") {
-        registerElement(yoloRpcElement);
+    if (m_sdkRuleMap[YoloSdk].nIsRun == 1) {
+        registerElement(personElement);
     }
-    if (m_json["face.enable"].asString() == "1") {
+    if (m_sdkRuleMap[FaceSdk].nIsRun == 1) {
+        DBG("FaceSdk=" << m_sdkRuleMap[FaceSdk].nIsRun);
         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));
+    registerElement(yoloRpcElement);
     //#todo setProperty
 //    faceExtractElement.setProperty("index", to_string(m_index));
 //    faceExtractElement.setProperty("index", to_string(m_index));
@@ -300,7 +451,14 @@
 void AppPipeController::setfdfsClient(FastFdsWithLock *p_fdfsClient) {
     fdfsClient = p_fdfsClient;
     faceExtractElement.setFdfs(fdfsClient);
-    yoloRpcElement.setFdfs(fdfsClient);
+    personElement.setFdfs(fdfsClient);
+    perHubElement.setFdfs(fdfsClient);
+    perimeterElement.setFdfs(fdfsClient);
+    perStaticElement.setFdfs(fdfsClient);
+    leftJudgment.setFdfs(fdfsClient);
+    rightJudgment.setFdfs(fdfsClient);
+    crowdElement.setFdfs(fdfsClient);
+
 }
 
 std::string AppPipeController::getRtmp() {
@@ -312,18 +470,17 @@
 }
 
 void AppPipeController::initPerimeter() {
-    if (!m_json["perimeter.enable"] == "1") {
+    SdkRule rule = m_sdkRuleMap[PerimeterSdk];
+    if (rule.nIsRun != 1) {
         return;
     }
-    std::string area = m_json["perimeter.area"].asString();
-    //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
-    perimeterElement.setMask(area);
-    perimeterElement.setFdfs(fdfsClient);
-    perimeterElement.setProperty("sdkType","perimeter");
+
+
     yoloRpcElement.registerConnector([&] {
         if (!perimeterElement.isBusy()) {
+            perimeterElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+            perimeterElement.setImage(yoloRpcElement.getImage());
 
-            perimeterElement.setObjsResults(yoloRpcElement.getObjects());
             perimeterElement.submit();
         }
     });
@@ -349,160 +506,93 @@
 }
 
 void AppPipeController::initCrowd() {
-    if (m_json["crowd.enable"] != "1") {
+    SdkRule rule = m_sdkRuleMap[CrowdSdk];
+    if (rule.nIsRun != 1) {
         return;
     }
-    std::string area = m_json["crowd.area"].asString();
+    //   std::string area = m_json["crowd.area"].asString();
     //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
-    crowdElement.setMask(area);
-    crowdElement.setFdfs(fdfsClient);
-    crowdElement.setProperty("sdkType","crowd");
+
+    crowdElement.setProperty("local_ip", m_localIp);
+
     yoloRpcElement.registerConnector([&] {
         if (!crowdElement.isBusy()) {
-            crowdElement.setObjsResults(yoloRpcElement.getObjects());
+            crowdElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+            crowdElement.setImage(yoloRpcElement.getImage());
             crowdElement.submit();
         }
     });
-//    crowdElement.registerConnector([&] {
-//        crowdTriggerElement.setState(crowdElement.getRealNum() >= m_json["crowd.num"].asInt());
-//        crowdTriggerElement.triggerOnce();
-//    });
-//    crowdTriggerElement.registerConnector([&] {
 
-//        switch (crowdTriggerElement.getTriggerType()) {
-//            case UP:
-//                //reqRecordMap[SdkType_Perimeter]=true;
-//                // startRecord(SdkType_Perimeter);
-//            DBG("crowdTriggerElement UP");
-//                break;
-//            case DOWN:
-//                // reqRecordMap[SdkType_Perimeter]=false;
-//                //endRecord(SdkType_Perimeter);
-//            DBG("crowdTriggerElement Down");
-//                break;
-//            default:
-//                break;
-//        }
-//    });
     registerElement(crowdElement);
 //    registerElement(crowdTriggerElement);
 }
 
-void AppPipeController::intKeepRight() {
-    if (m_json["keepRight.enable"] != "1") {
+void AppPipeController::initKeepRight() {
+    SdkRule rule = m_sdkRuleMap[KeepRightSdk];
+    if (rule.nIsRun != 1) {
         return;
     }
-    std::string leftArea = m_json["keepRight.leftArea"].asString();
-    std::string leftLine = m_json["keepRight.leftLine"].asString();
-    std::string rightArea = m_json["keepRight.rightArea"].asString();
-    std::string rightLine = m_json["keepRight.rightLine"].asString();
-    leftJudgment.init(QString::fromStdString(leftArea), QString::fromStdString(leftLine));
-    rightJudgment.init(QString::fromStdString(rightArea), QString::fromStdString(rightLine));
+    leftJudgment.setProperty("local_ip", m_localIp);
+    rightJudgment.setProperty("local_ip", m_localIp);
+    leftJudgment.init(rule.strAreas, rule.strLine);
+    rightJudgment.init(rule.strExAreas, rule.strExLine);
     yoloRpcElement.registerConnector([&] {
-        leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
-        rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+        if(!leftJudgment.isBusy())
+        {
+             leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+              leftJudgment.setImage(yoloRpcElement.getImage());
+              leftJudgment.submit();
+        }
+        if(!rightJudgment.isBusy())
+        {
+            rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
+
+            rightJudgment.setImage(yoloRpcElement.getImage());
+            rightJudgment.submit();
+        }
+
     });
     registerElement(leftJudgment);
     registerElement(rightJudgment);
 
 }
 
-
-//================
-void AppPipeController::recordInit(int videoMin, int videoMax) {
-    sdkTrigger = false;
-    fileMin = videoMin;
-    fileMax = videoMax;
-    triggerDelay = fileMin/2;
-
-    recordStatus = RECORD_STOP;
-    videoLength = 0;
-    recordDelay = 0;
-}
-
-void AppPipeController::setSdkTrigger() {
-    if( faceRpcElement.getTriggerState() ||//TODO
-        yoloRpcElement.getTrigger() ||
-        leftJudgment.getTriggerState()||
-        rightJudgment.getTriggerState() ||
-        perimeterElement.getTriggerState() ||
-        crowdElement.getTriggerState()
-            ){
-        triggerDelay = 0;
-        sdkTrigger = true;
-    } else{
-        if(triggerDelay++ >= fileMin/2) {
-            sdkTrigger = false;
-        }
-        else{
-            sdkTrigger = true;
-        }
+void AppPipeController::initPerStatic() {
+    SdkRule rule = m_sdkRuleMap[PerStaticSdk];
+    if (rule.nIsRun != 1) {
+        return;
     }
+    //   std::string area = m_json["crowd.area"].asString();
+    //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
+
+    perStaticElement.setProperty("local_ip", m_localIp);
+    yoloRpcElement.registerConnector([&] {
+        if (!perStaticElement.isBusy()) {
+            perStaticElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+            perStaticElement.setImage(yoloRpcElement.getImage());
+            perStaticElement.submit();
+        }
+    });
+
+    registerElement(perStaticElement);
 }
 
-void AppPipeController::doRecord() {
-    switch(recordStatus)
-    {
-        case RECORD_STOP:
-//        DBG("recordDelay:" << recordDelay);
-//        DBG("videoLength:" << videoLength);
-//        DBG("sdkTrigger:" << sdkTrigger);
-            videoLength = 0;
-            recordDelay = 0;
-            if(sdkTrigger){
-                recordStatus = RECORD_DOING;
-                newRecordVideoElement.startRecord();
-            }
-            else
-            {
-                ImgInfo info;
-                newRecordVideoElement.getImg(info);
-            }
-            break;
-
-        case RECORD_DOING:
-            videoLength++;
-            if(sdkTrigger){
-                if(videoLength < fileMax){
-                    newRecordVideoElement.doRecord();
-                }
-                else{
-                    recordStatus = RECORD_STOP;
-                    newRecordVideoElement.endRecord();
-                }
-            }else{
-                recordStatus = RECORD_ENDING;
-                newRecordVideoElement.doRecord();
-            }
-            break;
-
-        case RECORD_ENDING:
-            DBG("recordDelay:" << recordDelay);
-            DBG("videoLength:" << videoLength);
-            DBG("sdkTrigger:" << sdkTrigger);
-            recordDelay++;
-            videoLength++;
-            if(sdkTrigger){
-                if( (recordDelay < fileMin/4) &&
-                    (videoLength < fileMax)){
-                    newRecordVideoElement.doRecord();
-                }else{
-                    recordStatus = RECORD_STOP;
-                    newRecordVideoElement.endRecord();
-                }
-            }else{
-                if( (recordDelay < fileMin/2) &&
-                    (videoLength < fileMax)){
-                    newRecordVideoElement.doRecord();
-                }else{
-                    recordStatus = RECORD_STOP;
-                    newRecordVideoElement.endRecord();
-                }
-            }
-            break;
-
-        default:
-            break;
+void AppPipeController::initPerHub() {
+    SdkRule rule = m_sdkRuleMap[PerHubSdk];
+    if (rule.nIsRun != 1) {
+        return;
     }
-}
+    //   std::string area = m_json["crowd.area"].asString();
+    //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]";
 
+    perHubElement.setProperty("local_ip", m_localIp);
+    yoloRpcElement.registerConnector([&] {
+        if (!perHubElement.isBusy()) {
+            perHubElement.setYoloObjects(yoloRpcElement.getLastScoreRects());
+            perHubElement.setImage(yoloRpcElement.getImage());
+            perHubElement.submit();
+        }
+    });
+
+    registerElement(perHubElement);
+}

--
Gitblit v1.8.0