From d3b7bbe7102cd089680a828f5d8f6402c8cf6342 Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期四, 07 三月 2019 14:43:28 +0800 Subject: [PATCH] GB28181集成完成,集成推流模块 --- QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 100 ++++++++++++++++++++++++++++---------------------- 1 files changed, 56 insertions(+), 44 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp index 3a4c807..8ff149f 100644 --- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp +++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp @@ -6,6 +6,7 @@ #include <basic/util/opencv/CvUtil.h> #include <QJsonDocument> #include <QJsonObject> + #define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT); //************************************ @@ -30,7 +31,7 @@ } //todo appPref.getStringData("face.detect.proxy") -FaceRpcElement::FaceRpcElement(string shareMemoryName,const SdkRule& rule) : +FaceRpcElement::FaceRpcElement(string shareMemoryName, const SdkRule &rule) : //#todo rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getIntData("faceDete.port"), "tcp"), @@ -39,8 +40,8 @@ sharedMemory(nullptr), trackingTrigger(nullptr), m_sdkRule(rule), - m_bIsMask(true) -{ + m_bIsMask(true), + m_bSetWH(false) { sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); if (!sharedMemory->create(4608 * 2592 * 4)) { sharedMemory->attach(); @@ -49,26 +50,26 @@ // string t_camIdex = getProperty("dev_id"); //#todo - string t_camIdex; - if (shareMemoryName.find("/")) { - string_replace(shareMemoryName, "//", "/"); - auto dev_pos = shareMemoryName.find("/cut/") + 5; - auto ch_pos = shareMemoryName.find("/", dev_pos) + 1; - auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1); - auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos); - t_camIdex.append(str_device_id).append(str_ch_id); - } else { - t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc")); - } +// string t_camIdex; +// if (shareMemoryName.find("/")) { +// string_replace(shareMemoryName, "//", "/"); +// auto dev_pos = shareMemoryName.find("/cut/") + 5; +// auto ch_pos = shareMemoryName.find("/", dev_pos) + 1; +// auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1); +// auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos); +// t_camIdex.append(str_device_id).append(str_ch_id); +// } else { +// t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc")); +// } float t_score = m_sdkRule.nQuality; - DBG(" TESTCODE getValue" << t_camIdex << " " << t_score << " " << t_score / 100); + DBG(" TESTCODE getValue" << shareMemoryName << " " << t_score << " " << t_score / 100); t_score = t_score / 100; trackingTrigger = new TrackingTrigger(t_score); - setMask(m_sdkRule.strAreas.toStdString()); +// setMask(m_sdkRule.strAreas.toStdString()); } FaceRpcElement::~FaceRpcElement() { @@ -81,14 +82,17 @@ } void FaceRpcElement::threadFunc() { + INFO("MYH Run Here"); // ClockTimer ct("FaceRpcElement::threadFunc"); // { // // string string1(AppUtil::getTimeString() + "-ff2" + getProperty("time") + ".jpg"); // cv::imwrite(string1, image); // } - if(!isInWeek(m_sdkRule.weekRuleVec)) + if (!isInWeek(m_sdkRule.weekRuleVec)) { + ERR("In Week"); return; + } triggerMats.clear(); triggerFaces.clear(); triggerScoredRects.clear(); @@ -105,10 +109,10 @@ int y = face.rcFace.top; int w = face.rcFace.right - face.rcFace.left; int h = face.rcFace.bottom - face.rcFace.top; - QRect re(x,y,w,h); + QRect re(x, y, w, h); QPoint center = re.center(); - if(m_bIsMask && !mPolygon.containsPoint(center,Qt::OddEvenFill)) - { + if (m_bIsMask && !mPolygon.containsPoint(center, Qt::OddEvenFill)) { + ERR("m_bIsMask :" << m_bIsMask) return; } scoredRect.rect = {x, y, w, h}; @@ -124,14 +128,19 @@ trackingTrigger->getLastRect().properties["race"] = to_string(property.race); trackingTrigger->getLastRect().properties["time"] = getProperty("time"); trackingTrigger->getLastRect().properties["detectscore"] = scoredRect.score; - + trackingTrigger->getLastRect().properties["imgKey"] = getProperty("imgKey"); + INFO("FaceRpcElement SaveToES: " << getProperty("imgKey")); triggerFaces.push_back(face); triggerMats.push_back(image( CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone()); triggerScoredRects.push_back(trackingTrigger->getLastRect()); } else { + INFO("No Face Find: " << getProperty("imgKey")); // DBG("trackingTrigger->triggerOnce(scoredRect) is false "); } + } + if (faces.empty()) { + INFO("No Face Find: " << getProperty("imgKey")); } trackingTrigger->triggerLine(); // DBG("faces.size " << faces.size()); @@ -178,51 +187,54 @@ image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); } value.copyTo(image); + if (!m_bSetWH) { + setMask(m_sdkRule.strAreas.toStdString()); + m_bSetWH = true; + } } bool FaceRpcElement::getTriggerState() const { return m_triggerElement.getTriggerState(); } -void FaceRpcElement::setMask(std::string mask) -{ + +void FaceRpcElement::setMask(std::string mask) { QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); - if(arrayAreas.isEmpty()) - { - m_bIsMask=false; + if (arrayAreas.isEmpty()) { + m_bIsMask = false; return;//do not detect } - for(int i = 0;i < arrayAreas.size();++i) - { + float sizeW = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "width") / 480; + float sizeH = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "height") / 270; + for (int i = 0; i < arrayAreas.size(); ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); - int x = obj.value("x").toDouble()*4; - int y = obj.value("y").toDouble()*4; - mPolygon<<(QPoint(x,y)); + int x = obj.value("x").toDouble() * sizeW; + int y = obj.value("y").toDouble() * sizeH; + mPolygon << (QPoint(x, y)); + DBG("width=" << sizeW); + DBG("height=" << sizeH); } } -QJsonArray FaceRpcElement::getJsonArrayFromQString(const QString& strJson) -{ + +QJsonArray FaceRpcElement::getJsonArrayFromQString(const QString &strJson) { QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit()); - if( jsonDocument.isNull() ){ - DBG("please check the string"<< strJson.toStdString()); + if (jsonDocument.isNull()) { + DBG("please check the string" << strJson.toStdString()); return QJsonArray(); } QJsonArray jsonArray = jsonDocument.array(); return jsonArray; } -bool FaceRpcElement::isInWeek(const std::vector<LActRuleWeekRecord>& ruleWeek) -{ + +bool FaceRpcElement::isInWeek(const std::vector<LActRuleWeekRecord> &ruleWeek) { int nWeek = QDate::currentDate().dayOfWeek(); - for(int i = 0;i < ruleWeek.size();++i) - { - if(ruleWeek[i].m_nType == nWeek) - { + for (int i = 0; i < ruleWeek.size(); ++i) { + if (ruleWeek[i].m_nType == nWeek) { QString strCurrent = QDateTime::currentDateTime().toString("hh:mm"); - if(strCurrent >= ruleWeek[i].m_strBegin && strCurrent <= ruleWeek[i].m_strEnd) - { - return true; + if (strCurrent >= ruleWeek[i].m_strBegin && strCurrent <= ruleWeek[i].m_strEnd) { + return true; } } } -- Gitblit v1.8.0