From 1621a97f2bf85b53d40ae98fbc15b99239e1535f Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期六, 26 一月 2019 16:11:59 +0800
Subject: [PATCH] 人脸对比优化

---
 QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp |  121 +++++++++++++--------------------------
 1 files changed, 41 insertions(+), 80 deletions(-)

diff --git a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
index d094748..c8e3613 100644
--- a/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
+++ b/QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp
@@ -55,69 +55,13 @@
     t_live_ret = false;
 }
 
-//#todo 浼樺寲
+/***
+ * @dep
+ */
 ::FaceSearch::FaceResults
 FaceFeatureSearchServerI::faceSearchMax(const ::FaceSearch::Data &feature, const ::std::string &info_json,
                                         const ::Ice::Current &) {
-    thread::id key = std::this_thread::get_id();
-    ClockTimer clockTimer("faceSearchMax");
-    ::FaceSearch::FaceResults results;
-    FaceResults t_TableCompareResult;
-    AlarmData featureData;
-    featureData.num = 1;
-    featureData.feature.resize(feature.size());
-    memcpy(featureData.feature.data(), feature.data(), feature.size());
-
-    for (auto &it : m_faceFCMAP) {
-        auto &t_FaceFC = it.second;
-        auto t_tableInfo = m_tableType[it.first];
-        bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
-        if (ret) {
-            bool alarmRet = atoi(t_tableInfo.bwType.c_str());
-            //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
-            t_FaceFC->compare(key, &featureData, 1);
-            auto t_results = t_FaceFC->getTopResult(key);
-            for (auto &t_item : t_results) {
-                t_item.tableName = it.first;
-                //#todo baojing zhuangtai ?
-                t_item.alarmRet = ret;
-                t_TableCompareResult.push_back(t_item);
-            }
-        }
-    }
-
-//    DBG("t_TableCompareResult size" << t_TableCompareResult.size());
-    for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
-        float new_confidence = itor->confidence;
-        auto rtTR = results.rbegin();
-        if (!results.empty()) {
-            auto temp = rtTR->confidence;
-            while (new_confidence > temp) {
-                ++rtTR;
-                if (rtTR == (results.rend() + 1)) {
-                    rtTR--;
-                    break;
-                } else {
-//                    DBG(" sc is "<< new_confidence << "  > " << temp);
-                }
-                temp = rtTR->confidence;
-            }
-        } else {
-//            INFO("topResult is null");
-        }
-        auto itTR(rtTR.base());
-        ::FaceSearch::FaceResult t_faceCR;
-        t_faceCR.id = itor->id;
-        t_faceCR.uuid = itor->uuid;
-        t_faceCR.tableName = itor->tableName;
-        t_faceCR.confidence = itor->confidence;
-        DBG("compare results tablename is " << t_faceCR.tableName << " id is " << t_faceCR.uuid << " sc is"
-                                            << t_faceCR.confidence);
-        results.insert(itTR, t_faceCR);
-    }
-    //#todo send message
-
-    return results;
+    return ::FaceSearch::FaceResults();
 }
 
 //#todo 浼樺寲
