| | |
| | | #include <jsoncpp/json/json.h> |
| | | |
| | | #define ALARM_PERCENT (10) //10% |
| | | |
| | | PerimeterElement::PerimeterElement(const SdkRule &rule) : |
| | | m_sdkRule(rule), |
| | | PipeElement(true), |
| | | trackingTrigger(nullptr), |
| | | mRealNum(0), |
| | | m_triggerElement(rule.nTriggerDelay*8,0), |
| | | m_triggerElement(rule.nTriggerDelay * 8, 0), |
| | | pManagerEsDB(nullptr), |
| | | m_bIsMask(true) |
| | | { |
| | | m_bIsMask(true) { |
| | | |
| | | pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); |
| | | } |
| | |
| | | // DBG("picDate="<<picDate); |
| | | |
| | | } |
| | | if (m_sdkRule.nSdkType == PerimeterSdk) |
| | | { |
| | | 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 (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++; |
| | | } |
| | | if (ALARM_PERCENT <= per) { |
| | | //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per); |
| | | m_recVec.push_back(obj.rect); |
| | | num++; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) |
| | | { |
| | | } else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) { |
| | | m_recVec.push_back(obj.rect); |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | switch (m_sdkRule.nSdkType) { |
| | | case PerimeterSdk: |
| | | //state = num > 0 ; |
| | | state =( num !=mRealNum); |
| | | // DBG("num="<<num<< "time="<< picDate); |
| | | state = (num != mRealNum); |
| | | // DBG("num="<<num<< "time="<< picDate); |
| | | |
| | | |
| | | break; |
| | | case CrowdSdk: |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num !=mRealNum; |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num != mRealNum; |
| | | |
| | | break; |
| | | case PerHubSdk: |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num !=mRealNum; |
| | | state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num != mRealNum; |
| | | |
| | | |
| | | // if(m_sdkRule.nAlarmNumLowerLimit>=0) |
| | |
| | | |
| | | m_triggerElement.setState(state); |
| | | m_triggerElement.triggerOnce(); |
| | | if (m_triggerElement.getTriggerState() ) |
| | | { |
| | | if(num > 0) { |
| | | if (m_triggerElement.getTriggerState()) { |
| | | if (num > 0) { |
| | | cv::Mat t_image = image(CutMask()).clone(); |
| | | if(t_image.empty()) |
| | | { |
| | | if (t_image.empty()) { |
| | | DBG("t_image empty"); |
| | | return; |
| | | } |
| | |
| | | void PerimeterElement::setMask(std::string mask) { |
| | | QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); |
| | | if (arrayAreas.isEmpty() && m_sdkRule.nSdkType != PerimeterSdk) { |
| | | m_bIsMask=false; |
| | | m_bIsMask = false; |
| | | return;//do not detect |
| | | } |
| | | int size = arrayAreas.size(); |
| | |
| | | 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)); |
| | | if (m_sdkRule.nSdkType == PerimeterSdk) { |
| | | poly1.push_back(Point(x, y)); |
| | | } else { |
| | | mPolygon << (QPoint(x, y)); |
| | | } |
| | | else |
| | | { |
| | | mPolygon << (QPoint(x, y)); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | CvUtil::cvMat2Buffer(image, buffer); |
| | | std::string strImgUrlTmp = ""; |
| | | fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); |
| | | // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); |
| | | // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); |
| | | strImgUrl.clear(); |
| | | strImgUrl = strImgUrlTmp; |
| | | // strImgUrl.append("/").append(strImgUrlTmp); |
| | |
| | | t_json["ChannlId"] = getProperty("ch_id"); // 通道id |
| | | t_json["likeDate"] = AppUtil::getTimeSecString(); // 比对时间 |
| | | t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 抓拍地址 |
| | | DBG("picAddress="<<m_sdkRule.strAddr.toStdString()); |
| | | DBG("picAddress=" << m_sdkRule.strAddr.toStdString()); |
| | | t_json["picMaxUrl"] = "wait todo"; // 大图路径 |
| | | |
| | | |
| | | // t_json["Age"] ="wait todo"; |
| | | t_json["picDate"] = time; // 抓拍时间,必须有 |
| | | DBG("picDate="<<time); |
| | | DBG("picDate=" << time); |
| | | t_json["picLocalUrl"] = "wait todo"; // 本地路径 |
| | | t_json["isDelete"] = "1";//默认1 ,0无效 1有效 |
| | | |
| | |
| | | // DBG("RECT x="<<rect.x<<"y"<<rect.y<<"w"<<rect.width<<"h"<<rect.height); |
| | | return rect; |
| | | } |
| | | bool PerimeterElement::isAnd() |
| | | { |
| | | |
| | | bool PerimeterElement::isAnd() { |
| | | |
| | | } |