From 9f08028f23d9e5cbfa159bec1e07d63b141a6809 Mon Sep 17 00:00:00 2001 From: zhangjixing <775834166@qq.com> Date: 星期五, 18 一月 2019 10:17:00 +0800 Subject: [PATCH] --- QiaoJiaSystem/StructureApp/PerimeterElement.cpp | 118 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 84 insertions(+), 34 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp index 5e480ee..b605b07 100644 --- a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp +++ b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp @@ -13,6 +13,7 @@ #include <uuid/uuid.h> #include <jsoncpp/json/json.h> +#define ALARM_PERCENT (10) //10% PerimeterElement::PerimeterElement(const SdkRule &rule) : m_sdkRule(rule), PipeElement(true), @@ -41,7 +42,7 @@ void PerimeterElement::threadFunc() { - // ClockTimer ct("PerimeterElement::threadFunc"); + //ClockTimer ct("PerimeterElement::threadFunc"); if (!isInWeek(m_sdkRule.weekRuleVec)) return; int num = 0; @@ -57,41 +58,72 @@ QRect rect(obj.rect.x, obj.rect.y, obj.rect.width, obj.rect.height); QPoint center = rect.center(); - if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) { - m_recVec.push_back(obj.rect); - if (picDate.empty()) { - picDate = obj.properties["time"]; - // DBG("picDate="<<picDate); + if (picDate.empty()) { + picDate = obj.properties["time"]; + // DBG("picDate="<<picDate); + + } + if (m_sdkRule.nSdkType == PerimeterSdk) + { + + if(m_bIsMask) + { + std::vector<Point> poly2; + std::vector<Point> interPoly; + poly2.push_back(Point(rect.x(),rect.y())); + poly2.push_back(Point(rect.x()+rect.width(),rect.y())); + poly2.push_back(Point(rect.x()+rect.width(),rect.y()+rect.height())); + poly2.push_back(Point(rect.x(),rect.y()+rect.height())); + IntAreaCalcUtil::PolygonClip(poly1,poly2,interPoly); + float inter = IntAreaCalcUtil::intAreaCalc(interPoly); + float total1 =IntAreaCalcUtil::intAreaCalc(poly1); + float total2 = IntAreaCalcUtil::intAreaCalc(poly2); + int per1 = (int)(inter / total1 * 100); + int per2 = (int)(inter / total2 * 100); + int per=std::max(per1,per2); + + if(ALARM_PERCENT <= per) + { + //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per); + m_recVec.push_back(obj.rect); + num++; + } } - num++; - } - else + else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) { - // DBG("id="<< obj.properties["id"]<<" no containts x="<<rect.center().x()<<" y="<<rect.center().y()); + m_recVec.push_back(obj.rect); + + + num++; } + } switch (m_sdkRule.nSdkType) { case PerimeterSdk: - state = num > 0 ; + //state = num > 0 ; + state =( num !=mRealNum); + // DBG("num="<<num<< "time="<< picDate); break; case CrowdSdk: - state = num > m_sdkRule.nAlarmNumLowerLimit ; + state = num > m_sdkRule.nAlarmNumLowerLimit && num !=mRealNum; break; case PerHubSdk: - state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit ; -// if(m_sdkRule.nAlarmNumLowerLimit>0) + state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num !=mRealNum; + + +// if(m_sdkRule.nAlarmNumLowerLimit>=0) // { -// if( m_sdkRule.nAlarmNumUpperLimit>m_sdkRule.nAlarmNumLowerLimit+1) +// if( m_sdkRule.nAlarmNumUp2019-01-16 09:49:57perLimit>m_sdkRule.nAlarmNumLowerLimit+1) // { // m_triggerElement.setState(num>m_sdkRule.nAlarmNumLowerLimit && num<m_sdkRule.nAlarmNumUpperLimit); @@ -122,33 +154,43 @@ m_triggerElement.setState(state); m_triggerElement.triggerOnce(); - // DBG("imgUrl="<<imgUrl); - if (m_triggerElement.getTriggerState() && num!=mRealNum) + if (m_triggerElement.getTriggerState() ) { - - cv::Mat t_image = image(CutMask()).clone(); - if(t_image.empty()) - { - if(image.empty()) + if(num > 0) { + cv::Mat t_image = image(CutMask()).clone(); + if(t_image.empty()) { - DBG("image empty"); + DBG("t_image empty"); + return; } - DBG("t_image empty"); - return; + std::string imgUrl = uploadImgToFdfs(t_image); + saveInfoToEs(imgUrl, picDate); } - std::string imgUrl = uploadImgToFdfs(t_image); - saveInfoToEs(imgUrl, picDate); DBG("num=" << num << " lastnum=" << mRealNum); mRealNum = num; } -// if(state) -//DBG("mRealNum=" << mRealNum <<"m_triggerElement.getTriggerState()="<<m_triggerElement.getTriggerState()); + +// if (m_triggerElement.getTriggerState() && num!=mRealNum) +// { + +// cv::Mat t_image = image(CutMask()).clone(); +// if(t_image.empty()) +// { +// DBG("t_image empty"); +// return; +// } +// std::string imgUrl = uploadImgToFdfs(t_image); +// saveInfoToEs(imgUrl, picDate); +// DBG("num=" << num << " lastnum=" << mRealNum); +// mRealNum = num; +// } - if(!state) - { - mRealNum = num; - } + +// if(!state) +// { +// mRealNum = num; +// } // DBG("m_sdkRule.nSdkType="<<m_sdkRule.nSdkType<<" num="<<num); @@ -199,8 +241,16 @@ QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() * 4; int y = obj.value("y").toDouble() * 4; + if(m_sdkRule.nSdkType == PerimeterSdk) + { + poly1.push_back(Point(x,y)); + } + else + { + mPolygon << (QPoint(x, y)); + } - mPolygon << (QPoint(x, y)); + } } -- Gitblit v1.8.0