@@ -126,9 +70,13 @@
                                          ::Ice::Int topN, ::Ice::Float score, const ::Ice::Current &) {
     ClockTimer clockTimer("faceSearchTopN  " + to_string(score) + "  :");
     INFO("faceSearchTopN start");
+//    #鑾峰彇绾跨▼id鍘绘壘璧勬簮鍙ユ焺
     thread::id key = std::this_thread::get_id();
+//    杩斿洖缁撴灉
     ::FaceSearch::FaceResults results;
+//    瀵规瘮缁撴灉鐨勪复鏃剁紦瀛�
     FaceResults t_TableCompareResult;
+//    闇�瑕佸姣旂殑鏁版嵁
     AlarmData featureData;
     featureData.num = topN;
     featureData.feature.resize(feature.size());
@@ -140,40 +88,49 @@
     if (reader.parse(info_json, value)) {
         //#todo
         m_rwLock.rdlock();
-        std::string feature_base64;
-        feature_base64 = base64.Encode(feature.data(), feature.size());
-        value["FaceFeature"] = feature_base64;
+//        寮�濮嬪姣�
         DBG("auto &it : m_faceFCMAP start " << m_faceFCMAP.size());
         //#todo lock
+//        閬嶅巻涓嶅悓鐨勫簳搴撶被#TODO鏄惁瑕佸仛涓�娆″ぇ鑼冨洿瀵规瘮鐒跺悗缁欏嚭缁撴灉鍐嶇瓫閫夛紵
         for (auto &it : m_faceFCMAP) {
             auto &t_FaceFC = it.second;
+//            琛ㄧ殑淇℃伅#TODO寰呯Щ鍑哄拰涓氬姟瑙h��
             auto t_tableInfo = m_tableType[it.first];
-            bool ret = getRet(t_tableInfo.startTime, t_tableInfo.endTime);
+//            鍒ゆ柇琛ㄧ殑鐢熸晥鐘舵�侊紝鍐冲畾鏄惁杩涜瀵规瘮/鏃堕棿鍜屽惎鐢ㄧ姸鎬�
+            bool ret = (t_tableInfo.enabled == "1" && getRet(t_tableInfo.startTime, t_tableInfo.endTime));
             if (ret) {
+//                闇�瑕佸姣�
+
+//                琛ㄧ殑绫诲瀷/榛戠櫧鍚嶅崟
                 string t_alarmRet = t_tableInfo.bwType;
 //                bool alarmRet = atoi(t_tableInfo.bwType.c_str());
                 //#todo 闈炲悓姝ュ簱鏄惁闇�瑕佹瘮杈冿紵
 
                 DBG("m_faceFCMAP compare start " << it.first);
+//                瀵规瘮鍑芥暟
                 t_FaceFC->compare(key, &featureData, topN);
                 DBG("m_faceFCMAP compare end " << it.first);
-
+//                鑾峰彇瀵规瘮缁撴灉
                 auto t_results = t_FaceFC->getTopResult(key);
+//                閬嶅巻缁撴灉骞舵坊鍔犺ˉ鍏呭瓧娈�
                 for (auto &t_item : t_results) {
                     t_item.tableName = it.first;
                     t_item.alarmRet = t_alarmRet;
+//                    鏀惧叆鏈浠诲姟鐨勫姣旂紦瀛�
                     t_TableCompareResult.push_back(t_item);
 //                    DBG("t_results item : uuid is " << t_item.uuid << " confidence " << t_item.confidence << it.first);
                 }
             } else {
+//                涓嶉渶瑕佸姣�
                 INFO("m_faceFCMAP ret is false " << it.first);
             }
         }
         m_rwLock.unlock();
         DBG("auto &it : m_faceFCMAP end");
-
+//        鏈浠诲姟鐨勫姣旂粨鏋滄暟閲�
         DBG("t_TableCompareResult size" << t_TableCompareResult.size());
         //sort_all_results
+//        鎵�鏈夎〃瀵规瘮缁撴潫鍚庯紝鎺掑簭鍙婄粨鏋滄牸寮忚浆鎹�
         for (auto itor = t_TableCompareResult.begin(); itor != t_TableCompareResult.end(); ++itor) {
             float new_confidence = itor->confidence;
             auto rtTR = results.rbegin();
@@ -206,19 +163,27 @@
             results.insert(itTR, t_faceCR);
         }
         bool retface = true;
-//        cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << results.size() << endl;
+
         //#todo send message
+//        鎷兼帴闇�瑕佸彂閫佺殑娑堟伅
+//        鐗瑰緛缂栫爜涓篵ase64鐢ㄤ簬涓婁紶锛�#todo 鎷嗚В鍒板闈㈠幓鍋�
+        std::string feature_base64;
+        feature_base64 = base64.Encode(feature.data(), feature.size());
         if (results.size() > 0) {
+//            鎵惧埌鐩镐技浜� 鍙兘瀵规瘮鍒嗘暟涓嶆弧瓒虫潯浠�
+//            #TODO澶氭潯瀵规瘮缁撴灉鎷兼帴鎴愪竴涓爣绛�
             for (auto &item : results) {
                 //#todo 寰楀垎姣旇緝锛屽簲璇ュ湪compare涓繘琛�
+//                灏忎簬鎸囧畾鐨勯槇鍊煎垯璁や负娌℃湁鎵惧埌鏄檶鐢熶汉
                 if (item.confidence < score) {
                     //#todo test
                     auto str_uuid = value["Id"].asString();
                     value["personIsHub"] = "4";
                     value["likePer"] = 0.0;
 //                    DBG(value.toStyledString());
-                    cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
-                         << value.toStyledString() << endl;
+                    DBG("value.toStyledString()  " << value.toStyledString());
+                    value["FaceFeature"] = feature_base64;
+
                     retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
                                                       str_uuid);
                     break;
@@ -239,14 +204,16 @@
                 value["personPicUrl"] = item.imgUrl.size() > 0 ? item.imgUrl : "";//diku tupian
                 value["idcard"] = item.idcard.size() > 0 ? item.idcard : "";//diku tupian
                 //濡傛灉 alarmRet 涓嶄负绌烘妸 浠栫殑鍊� 鏀惧叆 personIsHub,鍚﹀垯涓�4
+//                #TODO 濡傛灉鍚敤鍒欐甯稿垽鏂�,鏈竷鎺у垯璁や负鏄湭鐭ワ紵
+//                if () {
+//
+//                }
                 value["personIsHub"] = item.alarmRet.size() > 0 ? item.alarmRet : "4";
 
                 auto str_uuid = value["Id"].asString();
-//                DBG(value.toStyledString());
+                DBG("value.toStyledString()  " << value.toStyledString());
+                value["FaceFeature"] = feature_base64;
 
-                cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
-                     << value.toStyledString() << "\n score   " << score << endl;
-//                DBG("score  " << score);
                 retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
                                                   str_uuid);
                 break;
@@ -256,6 +223,7 @@
             value["personIsHub"] = "4";
             value["likePer"] = 0.0;
             DBG(value.toStyledString());
+            value["FaceFeature"] = feature_base64;
 //            cout << __FUNCTION__ << " -> " << __LINE__ << " ->  " << "value.toStyledString()  "
 //                 << value.toStyledString() << endl;
             retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", value.toStyledString(),
@@ -269,13 +237,6 @@
     } else {
         ERR("json is error" << info_json);
     }
-
-
-
-
-//    for (auto &item : t_tables) {
-//        DBG(item);
-//    }
     return results;
 }
 

--
Gitblit v1.8.0