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 | 227 ++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 161 insertions(+), 66 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp index c8e3733..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,90 +254,113 @@ // int max=appPref.getIntData("n_cut_max_duration"); // recordInit(40,100); videoCaptureElement.registerConnector([&] { -// mutex.lock(); + std::string imgKey; + m_hiredisTool.listRpop(m_camId,imgKey); + if(imgKey.empty()) + { + ERR("imgKey.empty() "<<imgKey); + return; + } -// std::string tmp="camId="+m_camId+"videoCaptureElement"; -// ClockTimer cl(tmp); - cv::Mat imageTemp = videoCaptureElement.getImage(); - std::string 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; + } - //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); + 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(); + } - } -// mutex.unlock(); -// DBG(strNewTime); -// std::string tmp1="camId="+m_camId+"strNewTime"+strNewTime; -// ClockTimer cl1(tmp1); - 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 (appPref.getIntData("show.image") == 1 && !imageDrawElement.isBusy()) { + imageDrawElement.setImage(imageTemp); + imageDrawElement.submit(); + } - if (!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()); + }*/ } - -// 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", [&] { @@ -294,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()); } }); @@ -307,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