From ae87bf6bbddb781ff7316d032f8dc2302fb608ec Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期三, 19 十二月 2018 19:44:42 +0800
Subject: [PATCH] Merge QiaojiaoSystem Code (svn version is r3345)
---
QiaoJiaSystem/StructureApp/AppPipeController.cpp | 167 ++++++-----------------
QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 139 +++++++++++++++++--
QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 43 +++++-
QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp | 2
QiaoJiaSystem/DataManagerServer/http_configserver.h | 2
QiaoJiaSystem/StructureApp/NewRecordVideoElement.h | 31 +++
QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 2
QiaoJiaSystem/StructureApp/AppPipeController.h | 18 --
8 files changed, 231 insertions(+), 173 deletions(-)
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
index eee56d7..789f602 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -2336,7 +2336,7 @@
// sub = sub > 3000 ? sub - 3000 : 0000;
//shijian yuejie buchang
// sub = sub < 0 ? 0000 : sub;
- int haomiao = sub % 1000;
+ int haomiao = (sub % 1000) > 50 ? ((sub % 1000) - 50) : 0;
sub /= 1000;
int m = sub;
int shi, fen, miao;
@@ -2345,10 +2345,10 @@
shi = m / 3600;
fen = m / 60 % 60;
miao = m % 60;
- sprintf(ch_time, "%02d:%02d:%02d.%03d", shi, fen, miao, haomiao);
- cout << ch_time << endl;
- } else printf("杈撳叆鏁板�煎お澶�");
+ sprintf(ch_time, "%02d:%02d:%02d.%02d", shi, fen, miao, haomiao / 10);
+ } else printf("杈撳叆鏁板�煎お澶�");
+ DBG("ch_time" << ch_time);
std::string str_time(ch_time);
//#todo 鎸夌収鏃堕棿鍛藉悕
std::string str_imgName(AppUtil::getTimeString() + ".jpg");// = "test.jpg";
@@ -2360,7 +2360,7 @@
if (str_time > str_tmpTime) {
ERR("{\"error\":\"Time error\"}" << str_time << " str_tmpTime " << str_tmpTime);
- str_time = str_tmpTime.size() > 0 ? str_tmpTime.substr(0, str_tmpTime.rfind(".")) : str_time;
+ str_time = str_tmpTime.size() > 0 ? str_tmpTime : str_time;
// return "{\"error\":\"Time error\"}";
}
@@ -2541,16 +2541,19 @@
DBG("path=" << vec[i]);
t_FilePath += vec[i] + ".mp4";
sub = t - t1;
- find = true;
+ find = sub < getVideoTime(t_FilePath);
break;
}
} else {
sub = t - t1;
- if (t >= t1 && sub <= 3000) {
+ if (t >= t1) {
DBG("path=" << vec[i]);
t_FilePath += vec[i] + ".mp4";
- find = true;
+
+ find = sub < getVideoTime(t_FilePath);
+
+ DBG("find:" << find);
break;
}
}
@@ -2565,6 +2568,30 @@
}
+qint64 devHttpServer_c::getVideoTime(const std::string &videoPath) {
+ std::string cmd_getVideoFileTime(
+ " ffmpeg -i '" + videoPath + "' 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");
+
+ std::string str_tmpTime = AppUtil::getCmdResult(cmd_getVideoFileTime);
+ DBG("str_tmpTime:" << str_tmpTime);//00:00:06.89
+ qint64 len_ms = 0;
+
+ QStringList list = QString::fromStdString(str_tmpTime).split(":");
+ if (list.size() == 3) {
+ len_ms = list[0].toInt() * 60 * 60 * 1000;
+ len_ms += list[1].toInt() * 60 * 1000;
+
+ QStringList s = list[2].split(".");
+ if (s.size() == 2) {
+ len_ms += s[0].toInt() * 1000;
+ len_ms += s[1].toInt() * 10;
+ }
+
+ }
+ DBG("len_ms:" << len_ms);
+ return len_ms;
+}
+
std::vector<std::string> devHttpServer_c::forEachFile(const std::string &dir_name) {
std::vector<std::string> v;
auto dir = opendir(dir_name.data());
diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.h b/QiaoJiaSystem/DataManagerServer/http_configserver.h
index 09f8e27..69ee27b 100644
--- a/QiaoJiaSystem/DataManagerServer/http_configserver.h
+++ b/QiaoJiaSystem/DataManagerServer/http_configserver.h
@@ -173,6 +173,8 @@
std::string getVideoPathByTime(const std::string& time,const std::string& camId,qint64& sub);
std::vector<std::string> forEachFile(const std::string &dir_name);
+
+ qint64 getVideoTime(const std::string& videoPath);
};
#endif
diff --git a/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
index 6f0272d..b2b89af 100644
--- a/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
+++ b/QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
@@ -70,7 +70,7 @@
}
bool TriggerElement::getTriggerState() const {
- return triggerState;
+ return state;
}
void TriggerElement::threadInitial() {
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
index 2a0062d..afb6584 100644
--- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -36,17 +36,16 @@
faceRpcElement(camId + "faceRpc"),
m_json(json),
faceExtractElement(camId + "faceExtract"),
- // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()),
+ // 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()),
+ // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()),
triggerElement(25, 4),
recordVideoElement(camId, json["rtsp"].asString()),
newRecordVideoElement(camId),
perimeterElement(1),
crowdElement(json["crowd.num"].asInt()),
- bRecordVideoEnable(RecordVideoEnable)
-{
+ bRecordVideoEnable(RecordVideoEnable) {
init();
initPerimeter();
initCrowd();
@@ -54,10 +53,7 @@
}
AppPipeController::~AppPipeController() {
- if(recordStatus==RECORD_DOING)
- {
- newRecordVideoElement.endRecord();
- }
+
}
//************************************
@@ -155,23 +151,33 @@
}
- //#todo
- // int max=appPref.getIntData("n_cut_max_duration");
- recordInit(20,100);
+ //#todo
+ // int max=appPref.getIntData("n_cut_max_duration");
+ // recordInit(40,100);
videoCaptureElement.registerConnector([&] {
-
+ cv::Mat imageTemp = videoCaptureElement.getImage();
std::string strNewTime;
+ strNewTime = AppUtil::getTimeUSecString();
+
+// cv::putText(imageTemp, strNewTime, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5,
+// cv::Scalar(255, 255, 0), 2);
if (m_camId.size() > 0) {
- strNewTime = AppUtil::getTimeUSecString();
- if(bRecordVideoEnable)
- {
- newRecordVideoElement.pushImgBuf(strNewTime,videoCaptureElement.getImage());
- setSdkTrigger();
- doRecord();
+ if (bRecordVideoEnable) {
+ newRecordVideoElement.pushImgBuf(strNewTime, imageTemp);
+ newRecordVideoElement.setSdkTrigger(faceRpcElement.getTriggerState() ||//TODO
+ yoloRpcElement.getTrigger() ||
+ leftJudgment.getTriggerState() ||
+ rightJudgment.getTriggerState() ||
+ perimeterElement.getTriggerState() ||
+ crowdElement.getTriggerState());
+ if (!newRecordVideoElement.isBusy()) {
+ newRecordVideoElement.submit();
+ }
+
}
} else {
@@ -193,7 +199,7 @@
//#todo
faceRpcElement.setProperty("time", strNewTime);
// faceRpcElement.setProperty("time", uuid);
- faceRpcElement.setImage(videoCaptureElement.getImage());
+ faceRpcElement.setImage(imageTemp);
faceRpcElement.submit();
}
@@ -201,12 +207,12 @@
// yoloRpcElement.setProperty("uuid", uuid);
//#todo
yoloRpcElement.setProperty("time", strNewTime);
- yoloRpcElement.setImage(videoCaptureElement.getImage());
+ yoloRpcElement.setImage(imageTemp);
yoloRpcElement.submit();
}
if (!imageDrawElement.isBusy()) {
- imageDrawElement.setImage(videoCaptureElement.getImage());
+ imageDrawElement.setImage(imageTemp);
imageDrawElement.submit();
}
@@ -243,6 +249,18 @@
ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
}
});
+ newRecordVideoElement.registerConnector([&] {
+ if (faceRpcElement.getTriggerState() ||//TODO
+ yoloRpcElement.getTrigger() ||
+ leftJudgment.getTriggerState() ||
+ rightJudgment.getTriggerState() ||
+ perimeterElement.getTriggerState() ||
+ crowdElement.getTriggerState()
+ ) {
+
+ }
+
+ });
registerElement(videoCaptureElement);
if (m_json["yolo.enable"].asString() == "1") {
@@ -253,8 +271,8 @@
registerElement(faceExtractElement);
}
registerElement(imageDrawElement);
-
- videoCaptureElement.setOutPutInterval(3);
+ registerElement(newRecordVideoElement);
+ videoCaptureElement.setOutPutInterval(5);
faceExtractElement.setProperty("index", to_string(m_index));
//#todo setProperty
// faceExtractElement.setProperty("index", to_string(m_index));
@@ -319,7 +337,7 @@
//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");
+ perimeterElement.setProperty("sdkType", "perimeter");
yoloRpcElement.registerConnector([&] {
if (!perimeterElement.isBusy()) {
@@ -356,7 +374,7 @@
//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("sdkType", "crowd");
yoloRpcElement.registerConnector([&] {
if (!crowdElement.isBusy()) {
crowdElement.setObjsResults(yoloRpcElement.getObjects());
@@ -405,104 +423,5 @@
registerElement(leftJudgment);
registerElement(rightJudgment);
-}
-
-
-//================
-void AppPipeController::recordInit(int videoMin, int videoMax) {
- sdkTrigger = false;
- fileMin = videoMin;
- fileMax = videoMax;
- triggerDelay = fileMin/2;
-
- recordStatus = RECORD_STOP;
- videoLength = 0;
- recordDelay = 0;
-}
-
-void AppPipeController::setSdkTrigger() {
- if( faceRpcElement.getTriggerState() ||//TODO
- yoloRpcElement.getTrigger() ||
- leftJudgment.getTriggerState()||
- rightJudgment.getTriggerState() ||
- perimeterElement.getTriggerState() ||
- crowdElement.getTriggerState()
- ){
- triggerDelay = 0;
- sdkTrigger = true;
- } else{
- if(triggerDelay++ >= fileMin/2) {
- sdkTrigger = false;
- }
- else{
- sdkTrigger = true;
- }
- }
-}
-
-void AppPipeController::doRecord() {
- switch(recordStatus)
- {
- case RECORD_STOP:
-// DBG("recordDelay:" << recordDelay);
-// DBG("videoLength:" << videoLength);
-// DBG("sdkTrigger:" << sdkTrigger);
- videoLength = 0;
- recordDelay = 0;
- if(sdkTrigger){
- recordStatus = RECORD_DOING;
- newRecordVideoElement.startRecord();
- }
- else
- {
- ImgInfo info;
- newRecordVideoElement.getImg(info);
- }
- break;
-
- case RECORD_DOING:
- videoLength++;
- if(sdkTrigger){
- if(videoLength < fileMax){
- newRecordVideoElement.doRecord();
- }
- else{
- recordStatus = RECORD_STOP;
- newRecordVideoElement.endRecord();
- }
- }else{
- recordStatus = RECORD_ENDING;
- newRecordVideoElement.doRecord();
- }
- break;
-
- case RECORD_ENDING:
- DBG("recordDelay:" << recordDelay);
- DBG("videoLength:" << videoLength);
- DBG("sdkTrigger:" << sdkTrigger);
- recordDelay++;
- videoLength++;
- if(sdkTrigger){
- if( (recordDelay < fileMin/4) &&
- (videoLength < fileMax)){
- newRecordVideoElement.doRecord();
- }else{
- recordStatus = RECORD_STOP;
- newRecordVideoElement.endRecord();
- }
- }else{
- if( (recordDelay < fileMin/2) &&
- (videoLength < fileMax)){
- newRecordVideoElement.doRecord();
- }else{
- recordStatus = RECORD_STOP;
- newRecordVideoElement.endRecord();
- }
- }
- break;
-
- default:
- break;
- }
}
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.h b/QiaoJiaSystem/StructureApp/AppPipeController.h
index 648b766..58f3e55 100644
--- a/QiaoJiaSystem/StructureApp/AppPipeController.h
+++ b/QiaoJiaSystem/StructureApp/AppPipeController.h
@@ -93,24 +93,6 @@
std::string getFullFileName();
-
- void recordInit(int videoMin, int videoMax);
- void setSdkTrigger();
- void doRecord();
- int fileMin;
- int fileMax;
- bool sdkTrigger;
- int triggerDelay;
-
-#define RECORD_STOP (0)
-#define RECORD_DOING (1)
-#define RECORD_ENDING (2)
-
- int recordStatus;
- int videoLength;
- int recordDelay;
-
-
};
#endif // APPPIPECONTROLLER_H
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
index ccee428..6f2cdd1 100644
--- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
@@ -32,7 +32,7 @@
FaceRpcElement::FaceRpcElement(string shareMemoryName) :
//#todo
rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"),
- appPref.getIntData("faceDete.port"), "tcp"), m_triggerElement(0, 50),
+ appPref.getIntData("faceDete.port"), "tcp"), m_triggerElement(0, 0),
// rpcClient("faceServer","",10002,"tcp"),
sharedMemory(nullptr), trackingTrigger(nullptr) {
sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
index dda7544..a46ad7c 100644
--- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp
@@ -3,7 +3,7 @@
//#todo index int -> string
NewRecordVideoElement::NewRecordVideoElement(std::string camid) :
-videoEncoderElement(cv::Size(1920, 1080), 9, 0),
+videoEncoderElement(cv::Size(1920, 1080), 5, 0),
camID(camid)
{
@@ -12,7 +12,10 @@
}
NewRecordVideoElement::~NewRecordVideoElement() {
-m_imgBufQue.clear();
+ queue<ImgInfo> empty;
+ empty.swap(m_imgBufQue);
+
+//m_imgBufQue.clear();
}
std::string NewRecordVideoElement::startRecord() {
@@ -22,7 +25,7 @@
getImg(info);
std::string srcPath= getFileName(info.time);
-
+// DBG("fisrt fps time"<<info.time);
try {
videoEncoderElement.threadInitial(srcPath, info.img);
}
@@ -33,18 +36,20 @@
}
void NewRecordVideoElement::endRecord() {
- ImgInfo info;
- getImg(info);
+ doRecord();
+ doRecord();
+ doRecord();
videoEncoderElement.threadClosing();
}
void NewRecordVideoElement::doRecord() {
-// ImgInfo info=m_HiredisTool.getImage(camID);
+ // ImgInfo info=m_HiredisTool.getImage(camID);
ImgInfo info;
getImg(info);
- DBG(" time="<<info.time);
+
+// DBG(" time="<<info.time);
videoEncoderElement.doFunc(info.img);
}
@@ -84,29 +89,131 @@
return t_FilePath;
}
-void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat img)
+void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat& img)
{
ImgInfo info;
- info.img=img;
+ img.copyTo(info.img);
+// info.img=img;
info.time=time;
- m_imgBufQue.push_front(info);
+ m_imgBufQue.push(info);
// int size=m_imgBufQue.size();
// DBG("m_imgBufQue size="<<size);
}
void NewRecordVideoElement::getImg(ImgInfo& info)
{
//todo
- int len=10;
- info=m_imgBufQue.back();
+ int len=20;
+ info=m_imgBufQue.front();
int size=m_imgBufQue.size();
- //DBG("m_imgBufQue size="<<size<<" time="<<info.time);
+// DBG("m_imgBufQue size="<<size<<" time="<<info.time);
if(size>len)
{
- m_imgBufQue.pop_back();
-
-
+ m_imgBufQue.pop();
}
}
+ void NewRecordVideoElement::threadFunc()
+ {
+ Record();
+ }
+ void NewRecordVideoElement::threadInitial()
+ {
+ recordInit(40,100);
+ }
+
+ void NewRecordVideoElement::Record() {
+ switch(recordStatus)
+ {
+ case RECORD_STOP:
+ // DBG("recordDelay:" << recordDelay);
+ // DBG("videoLength:" << videoLength);
+ // DBG("sdkTrigger:" << sdkTrigger);
+ videoLength = 0;
+ recordDelay = 0;
+ if(sdkTrigger){
+ recordStatus = RECORD_DOING;
+ startRecord();
+ }
+ else
+ {
+ ImgInfo info;
+ getImg(info);
+ }
+ break;
+
+ case RECORD_DOING:
+ videoLength++;
+ if(sdkTrigger){
+ if(videoLength < fileMax){
+ doRecord();
+ }
+ else
+ {
+ recordStatus = RECORD_STOP;
+ endRecord();
+ }
+ }
+ else
+ {
+ recordStatus = RECORD_ENDING;
+ doRecord();
+ }
+ break;
+
+ case RECORD_ENDING:
+// DBG("recordDelay:" << recordDelay);
+// DBG("videoLength:" << videoLength);
+// DBG("sdkTrigger:" << sdkTrigger);
+ recordDelay++;
+ videoLength++;
+ if(sdkTrigger){
+ if( (recordDelay < fileMin/4) &&
+ (videoLength < fileMax)){
+ doRecord();
+ }else{
+ recordStatus = RECORD_STOP;
+ endRecord();
+ }
+ }else{
+ if( (recordDelay < fileMin/2) &&
+ (videoLength < fileMax)){
+ doRecord();
+ }else{
+ recordStatus = RECORD_STOP;
+ endRecord();
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ void NewRecordVideoElement::setSdkTrigger(bool isTrigger) {
+ if(isTrigger)
+ {
+ triggerDelay = 0;
+ sdkTrigger = true;
+ }
+ else
+ {
+ if(triggerDelay++ >= fileMin/2) {
+ sdkTrigger = false;
+ }
+ else{
+ sdkTrigger = true;
+ }
+ }
+ }
+ void NewRecordVideoElement::recordInit(int videoMin, int videoMax) {
+ sdkTrigger = false;
+ fileMin = videoMin;
+ fileMax = videoMax;
+ triggerDelay = fileMin/2;
+
+ recordStatus = RECORD_STOP;
+ videoLength = 0;
+ recordDelay = 0;
+ }
diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
index 8da45c7..4d56bc1 100644
--- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
+++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h
@@ -1,13 +1,13 @@
#ifndef NEWRECORDVIDEOELEMENT_H
#define NEWRECORDVIDEOELEMENT_H
-
+#include <basic/pipe/PipeElement.h>
#include <basic/pipe_element/ffmpeg/FfmpegElement.h>
struct ImgInfo
{
std::string time;
cv::Mat img;
};
-class NewRecordVideoElement {
+class NewRecordVideoElement : public basic::PipeElement{
public:
@@ -17,14 +17,35 @@
~NewRecordVideoElement();
std::string startRecord();
-
+ void setSdkTrigger(bool isTrigger);
void doRecord();
void endRecord();
- void pushImgBuf(const std::string& time,cv::Mat img);
+ void pushImgBuf(const std::string& time,cv::Mat& img);
void getImg(ImgInfo& info);
+private:
+ virtual void threadFunc() override;
+ virtual void threadInitial() override;
+private:
+ void recordInit(int videoMin, int videoMax);
+
+ void Record();
+ int fileMin;
+ int fileMax;
+ bool sdkTrigger;
+ int triggerDelay;
+
+#define RECORD_STOP (0)
+#define RECORD_DOING (1)
+#define RECORD_ENDING (2)
+
+ int recordStatus;
+ int videoLength;
+ int recordDelay;
+
+
private:
std::string getFileName(std::string timeStamp);
@@ -32,7 +53,7 @@
ffmpeg::VideoEncodeElement videoEncoderElement;
std::string camID;
std::string m_cutPath;
- std::list<ImgInfo> m_imgBufQue;
+ std::queue<ImgInfo> m_imgBufQue;
};
#endif // RECORDVIDEOELEMENT_H
--
Gitblit v1.8.0