提交 83a65f96 authored 作者: blu's avatar blu

init

上级 5e2f23c4
...@@ -66,8 +66,8 @@ private: ...@@ -66,8 +66,8 @@ private:
AVCodecContext *pCodecCtx = nullptr; AVCodecContext *pCodecCtx = nullptr;
DetectParam detPara = {25, 500, -1, 3, 3, 30, 0.3, 25}; DetectParam detPara = {25, 500, -1, 3, 3, 30, 0.3, 25};
EventState evtState = EventState::NONE; EventState evtState = EventState::NONE;
// chrono::system_clock::time_point evtStartTm, evtStartTmLast, evtStartTmOrig; // chrono::system_clock::time_point packetTm, evtStartTmLast, evtStartTmOrig;
long long evtStartTm = 0, evtStartTmLast = 0, evtStartTmOrig = 0; long long packetTm = 0, evtStartTmLast = 0, evtStartTmOrig = 0, evtStartTmPre = 0;
queue<string> *evtQueue; queue<string> *evtQueue;
int streamIdx = -1; int streamIdx = -1;
json config; json config;
...@@ -583,8 +583,8 @@ private: ...@@ -583,8 +583,8 @@ private:
matShow3 = gray.clone(); matShow3 = gray.clone();
matShow2 = origin; matShow2 = origin;
#endif #endif
// evtStartTm = chrono::system_clock::now(); // packetTm = chrono::system_clock::now();
evtStartTm = packetTs; packetTm = packetTs;
// TODO: AVG // TODO: AVG
// cv::accumulateWeighted(gray, avg, 0.5); // cv::accumulateWeighted(gray, avg, 0.5);
cv::absdiff(gray, avg, thresh); cv::absdiff(gray, avg, thresh);
...@@ -625,47 +625,49 @@ private: ...@@ -625,47 +625,49 @@ private:
spdlog::debug("evmlmotion {} contours {} area {}, thresh {} hasEvent {}", selfId, cnts.size(), hasEvent? cv::contourArea(cnts[i]):0, detPara.area, hasEvent); spdlog::debug("evmlmotion {} contours {} area {}, thresh {} hasEvent {}", selfId, cnts.size(), hasEvent? cv::contourArea(cnts[i]):0, detPara.area, hasEvent);
// business logic for event // business logic for event
// auto dura = chrono::duration_cast<chrono::seconds>(evtStartTm - evtStartTmLast).count(); // auto dura = chrono::duration_cast<chrono::seconds>(packetTm - evtStartTmLast).count();
if(hasEvent){
evtStartTmLast = packetTm;
}
long long dura = 0; long long dura = 0;
if(evtStartTmLast != 0) { if(evtStartTmLast != 0) {
dura = evtStartTm - evtStartTmLast; dura = packetTm - evtStartTmLast;
} }
switch(evtState) { switch(evtState) {
case NONE: { case NONE: {
if(hasEvent) { if(hasEvent) {
evtState = PRE; evtState = PRE;
spdlog::debug("state: NONE->PRE ({}, {})", dura, evtCnt); spdlog::info("{} state: NONE->PRE ({}, {})", selfId, dura, evtCnt);
evtCnt = 0; evtCnt = 0;
evtStartTmLast = evtStartTm; evtStartTmOrig = packetTm;
evtStartTmOrig = evtStartTm;
} }
break; break;
} }
case PRE: { case PRE: {
if(hasEvent) { if(hasEvent) {
evtStartTmLast = evtStartTm;
evtStartTmOrig = evtStartTm;
if(dura > detPara.pre /*&& evtCnt < detPara.pre*/) { if(dura > detPara.pre /*&& evtCnt < detPara.pre*/) {
spdlog::debug("state: PRE->PRE ({}, {})", dura, evtCnt); spdlog::debug("state: PRE->PRE ({}, {})", dura, evtCnt);
evtState = PRE; evtState = PRE;
evtStartTmOrig = packetTm;
evtCnt = 0; evtCnt = 0;
} }
else if (true/*dura > detPara.pre && evtCnt >= detPara.pre*/) { else if (true/*dura > detPara.pre && evtCnt >= detPara.pre*/) {
evtState = IN; evtState = IN;
json p; json p;
spdlog::debug("state: PRE->IN ({}, {})", dura, evtCnt); spdlog::info("{} state: PRE->IN ({}, {})", selfId, dura, evtCnt);
evtCnt = 0; evtCnt = 0;
makeEvent(EV_MSG_EVENT_MOTION_START, packetTs); makeEvent(EV_MSG_EVENT_MOTION_START, evtStartTmOrig);
auto tmp = chrono::duration_cast<chrono::seconds>(chrono::system_clock::now().time_since_epoch()).count(); auto tmp = chrono::duration_cast<chrono::seconds>(chrono::system_clock::now().time_since_epoch()).count();
packetTsDelta = tmp - evtStartTm; packetTsDelta = tmp - packetTm;
spdlog::info("evmlmotion {} packet ts delta: {}", selfId, packetTsDelta); spdlog::info("evmlmotion {} packet ts delta: {}", selfId, packetTsDelta);
} }
} }
else { else {
if(dura > detPara.pre) { if(dura > detPara.pre) {
evtState= NONE; evtState= NONE;
spdlog::debug("state: PRE->NONE ({}, {})", dura, evtCnt); spdlog::info("state: PRE->NONE ({}, {})", dura, evtCnt);
evtCnt = 0; evtCnt = 0;
} }
} }
...@@ -675,19 +677,18 @@ private: ...@@ -675,19 +677,18 @@ private:
if(!hasEvent) { if(!hasEvent) {
if(dura > (int)(detPara.post/2)) { if(dura > (int)(detPara.post/2)) {
evtState = POST; evtState = POST;
spdlog::debug("state: IN->POST ({}, {})", dura, evtCnt); spdlog::info("state: IN->POST ({}, {})", dura, evtCnt);
evtCnt = 0; evtCnt = 0;
} }
} }
else { else {
if( (evtStartTm - evtStartTmOrig) > (60 *detPara.maxDuration) ) { if( (packetTm - evtStartTmOrig) > (60 *detPara.maxDuration) ) {
evtStartTmOrig = evtStartTm; evtStartTmOrig = packetTm;
makeEvent(EV_MSG_EVENT_MOTION_END, packetTs); makeEvent(EV_MSG_EVENT_MOTION_END, packetTs);
evtCnt = 0; evtCnt = 0;
makeEvent(EV_MSG_EVENT_MOTION_START, packetTs); makeEvent(EV_MSG_EVENT_MOTION_START, packetTs);
spdlog::warn("evmlmotion {} event video continued over {} minutes, force segmenting and continue", devSn, detPara.maxDuration); spdlog::warn("evmlmotion {} event video continued over {} minutes, force segmenting and continue", devSn, detPara.maxDuration);
} }
evtStartTmLast = evtStartTm;
spdlog::debug("state: IN->IN ({}, {})", dura, evtCnt); spdlog::debug("state: IN->IN ({}, {})", dura, evtCnt);
evtCnt = 0; evtCnt = 0;
} }
...@@ -696,17 +697,16 @@ private: ...@@ -696,17 +697,16 @@ private:
case POST: { case POST: {
if(!hasEvent) { if(!hasEvent) {
if(dura > detPara.post) { if(dura > detPara.post) {
spdlog::debug("state: POST->NONE ({}, {})", dura, evtCnt); spdlog::info("state: POST->NONE ({}, {})", dura, evtCnt);
evtState = NONE; evtState = NONE;
evtCnt = 0; evtCnt = 0;
makeEvent(EV_MSG_EVENT_MOTION_END, packetTs); makeEvent(EV_MSG_EVENT_MOTION_END, packetTs);
} }
} }
else { else {
spdlog::debug("state: POST->IN ({}, {})", dura, evtCnt); spdlog::info("state: POST->IN ({}, {})", dura, evtCnt);
evtState=IN; evtState=IN;
evtCnt = 0; evtCnt = 0;
evtStartTmLast = evtStartTm;
} }
break; break;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论