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 | 244 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 177 insertions(+), 67 deletions(-)
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
index db11a0c..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};
@@ -193,69 +255,94 @@
// recordInit(40,100);
videoCaptureElement.registerConnector([&] {
- cv::Mat imageTemp = videoCaptureElement.getImage();
+ std::string imgKey;
+ m_hiredisTool.listRpop(m_camId,imgKey);
+ if(imgKey.empty())
+ {
+ ERR("imgKey.empty() "<<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: "<<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.getTrigger() ||
- 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();
+ }
- }
-// 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();
+ }
- 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(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());
+ }*/
}
});
@@ -263,14 +350,17 @@
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", [&] {
@@ -289,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());
}
});
@@ -302,8 +392,18 @@
registerElement(faceRpcElement);
registerElement(faceExtractElement);
}
- registerElement(imageDrawElement);
- registerElement(newRecordVideoElement);
+ 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);
@@ -437,10 +537,20 @@
leftJudgment.init(rule.strAreas, rule.strLine);
rightJudgment.init(rule.strExAreas, rule.strExLine);
yoloRpcElement.registerConnector([&] {
- leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
- rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
- leftJudgment.setImage(yoloRpcElement.getImage());
- rightJudgment.setImage(yoloRpcElement.getImage());
+ 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);
--
Gitblit v1.8.0