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/AppPipeController.cpp | 243 ++++++++++++++++++++++++++++++++++-------------- 1 files changed, 172 insertions(+), 71 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp index c8e3733..710118b 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,10 @@ //} AppPipeController::AppPipeController(std::string folderPath, const SdkRuleMap &ruleMap) : - videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0), + 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_sdkRuleMap(ruleMap), fdfsClient(nullptr), @@ -26,8 +30,11 @@ faceRpcElement(folderPath + "faceRpc", ruleMap[FaceSdk]), faceExtractElement(folderPath + "faceExtract", ruleMap[FaceSdk]), triggerElement(25, 10), - recordVideoElement(-1, ""), - bRecordVideoEnable(false) { +// recordVideoElement(-1, ""), + bRecordVideoEnable(false), + + m_bSetWH(false) +{ init(); @@ -63,7 +70,9 @@ // 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), @@ -71,8 +80,8 @@ faceRpcElement(camId + "faceRpc", ruleMap[FaceSdk]), faceExtractElement(camId + "faceExtract", ruleMap[FaceSdk]), triggerElement(25, 4), - recordVideoElement(camId, appPref.getStringData(camId + "rtsp")), - newRecordVideoElement(camId), +// recordVideoElement(camId, appPref.getStringData(camId + "rtsp")), +// newRecordVideoElement(camId), perimeterElement(ruleMap[PerimeterSdk]), crowdElement(ruleMap[CrowdSdk]), perStaticElement(ruleMap[PerStaticSdk]), @@ -80,7 +89,10 @@ leftJudgment(ruleMap[KeepRightSdk]), rightJudgment(ruleMap[KeepRightSdk]), bRecordVideoEnable(RecordVideoEnable), - m_sdkRuleMap(ruleMap) { + m_sdkRuleMap(ruleMap), + m_bSetWH(false) + + { DBG("camId" << camId); init(); initPerimeter(); @@ -160,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}; @@ -192,94 +256,119 @@ // 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("CamId "<<m_camId<<" No 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: "<<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) { - 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(); + } + //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()); + }*/ } - - 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", [&] { // auto images = yoloRpcElement.getTriggerMats(); + //INFO("Record Video By Yolo"); + //this->RecordVideo(); }); faceRpcElement.registerConnector("FaceTrigger", [&] { @@ -290,11 +379,13 @@ 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()); } }); @@ -307,9 +398,19 @@ 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); + //videoCaptureElement.setOutPutInterval(3); faceExtractElement.setProperty("index", to_string(m_index)); registerElement(yoloRpcElement); //#todo setProperty -- Gitblit v1.8.0