From 29065df908aee41ab673cfc78a0d657e3063d5ef Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期六, 12 一月 2019 15:30:49 +0800
Subject: [PATCH] Merge branch 'ywv1.2_yolodebug'

---
 QiaoJiaSystem/StructureApp/FaceRpcElement.cpp |   70 ++++++++++++++++++++++++++++++++--
 1 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
index ccee428..d717f97 100644
--- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
@@ -4,7 +4,8 @@
 #include <QtCore/QString>
 #include <basic/timer_counter/Clocktimer.h>
 #include <basic/util/opencv/CvUtil.h>
-
+#include <QJsonDocument>
+#include <QJsonObject>
 #define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT);
 
 //************************************
@@ -29,12 +30,16 @@
 }
 
 //todo  appPref.getStringData("face.detect.proxy")
-FaceRpcElement::FaceRpcElement(string shareMemoryName) :
+FaceRpcElement::FaceRpcElement(string shareMemoryName,const SdkRule& rule) :
 //#todo
     rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"),
-              appPref.getIntData("faceDete.port"), "tcp"), m_triggerElement(0, 50),
+              appPref.getIntData("faceDete.port"), "tcp"),
+    m_triggerElement(0, 0),
 //    rpcClient("faceServer","",10002,"tcp"),
-    sharedMemory(nullptr), trackingTrigger(nullptr) {
+    sharedMemory(nullptr),
+    trackingTrigger(nullptr),
+    m_sdkRule(rule)
+{
     sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
     if (!sharedMemory->create(4608 * 2592 * 4)) {
         sharedMemory->attach();
@@ -55,13 +60,14 @@
         t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc"));
     }
 
-    float t_score = GETSCORE(t_camIdex + "face.det");
+    float t_score = m_sdkRule.nQuality;
 
     DBG(" TESTCODE  getValue" << t_camIdex << "  " << t_score << " " << t_score / 100);
 
     t_score = t_score / 100;
 
     trackingTrigger = new TrackingTrigger(t_score);
+    setMask(m_sdkRule.strAreas.toStdString());
 }
 
 FaceRpcElement::~FaceRpcElement() {
@@ -80,6 +86,8 @@
 //        string string1(AppUtil::getTimeString() + "-ff2" + getProperty("time") + ".jpg");
 //        cv::imwrite(string1, image);
 //    }
+    if(!isInWeek(m_sdkRule.weekRuleVec))
+        return;
     triggerMats.clear();
     triggerFaces.clear();
     triggerScoredRects.clear();
@@ -88,6 +96,7 @@
         if (!server) ERR("server is null");
         faces = server->faceDetect(image.cols, image.rows, sharedMemory->key().toStdString());
 //        DBG("faces.size  " << faces.size());
+
         for (auto face: faces) {
             ::FaceDetect::RECT &rect = face.rcFace;
             ScoredRect scoredRect;
@@ -95,6 +104,12 @@
             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);
+            QPoint center = re.center();
+            if(!mPolygon.containsPoint(center,Qt::OddEvenFill))
+            {
+                return;
+            }
             scoredRect.rect = {x, y, w, h};
             scoredRect.score = (float) face.fAngle.confidence;
 
@@ -107,6 +122,7 @@
                 trackingTrigger->getLastRect().properties["smile"] = to_string(property.smile_level);
                 trackingTrigger->getLastRect().properties["race"] = to_string(property.race);
                 trackingTrigger->getLastRect().properties["time"] = getProperty("time");
+                trackingTrigger->getLastRect().properties["detectscore"] = scoredRect.score;
 
                 triggerFaces.push_back(face);
                 triggerMats.push_back(image(
@@ -166,3 +182,47 @@
 bool FaceRpcElement::getTriggerState() const {
     return m_triggerElement.getTriggerState();
 }
+void FaceRpcElement::setMask(std::string mask)
+{
+    QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask));
+    if(arrayAreas.isEmpty())
+    {
+        return;//do not detect
+    }
+    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));
+
+    }
+}
+QJsonArray FaceRpcElement::getJsonArrayFromQString(const QString& strJson)
+{
+    QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit());
+    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)
+{
+
+    int nWeek = QDate::currentDate().dayOfWeek();
+    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;
+            }
+        }
+    }
+    return false;
+}

--
Gitblit v1.8.0