派生自 development/c++

pansen
2019-03-07 d3b7bbe7102cd089680a828f5d8f6402c8cf6342
QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -7,49 +7,99 @@
#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) :
    m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp"),
    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),
    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) :
    m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp"),
    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()),
    newRecordVideoElement(camId),
    perimeterElement(1),
    crowdElement(json["crowd.num"].asInt()),
    bRecordVideoEnable(RecordVideoEnable) {
//    recordVideoElement(camId, appPref.getStringData(camId + "rtsp")),
//    newRecordVideoElement(camId),
    perimeterElement(ruleMap[PerimeterSdk]),
    crowdElement(ruleMap[CrowdSdk]),
    perStaticElement(ruleMap[PerStaticSdk]),
    perHubElement(ruleMap[PerHubSdk]),
    leftJudgment(ruleMap[KeepRightSdk]),
    rightJudgment(ruleMap[KeepRightSdk]),
    bRecordVideoEnable(RecordVideoEnable),
    m_sdkRuleMap(ruleMap),
    m_bSetWH(false)
  {
    DBG("camId" << camId);
    init();
    initPerimeter();
    initCrowd();
    intKeepRight();
    initKeepRight();
    initPerHub();
    initPerStatic();
}
AppPipeController::~AppPipeController() {
@@ -91,9 +141,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);
@@ -122,11 +172,63 @@
}
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("ImageNoFace Yolo:"<<imgKeyYolo<<"   Face:"<<imgKeyFace);
        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};
@@ -134,20 +236,19 @@
    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);
    }
@@ -156,81 +257,118 @@
    // recordInit(40,100);
    videoCaptureElement.registerConnector([&] {
        cv::Mat imageTemp = videoCaptureElement.getImage();
        std::string imgKey;
        m_hiredisTool.listRpop(m_camId,imgKey);
        if(imgKey.empty())
        {
            ERR("CamId  "<<m_camId<<" No ImgKey");
            return;
        }
        std::string strNewTime;
        strNewTime = AppUtil::getTimeUSecString();
        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;
        }
        cv::putText(imageTemp, strNewTime, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5,
                    cv::Scalar(255, 255, 0), 2);
        m_hiredisTool.delKey(imgKey);
        if(imageTemp.empty())
        {
            ERR("No Image Data In: "<<m_camId<<"   ImgKey:"<<imgKey);
            return;
        }
        std::string  strNewTime = AppUtil::getTimeUSecString();
        ImageName_s_t imgSt = ImageName_s_t::fromString(imgKey);
        if (m_camId.size() > 0) {
            if (bRecordVideoEnable) {
//                DBG("strNewTime="<<strNewTime<<" camId="<<m_camId);
                newRecordVideoElement.pushImgBuf(strNewTime, imageTemp);
                newRecordVideoElement.setSdkTrigger(faceRpcElement.getTriggerState() ||//TODO
                                                    yoloRpcElement.getTrigger() ||
                                                    leftJudgment.getTriggerState() ||
                                                    rightJudgment.getTriggerState() ||
                                                    perimeterElement.getTriggerState() ||
                                                    crowdElement.getTriggerState());
               // newRecordVideoElement.submit();
            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(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);
            if (appPref.getIntData("show.image") == 1 && !imageDrawElement.isBusy()) {
                imageDrawElement.setImage(imageTemp);
                imageDrawElement.submit();
            }
            //this->RecordVideo();
            /*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", [&] {
//        auto images = yoloRpcElement.getTriggerMats();
        //INFO("Record Video By Yolo");
        //this->RecordVideo();
    });
    faceRpcElement.registerConnector("FaceTrigger", [&] {
@@ -241,26 +379,40 @@
                                              faceRpcElement.getTriggerFaces(),
                                              faceRpcElement.getTriggerScoreRects(),
                                              faceRpcElement.getTriggerMats()});
        //INFO("Record Video By Face");
        //this->RecordVideo();
    });
    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);
    registerElement(newRecordVideoElement);
    videoCaptureElement.setOutPutInterval(3);
    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));
@@ -305,7 +457,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() {
@@ -317,18 +476,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();
        }
    });
@@ -354,61 +512,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::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::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);
}