From f676f7af18163b4532b6b982bbe1dc57b32e96dd Mon Sep 17 00:00:00 2001 From: zhangjixing <775834166@qq.com> Date: 星期四, 24 一月 2019 15:38:22 +0800 Subject: [PATCH] --- QiaoJiaSystem/StructureApp/PerimeterElement.cpp | 180 ++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 144 insertions(+), 36 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp index 27d4716..c081c6b 100644 --- a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp +++ b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp @@ -13,14 +13,17 @@ #include <uuid/uuid.h> #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(0, rule.nTriggerDelay * 1000 * 1000), + m_triggerElement(rule.nTriggerDelay*8,0), pManagerEsDB(nullptr), - npts(0) { + m_bIsMask(true), + pointArray(nullptr) +{ pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); } @@ -29,6 +32,11 @@ if (pManagerEsDB) { delete pManagerEsDB; pManagerEsDB = nullptr; + } + if(pointArray) + { +// delete[] pointArray[0]; + delete[] pointArray; } } @@ -40,6 +48,7 @@ void PerimeterElement::threadFunc() { + //ClockTimer ct("PerimeterElement::threadFunc"); if (!isInWeek(m_sdkRule.weekRuleVec)) return; int num = 0; @@ -55,37 +64,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_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 if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) + { + m_recVec.push_back(obj.rect); + + + num++; + } + } switch (m_sdkRule.nSdkType) { case PerimeterSdk: - state = num > 0 && num != mRealNum; + //state = num > 0 ; + 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; -// 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); @@ -113,21 +157,64 @@ default: break; } + m_triggerElement.setState(state); + m_triggerElement.triggerOnce(); + if (m_triggerElement.getTriggerState() ) + { + if(num > 0) { - // DBG("imgUrl="<<imgUrl); - if (state) { - auto t_image = image(CutMask()).clone(); - std::string imgUrl = uploadImgToFdfs(t_image); - saveInfoToEs(imgUrl, picDate); + + + if(pointArray!=nullptr) + { + const cv::Point2i* ppt[1] = { pointArray }; + + int npt[]={npts}; + + cv::polylines(image, ppt,npt, 1, true,cv::Scalar(255,255,0)); + } + + for(auto rect:m_recVec) + { + cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2); + } +// cv::Mat t_image = image(CutMask()).clone(); +// if(t_image.empty()) +// { +// DBG("t_image empty"); +// return; +// } + std::string imgUrl = uploadImgToFdfs(image); + saveInfoToEs(imgUrl, picDate); + } DBG("num=" << num << " lastnum=" << mRealNum); - + mRealNum = num; } +// if (m_triggerElement.getTriggerState() && num!=mRealNum) +// { - m_triggerElement.triggerOnce(); +// 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; +// } - mRealNum = num; + + +// if(!state) +// { +// mRealNum = num; +// } + + // DBG("m_sdkRule.nSdkType="<<m_sdkRule.nSdkType<<" num="<<num); fireConnectors(); } @@ -164,11 +251,18 @@ void PerimeterElement::setMask(std::string mask) { QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); - if (arrayAreas.isEmpty()) { + if (arrayAreas.isEmpty() && m_sdkRule.nSdkType != PerimeterSdk) { + m_bIsMask=false; return;//do not detect } int size = arrayAreas.size(); npts = size; +// pointArray=new cv::Point2i*[1]; +// pointArray[0]=new cv::Point2i[size]; + + pointArray=new cv::Point2i[npts]; + + for (int i = 0; i < size; ++i) { QJsonValue jsonValue = arrayAreas[i]; @@ -176,7 +270,19 @@ int x = obj.value("x").toDouble() * 4; int y = obj.value("y").toDouble() * 4; - mPolygon << (QPoint(x, y)); + pointArray[i]={x,y}; + + + if(m_sdkRule.nSdkType == PerimeterSdk) + { + poly1.push_back(Point(x,y)); + } + else + { + mPolygon << (QPoint(x, y)); + } + + } } @@ -210,7 +316,7 @@ 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); @@ -238,36 +344,37 @@ // DBG("to_string(m_sdkRule.nSdkType)="<<to_string(m_sdkRule.nSdkType)); // t_json["Gender"] = obj.score; - t_json["picName"] = "wait todo";// 鎶撴媿鐓х墖鍚嶇О - t_json["content"] = "wait todo";// 鍐呭鎻忚堪 + t_json["picName"] = "";// 鎶撴媿鐓х墖鍚嶇О + t_json["content"] = "";// 鍐呭鎻忚堪 t_json["personPicUrl"] = "";// 浜哄憳 鍦板簱鍥剧墖 t_json["ChannlId"] = getProperty("ch_id"); // 閫氶亾id t_json["likeDate"] = AppUtil::getTimeSecString(); // 姣斿鏃堕棿 - t_json["picAddress"] = getProperty("str_addr");// 鎶撴媿鍦板潃 - t_json["picMaxUrl"] = "wait todo"; // 澶у浘璺緞 + t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 鎶撴媿鍦板潃 + DBG("picAddress="<<m_sdkRule.strAddr.toStdString()); + t_json["picMaxUrl"] = ""; // 澶у浘璺緞 // t_json["Age"] ="wait todo"; t_json["picDate"] = time; // 鎶撴媿鏃堕棿锛屽繀椤绘湁 - // DBG("picDate="<<time); - t_json["picLocalUrl"] = "wait todo"; // 鏈湴璺緞 + DBG("picDate="<<time); + t_json["picLocalUrl"] = ""; // 鏈湴璺緞 t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥 - t_json["likePer"] = "0"; // 鐩镐技鍊� + t_json["likePer"] = 1.0; // 鐩镐技鍊� - t_json["BaseName"] = "wait todo";// 鍦板簱鍚嶇О + t_json["BaseName"] = "";// 鍦板簱鍚嶇О t_json["videoNum"] = m_sdkRule.strCamId.toStdString();//Video璁惧缂栧彿 t_json["picSmUrl"] = imgUrl; // 鎶撴媿鍥剧墖 t_json["indeviceid"] = appPref.getStringData("fxDevID");;// 璁惧id - t_json["idcard"] = "wait todo"; - t_json["personId"] = "wait todo"; + t_json["idcard"] = ""; + t_json["personId"] = ""; t_json["indevicename"] = appPref.getStringData("fxDevNAME");// 璁惧鍚嶇О t_json["FaceFeature"] = "base64"; t_json["personIsHub"] = m_triggerElement.getTriggerState() ? "1" : "4"; //1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 t_json["videoIp"] = m_sdkRule.strAddr.toStdString(); // 璁惧ip t_json["ack_alarm"] = m_triggerElement.getTriggerState() ? "0" : ""; // que ren shi fou bao jing - t_json["cluster_id"] = "wait todo"; // ji qun id + t_json["cluster_id"] = appPref.getStringData("clusterID");; // ji qun id bool retface = false; if (pManagerEsDB) @@ -341,3 +448,4 @@ // DBG("RECT x="<<rect.x<<"y"<<rect.y<<"w"<<rect.width<<"h"<<rect.height); return rect; } + -- Gitblit v1.8.0