From 114e9783e9b7ad0e12fe24415fe34d75ee4b4af7 Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期四, 24 一月 2019 13:42:28 +0800
Subject: [PATCH] test
---
QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 71 +++++++++++++++++++++++++++++++++--
1 files changed, 66 insertions(+), 5 deletions(-)
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
index d661aa0..3a4c807 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,17 @@
}
//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, 0),
+ appPref.getIntData("faceDete.port"), "tcp"),
+ m_triggerElement(0, 0),
// rpcClient("faceServer","",10002,"tcp"),
- sharedMemory(nullptr), trackingTrigger(nullptr) {
+ sharedMemory(nullptr),
+ trackingTrigger(nullptr),
+ m_sdkRule(rule),
+ m_bIsMask(true)
+{
sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str()));
if (!sharedMemory->create(4608 * 2592 * 4)) {
sharedMemory->attach();
@@ -55,13 +61,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 +87,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 +97,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 +105,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(m_bIsMask && !mPolygon.containsPoint(center,Qt::OddEvenFill))
+ {
+ return;
+ }
scoredRect.rect = {x, y, w, h};
scoredRect.score = (float) face.fAngle.confidence;
@@ -167,3 +183,48 @@
bool FaceRpcElement::getTriggerState() const {
return m_triggerElement.getTriggerState();
}
+void FaceRpcElement::setMask(std::string mask)
+{
+ QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask));
+ if(arrayAreas.isEmpty())
+ {
+ m_bIsMask=false;
+ 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