From efafab5273ba3ff13a19f07088c320a5180188b6 Mon Sep 17 00:00:00 2001
From: pans <pansen626@sina.com>
Date: 星期四, 31 一月 2019 10:49:56 +0800
Subject: [PATCH] 1.2_布控feature: Auto stash before merge of "ywv1.2_布控feature" and "origin/ywv1.2_布控feature"
---
QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp | 197 +++++++++++++++++++------------------------------
1 files changed, 76 insertions(+), 121 deletions(-)
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
index 4cab786..9d22dcf 100644
--- a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
@@ -45,7 +45,7 @@
m_dbRWLocks[key] = RWLock();
}
RWLock &t_rwl = m_dbRWLocks[key];
- t_rwl.wrlock();
+// t_rwl.wrlock();
FaceResults t_result = topResult[key];
topResult.erase(key);
t_rwl.unlock();
@@ -53,64 +53,41 @@
}
//#todo map 1->2 modify 2->1
-bool FaceDBCompareServer::compare(thread::id key, AlarmData *alarmData, int topN) {
+bool FaceDBCompareServer::compare(thread::id key, AlarmData *alarmData, int topN, float score) {
if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
m_dbRWLocks[key] = RWLock();
}
+// 閿佷换鍔$殑瀵规瘮缁撴灉
RWLock &t_rwl = m_dbRWLocks[key];
// ClockTimer clockTimer("compare ");
RWLock t_rwLock;
m_rwLock.rdlock();
mapFaceResults t_compareResults;
- if (topN > 1) {
- //topN
- parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
- //#todo
- double sc = 0;
- for (auto &t_fea : data.features) {
- double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
- if (t_sc > sc)
- sc = t_sc;
- }
+
+ parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
+ //#todo
+ double sc = 0;
+ for (auto &t_fea : data.features) {
+ double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
+// 鑾峰彇褰撳墠瀵规瘮鐨勬渶楂樺垎锛�
+ sc = t_sc > sc ? t_sc : sc;
+ }
// FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, false};
- FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
- t_rwLock.wrlock();
- //#todo
- if (sc < t_compareResults.end()->second.confidence) {
- t_rwLock.unlock();
- return;
- }
- t_compareResults.insert(make_pair(tface.confidence, tface));
- //#todo 10
- if (t_compareResults.size() > topN) {
- t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
- }
+ FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, "", data.enabled};
+ t_rwLock.wrlock();
+// 濡傛灉褰撳墠璁板綍鐨勬墍鏈夌壒寰佺殑鏈�楂樺垎灏忎簬缁撴灉涓殑鏈�浣庡垎鍒欎笉淇濆瓨
+ if (sc < score || sc < t_compareResults.end()->second.confidence) {
t_rwLock.unlock();
- });
- } else {
- //Max
- float maxScore = 0;
- parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
- //#todo
- double sc = 0;
- for (auto &t_fea : data.features) {
- double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
- if (t_sc > sc) sc = t_sc;
- }
- FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
- t_rwLock.wrlock();
- if (sc < maxScore) {
- t_rwLock.unlock();
- return;
- } else {
- t_compareResults.clear();
- t_compareResults.insert(make_pair(tface.confidence, tface));
- maxScore = t_compareResults.begin()->second.confidence;
- }
- t_rwLock.unlock();
- });
- }
+ return;
+ }
+ t_compareResults.insert(make_pair(tface.confidence, tface));
+ if (topN != 0 && t_compareResults.size() > topN) {
+ t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
+ }
+ t_rwLock.unlock();
+ });
+
m_rwLock.unlock();
int maxSearchFaces = alarmData->num;
@@ -124,58 +101,15 @@
// if (it.confidence <= 0.6) {
// continue;
// }
- FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
+ FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet,
+ it.enabled};
//cout << __FUNCTION__ << " -> " << __LINE__ << " -> scroe" << it.confidence << endl;
t_topResult.push_back(t_CR);
}
while (topResult.size() > maxSearchFaces)
t_topResult.pop_back();
- t_rwl.unlock();
- return true;
-}
-
-bool FaceDBCompareServer::compare(std::thread::id key, AlarmData *alarmData) {
- if (m_dbRWLocks.find(key) == m_dbRWLocks.end()) {
- m_dbRWLocks[key] = RWLock();
- }
- RWLock &t_rwl = m_dbRWLocks[key];
-// ClockTimer clockTimer("compare ");
- t_rwl.wrlock();
- RWLock t_rwLock;
- mapFaceResults t_compareResults;
- m_rwLock.rdlock();
- parallelFor(ParallelForThreardSize::CPU_Number, [&](string &key, FeatureData &data) {
- double sc = 0;
- for (auto &t_fea : data.features) {
- double t_sc = m_casiaFaceWapper.compareFeature(alarmData->feature, t_fea);
- if (t_sc > sc)sc = t_sc;
- }
- FaceResult tface{data.face_id, data.uuid, alarmData->tableName, sc, data.faceUrl, data.idcard, ""};
-// FaceResult tface{0, data.uuid, alarmData->tableName, sc, data.faceUrl,false};
- t_rwLock.wrlock();
- if (sc < alarmData->threshold) {
- t_rwLock.unlock();
- DBG("return");
- return;
- }
- if (t_compareResults.size() > alarmData->num) {
- t_compareResults.erase((--t_compareResults.end()), t_compareResults.end());
- }
- t_compareResults.insert(make_pair(tface.confidence, tface));
- t_rwLock.unlock();
- });
- m_rwLock.unlock();
- int maxSearchFaces = alarmData->num;
- auto &t_topResult = topResult[key];
- t_topResult.clear();
- for (auto &item : t_compareResults) {
- auto &it = item.second;
- FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, it.idCard, it.alarmRet};
-// FaceResult t_CR{it.id, it.uuid, it.tableName, it.confidence, it.face_img_url, ""};
- t_topResult.push_back(t_CR);
- }
-// while (t_topResult.size() > maxSearchFaces)
-// t_topResult.pop_back();
+// 鑾峰彇缁撴灉鍚庨噴鏀�
+// t_rwl.unlock();
return true;
}
@@ -191,46 +125,64 @@
m_rwLock.wrlock();
if (t_json["\"syncTpye\""].type() == Json::nullValue) {
+// 鍚屾搴�/鐗瑰緛鏄痓ase64
+// #todo sqlite search data from file
auto str_tab = t_json["\"tableName\""].asString();
m_tableName = str_tab.substr(1, str_tab.length() - 2);//.append("_fea");
- string tet = "./syncDBClient ";
- string str_json = writer.write(t_json);
- tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
- INFO(tet);
- system(tet.c_str());
+
+
+// string tet = "./syncDBClient ";
+// string str_json = writer.write(t_json);
+// tet.append("\"" + str_json.substr(0, str_json.length() - 1) + "\" ");
+// INFO(tet);
+// system(tet.c_str());
dataMap.clear();
try {
// init
- BISTL::BiMapFeaData biMapFeaData(m_tableName);
- auto mymap = biMapFeaData.getMap();
- auto size = mymap->size();
- //#todo
- for (auto it = mymap->begin(); it != mymap->end(); it++) {
- string str_uuid(it->second.m_id.data());
- string ft(it->second.m_feature.data());
- string imgUrl(it->second.m_imgUrl.data());
- string strIdCard(it->second.m_idcard.data());
+// BISTL::BiMapFeaData biMapFeaData(m_tableName);
+// auto mymap = biMapFeaData.getMap();
+
+ auto mymap = m_erlangDbTool->loadFaceFeaData(m_tableName);
+ for (auto &item : mymap) {
+ auto &it = item.second;
string str2;
- str2 = base64.Decode(ft.data(), ft.length());
+ str2 = base64.Decode(it.feature.data(), it.feature.size());
std::vector<unsigned char> t_fea;
t_fea.resize(str2.size());
memcpy(t_fea.data(), str2.data(), str2.size());
- auto &test = dataMap[str_uuid];
- test.uuid = str_uuid;
+ auto &test = dataMap[it.id];
+ test.uuid = it.id;
test.features.push_back(t_fea);
- test.faceUrl = imgUrl;
- test.idcard = strIdCard;
+ test.faceUrl = it.img;
+ test.idcard = it.idcard;
+ test.enabled = it.enable;
+ test.monLevel = it.monLevel;
}
+// //#todo
+// for (auto it = mymap->begin(); it != mymap->end(); it++) {
+// string str_uuid(it->second.m_id.data());
+// string ft(it->second.m_feature.data());
+// string imgUrl(it->second.m_imgUrl.data());
+// string strIdCard(it->second.m_idcard.data());
+// string str2;
+// str2 = base64.Decode(ft.data(), ft.length());
+// std::vector<unsigned char> t_fea;
+// t_fea.resize(str2.size());
+// memcpy(t_fea.data(), str2.data(), str2.size());
+// auto &test = dataMap[str_uuid];
+// test.uuid = str_uuid;
+// test.features.push_back(t_fea);
+// test.faceUrl = imgUrl;
+// test.idcard = strIdCard;
+// }
} catch (const std::exception &e) {
printf("Exception:%s\n", e.what());
- BISTL::shared_memory_object::remove(m_tableName.c_str());
+// BISTL::shared_memory_object::remove(m_tableName.c_str());
}
- BISTL::shared_memory_object::remove(m_tableName.c_str());
- appPref.setIntData(m_tableName, 1);
- DBG(m_tableName << " size is " << dataMap.size());
+// BISTL::shared_memory_object::remove(m_tableName.c_str());
} else {
- //#todo get sqlite3 data
+// 鏈湴搴�/鐗瑰緛鏄痓lob
m_tableName = t_json["tableName"].asCString();
auto t_res = m_sqliteFaceEncap->getFacesFromTable(m_tableName);
auto t_faceInfoCache = m_sqliteFaceEncap->getFaceInfoFromTable(m_tableName);
@@ -249,10 +201,13 @@
test.features.push_back(t_fea);
test.faceUrl = t_sen.faceurl;
test.idcard = t_faceInfoCache[t_sen.uuid].idCard;
+ test.enabled = t_sen.enable;
+ test.monLevel = t_faceInfoCache[t_sen.uuid].monLevel;
}
- appPref.setIntData(m_tableName, 1);
- DBG(m_tableName << " size is " << dataMap.size());
}
+// 鍛婅瘔鍒锋柊鍑芥暟锛屽綋鍓嶅簳搴撶殑鏁版嵁鍑嗗瀹屾垚
+ appPref.setIntData(m_tableName, 1);
+ DBG(m_tableName << " size is " << dataMap.size());
m_rwLock.unlock();
} else {
ERR("json format error :: " << str_config);
--
Gitblit v1.8.0