| | |
| | | #include <uuid/uuid.h> |
| | | #include <jsoncpp/json/json.h> |
| | | |
| | | #define ALARM_PERCENT (10) //10% |
| | | PerimeterElement::PerimeterElement(const SdkRule &rule) : |
| | | m_sdkRule(rule), |
| | | PipeElement(true), |
| | |
| | | |
| | | void PerimeterElement::threadFunc() { |
| | | |
| | | // ClockTimer ct("PerimeterElement::threadFunc"); |
| | | //ClockTimer ct("PerimeterElement::threadFunc"); |
| | | if (!isInWeek(m_sdkRule.weekRuleVec)) |
| | | return; |
| | | int num = 0; |
| | |
| | | |
| | | 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); |
| | |
| | | |
| | | 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); |
| | |
| | | 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)); |
| | | |
| | | |
| | | } |
| | | } |