From 291dbcd9331cd0df41addef74defa4654ee034fb Mon Sep 17 00:00:00 2001 From: chenshijun <csj_sky@126.com> Date: 星期一, 22 四月 2019 15:59:20 +0800 Subject: [PATCH] 增加人员异常的参数处理 --- QiaoJiaSystem/StructureApp/AppPipeController.cpp | 370 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 287 insertions(+), 83 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp index 321f170..14bfad1 100644 --- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp +++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp @@ -7,8 +7,9 @@ #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), +// videoCaptureElement("filePath", 25, -1, appPref.getIntData("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), @@ -18,22 +19,31 @@ //} 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("RpcVTIMPort"), "tcp"), + videoCaptureElement("filePath", 25, -1, appPref.getIntData("gpu.index")), +// videoCaptureElement(40), + m_index(0), m_folderPath(folderPath), m_sdkRuleMap(ruleMap), fdfsClient(nullptr), +#ifdef YOLOSERVER yoloRpcElement(folderPath + "yoloRpc"), +#else + vptRpcElement(folderPath + "yoloRpc"), +#endif 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(); } //AppPipeController::AppPipeController(int index, const Json::Value &json, bool RecordVideoEnable) : -// videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index"), RecordVideoEnable), +// videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getIntData("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) { @@ -42,7 +52,7 @@ //AppPipeController::AppPipeController(std::string camId, const Json::Value &json, bool RecordVideoEnable) : -// videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getLongData("gpu.index")), +// videoCaptureElement(json["rtsp"].asString(), 25, 3000, appPref.getIntData("gpu.index")), // m_index(0), // m_camId(camId), // fdfsClient(nullptr), @@ -63,24 +73,31 @@ // intKeepRight(); //} AppPipeController::AppPipeController(std::string camId, const SdkRuleMap &ruleMap, bool RecordVideoEnable) : - videoCaptureElement(appPref.getStringData(camId + "rtsp"), 25, 3000, appPref.getLongData("gpu.index")), + m_rpcClient("RtspAnalysServer", "127.0.0.1", appPref.getIntData("RpcVTIMPort"), "tcp"), + videoCaptureElement(appPref.getStringData(camId + "rtsp"), 25, 3000, appPref.getIntData("gpu.index")), +// videoCaptureElement(40), m_index(0), m_camId(camId), fdfsClient(nullptr), +#ifdef YOLOSERVER yoloRpcElement(camId + "yoloRpc"), +#else + vptRpcElement(camId + "yoloRpc"), +#endif 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]), perHubElement(ruleMap[PerHubSdk]), leftJudgment(ruleMap[KeepRightSdk]), rightJudgment(ruleMap[KeepRightSdk]), - bRecordVideoEnable(RecordVideoEnable), - m_sdkRuleMap(ruleMap) { +// bRecordVideoEnable(RecordVideoEnable), + m_sdkRuleMap(ruleMap), + m_bSetWH(false) { DBG("camId" << camId); init(); initPerimeter(); @@ -160,10 +177,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("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() { @@ -192,89 +261,151 @@ // int max=appPref.getIntData("n_cut_max_duration"); // recordInit(40,100); videoCaptureElement.registerConnector([&] { - mutex.lock(); - cv::Mat imageTemp = videoCaptureElement.getImage(); - std::string strNewTime; - strNewTime = AppUtil::getTimeUSecString(); + std::string imgKey; + m_hiredisTool.listRpop(m_camId, imgKey); + if (imgKey.empty()) { +// ERR("CamId "<<m_camId<<" No ImgKey"); + return; + } -// 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: " << 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(); +#ifdef YOLOSERVER + 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(); + } +#else + if (!vptRpcElement.isBusy()) { + //#todo + vptRpcElement.setProperty("time", strNewTime); + vptRpcElement.setProperty("imgKey", imgKey); + INFO("Write To vptRpcElement time:" << strNewTime << " ImgKey: " << imgKey); + vptRpcElement.setImage(imageTemp); + vptRpcElement.submit(); + } +#endif - } -// DBG(strNewTime); - if (!faceRpcElement.isBusy()) { -// faceRpcElement.setProperty("uuid", uuid); - //#todo - faceRpcElement.setProperty("time", strNewTime); -// faceRpcElement.setProperty("time", uuid); - faceRpcElement.setImage(imageTemp); - faceRpcElement.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 (!yoloRpcElement.isBusy()) { -// yoloRpcElement.setProperty("uuid", uuid); - //#todo - yoloRpcElement.setProperty("time", strNewTime); - yoloRpcElement.setImage(imageTemp); - yoloRpcElement.submit(); - } - - if (!imageDrawElement.isBusy()) { - imageDrawElement.setImage(imageTemp); - imageDrawElement.submit(); - } - mutex.unlock(); -// if (bRecordVideoEnable) { -// registerElement(triggerElement); -// } }); +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { imageDrawElement.setYoloObjects(personElement.getLastScoreRects()); if (!personElement.isBusy()) { - personElement.setObjsResults(yoloRpcElement.getLastScoreRects()); personElement.submit(); } + //INFO("Record Video By Yolo"); + //this->RecordVideo(); }); +#else + vptRpcElement.registerConnector([&] { + imageDrawElement.setYoloObjects(personElement.getLastScoreRects()); + if (!personElement.isBusy()) { + personElement.setObjsResults(vptRpcElement.getLastHpRects()); + personElement.submit(); + } +//#todo HCP +//#todo Car + //INFO("Record Video By Yolo"); + //this->RecordVideo(); + }); +#endif faceRpcElement.registerConnector([&] { imageDrawElement.setFaces(faceRpcElement.getLastScoreRects()); + //INFO("Record Video By Face"); + //this->RecordVideo(); }); + +#ifdef YOLOSERVER yoloRpcElement.registerConnector("YoloTrigger", [&] { // auto images = yoloRpcElement.getTriggerMats(); + //INFO("Record Video By Yolo"); + //this->RecordVideo(); }); +#else + vptRpcElement.registerConnector("YoloTrigger", [&] { +// auto images = yoloRpcElement.getTriggerMats(); + //INFO("Record Video By Yolo"); + //this->RecordVideo(); + }); +#endif faceRpcElement.registerConnector("FaceTrigger", [&] { // auto images = faceRpcElement.getTriggerMats(); @@ -284,6 +415,8 @@ faceRpcElement.getTriggerFaces(), faceRpcElement.getTriggerScoreRects(), faceRpcElement.getTriggerMats()}); + //INFO("Record Video By Face"); + //this->RecordVideo(); }); imageDrawElement.registerConnector([&] { @@ -301,11 +434,24 @@ 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)); +#ifdef YOLOSERVER registerElement(yoloRpcElement); +#else + registerElement(vptRpcElement); +#endif //#todo setProperty // faceExtractElement.setProperty("index", to_string(m_index)); // faceExtractElement.setProperty("index", to_string(m_index)); @@ -373,16 +519,25 @@ if (rule.nIsRun != 1) { return; } - - +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { if (!perimeterElement.isBusy()) { perimeterElement.setYoloObjects(yoloRpcElement.getLastScoreRects()); perimeterElement.setImage(yoloRpcElement.getImage()); - perimeterElement.submit(); } }); +#else + vptRpcElement.registerConnector([&] { + if (!perimeterElement.isBusy()) { + perimeterElement.setYoloObjects(vptRpcElement.getLastScoreRects()); + perimeterElement.setImage(vptRpcElement.getImage()); + perimeterElement.submit(); + } +// car +// prc + }); +#endif // perimeterElement.registerConnector([&] { // peTriggerElement.setState(perimeterElement.getRealNum() > 0); @@ -414,6 +569,7 @@ crowdElement.setProperty("local_ip", m_localIp); +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { if (!crowdElement.isBusy()) { crowdElement.setYoloObjects(yoloRpcElement.getLastScoreRects()); @@ -421,7 +577,17 @@ crowdElement.submit(); } }); - +#else + vptRpcElement.registerConnector([&] { + if (!perimeterElement.isBusy()) { + perimeterElement.setYoloObjects(vptRpcElement.getLastHpRects()); + perimeterElement.setImage(vptRpcElement.getImage()); + perimeterElement.submit(); + } +// car +// prc + }); +#endif registerElement(crowdElement); // registerElement(crowdTriggerElement); } @@ -435,20 +601,37 @@ rightJudgment.setProperty("local_ip", m_localIp); leftJudgment.init(rule.strAreas, rule.strLine); rightJudgment.init(rule.strExAreas, rule.strExLine); +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { - if(!leftJudgment.isBusy()) - { - leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects()); - leftJudgment.setImage(yoloRpcElement.getImage()); + if (!leftJudgment.isBusy()) { + leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects()); + leftJudgment.setImage(yoloRpcElement.getImage()); + leftJudgment.submit(); } - if(!rightJudgment.isBusy()) - { + if (!rightJudgment.isBusy()) { rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects()); rightJudgment.setImage(yoloRpcElement.getImage()); + rightJudgment.submit(); } }); +#else + vptRpcElement.registerConnector([&] { + if (!leftJudgment.isBusy()) { + leftJudgment.setYoloObjects(vptRpcElement.getLastHpRects()); + leftJudgment.setImage(vptRpcElement.getImage()); + leftJudgment.submit(); + } + if (!rightJudgment.isBusy()) { + rightJudgment.setYoloObjects(vptRpcElement.getLastHpRects()); + + rightJudgment.setImage(vptRpcElement.getImage()); + rightJudgment.submit(); + } + }); +#endif + registerElement(leftJudgment); registerElement(rightJudgment); @@ -463,6 +646,8 @@ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]"; perStaticElement.setProperty("local_ip", m_localIp); + +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { if (!perStaticElement.isBusy()) { perStaticElement.setYoloObjects(yoloRpcElement.getLastScoreRects()); @@ -470,7 +655,15 @@ perStaticElement.submit(); } }); - +#else + vptRpcElement.registerConnector([&] { + if (!perStaticElement.isBusy()) { + perStaticElement.setYoloObjects(vptRpcElement.getLastHpRects()); + perStaticElement.setImage(vptRpcElement.getImage()); + perStaticElement.submit(); + } + }); +#endif registerElement(perStaticElement); } @@ -483,6 +676,8 @@ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]"; perHubElement.setProperty("local_ip", m_localIp); + +#ifdef YOLOSERVER yoloRpcElement.registerConnector([&] { if (!perHubElement.isBusy()) { perHubElement.setYoloObjects(yoloRpcElement.getLastScoreRects()); @@ -490,6 +685,15 @@ perHubElement.submit(); } }); +#else + vptRpcElement.registerConnector([&] { + if (!perHubElement.isBusy()) { + perHubElement.setYoloObjects(vptRpcElement.getLastHpRects()); + perHubElement.setImage(vptRpcElement.getImage()); + perHubElement.submit(); + } + }); +#endif registerElement(perHubElement); } -- Gitblit v1.8.0