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

---
 QiaoJiaSystem/build/EncodeServer                             |    0 
 QiaoJiaSystem/EncodeServer/CMakeLists.txt                    |   21 +-
 QiaoJiaSystem/build/RapidStructureApp                        |    0 
 QiaoJiaSystem/build/FaceSearchServer                         |    0 
 QiaoJiaSystem/FaceSearchServer/FaceFeatureSearchServerI.cpp  |  121 +++++-----------
 QiaoJiaSystem/build/syncDBClient                             |    0 
 syncDBTool/ErlangDbTool.cpp                                  |    6 
 QiaoJiaSystem/build/DataWebServer                            |    0 
 QiaoJiaSystem/build/RecordVideo                              |    0 
 syncDBTool/SyncDB.hpp                                        |    7 +
 QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp                  |    3 
 QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp               |    3 
 QiaoJiaSystem/build/YoloServer                               |    0 
 QiaoJiaSystem/build/YoloDetectClientTest                     |    0 
 QiaoJiaSystem/build/FaceDetectServer                         |    0 
 QiaoJiaSystem/build/RapidStructureAppRtsp                    |    0 
 QiaoJiaSystem/build/FaceDetectResourcesTest                  |    0 
 QiaoJiaSystem/build/FaceExtractServer                        |    0 
 QiaoJiaSystem/FaceSearchServer/CMakeLists.txt                |    5 
 QiaoJiaSystem/build/VideoAnalysFromHC                        |    0 
 QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp                |    3 
 QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp       |  194 ++++++++++-----------------
 QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp |    1 
 QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h         |    5 
 QiaoJiaSystem/build/StructureApp                             |    0 
 25 files changed, 145 insertions(+), 224 deletions(-)

diff --git a/QiaoJiaSystem/EncodeServer/CMakeLists.txt b/QiaoJiaSystem/EncodeServer/CMakeLists.txt
index 146deb4..d9afd54 100644
--- a/QiaoJiaSystem/EncodeServer/CMakeLists.txt
+++ b/QiaoJiaSystem/EncodeServer/CMakeLists.txt
@@ -56,12 +56,10 @@
     ../../../BasicPlatForm/basic/pipe/
 
 
-
     ../../../BasicPlatForm/libs/opencv/include
 
     ../../../BasicPlatForm/libs/ffmpeg/include
     ../../../BasicPlatForm/libs/jsoncpp/include
-
 
 
     /usr/include/x86_64-linux-gnu/qt5
@@ -77,22 +75,23 @@
     ../../../BasicPlatForm/libs/openssl/lib
     ../../../BasicPlatForm/libs/opencv/lib
     ../../../BasicPlatForm/libs/ffmpeg/lib
-#    ../../../BasicPlatForm/libs/jsoncpp/lib
+    #    ../../../BasicPlatForm/libs/jsoncpp/lib
 
-#    ../../../BasicPlatForm/libs/libuuid/lib
+    #    ../../../BasicPlatForm/libs/libuuid/lib
 
 
     ../../BasicPlatForm/libs/hiredis-master/lib
 )
 
 add_executable(${PROJECT_NAME}
-      ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
-       ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
-       ../StructureApp/NewRecordVideoElement.cpp
-       EncodeVideoManager.cpp
-       EncodeVideo.cpp
-       ../StructureApp/HiredisTool.cpp
-       main.cpp
+    ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp
+    ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp
+    ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp
+    ../StructureApp/NewRecordVideoElement.cpp
+    EncodeVideoManager.cpp
+    EncodeVideo.cpp
+    ../StructureApp/HiredisTool.cpp
+    main.cpp
     )
 target_link_libraries(${PROJECT_NAME}
     ${LIBS}
diff --git a/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
index 1fe1b9c..2de5947 100644
--- a/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
+++ b/QiaoJiaSystem/FaceSearchServer/AlarmServer.hpp
@@ -27,6 +27,7 @@
     std::vector<std::vector<unsigned char>> features;
     std::string faceUrl;
     std::string idcard;
+    std::string enabled;
 };
 
 static std::vector<std::string> AlarmServerPropertyAnalyseByComma(std::string str_list) {
@@ -100,7 +101,7 @@
 
     //m_dbReady is false return,true go on
     //use parallelFor
-    virtual bool compare(std::thread::id key, AlarmData *, int topN) = 0;
+    virtual bool compare(std::thread::id key, AlarmData *, int topN, float score) = 0;
 
 private:
     //init data,this is thread body
diff --git a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
index f214035..e1e7212 100644
--- a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
+++ b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt
@@ -89,7 +89,6 @@
 add_executable(${PROJECT_NAME}
     main.cpp
     rpc/FaceSearchServer.cpp
-    FaceSearchServerResources.cpp
     FaceFeatureSearchServerI.cpp
     FaceFeatureSearchServerI.h
     CasiaFaceWrapper/CasiaFaceWrapperN.cpp
@@ -107,15 +106,13 @@
 
     ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp
 
+    #todo file path error
     ../LocalDBTool/SqliteFaceEncap.cpp
     ../../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.cpp
     ../../../BasicPlatForm/basic/db/sqlite/sqliteEncapsulation.h
 
-    #    ../../BasicPlatForm/basic/util/ShareMemory/SemTool.cpp
 
     ../../syncDBTool/ErlangDbTool.cpp
-    #    ../../../Erlang/syncDBTool/ShareMemoryTool.hpp
-    #    ../../../Erlang/syncDBTool/SyncDB.hpp
     )
 
 target_link_libraries(${PROJECT_NAME}
diff --git a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
index 926dafa..8124abd 100644
--- a/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
+++ b/QiaoJiaSystem/FaceSearchServer/CasiaFaceWrapper/FaceData.hpp
@@ -32,6 +32,7 @@
     std::string face_img_url;
     std::string idCard;
     std::string alarmRet;
+    std::string enabled;
 };
 
 struct DbAction {
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.cpp
index 4cab786..f592c31 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,62 @@
 
         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;
                 }
+//                //#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 +199,12 @@
                 test.features.push_back(t_fea);
                 test.faceUrl = t_sen.faceurl;
                 test.idcard = t_faceInfoCache[t_sen.uuid].idCard;
+                test.enabled = t_sen.enable;
             }
-            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);
diff --git a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
index 7940970..492fbbf 100644
--- a/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
+++ b/QiaoJiaSystem/FaceSearchServer/FaceDBCompareServer.h
@@ -27,9 +27,7 @@
 
     ~FaceDBCompareServer();
 
-    virtual bool compare(std::thread::id key, AlarmData *alarmData, int topN);
-
-    bool compare(std::thread::id key, AlarmData *alarmData);
+    virtual bool compare(std::thread::id key, AlarmData *alarmData, int topN, float score = 0.0);
 
     FaceResults getTopResult(std::thread::id key);
 
@@ -41,6 +39,7 @@
     std::string m_tableName;
 
     int fea_size;
+//    閿佹暟鎹埛鏂�
     RWLock m_rwLock;
     std::mutex topResultMtx;
     std::map<std::thread::id, FaceResults> topResult;
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;
 }
 
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
index a3d7d54..589c81e 100644
--- a/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
+++ b/QiaoJiaSystem/LocalDBTool/SqliteFaceEncap.cpp
@@ -346,6 +346,7 @@
                 memcpy(t_feas.faceFeature.data(), t_fea.data(), t_fea.size());
 //            string create_time = query.value(2).toString().toStdString();
                 t_feas.faceurl = query.value(3).toString().toStdString();
+                t_feas.enable = query.value(5).toString().toStdString();
             }
         }
     }
@@ -380,7 +381,7 @@
             tableInfo.cmpThreshold = query.value(7).toString().toStdString();
             tableInfo.enabled = query.value(8).toString().toStdString();
             tableInfo.createBy = query.value(9).toString().toStdString();
-            
+
             tableInfos.push_back(tableInfo);
         }
     }
diff --git a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
index 4dac82e..6e2ed40 100644
--- a/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
+++ b/QiaoJiaSystem/LocalDBTool/SqliteToolkit.hpp
@@ -65,6 +65,7 @@
     std::string uuid;
     std::string faceurl;
     FaceFeature faceFeature;
+    std::string enable;
 };
 
 typedef std::map<std::string, FaceFeatureWithUrl> FeatureDBWithUrlCache;
@@ -86,7 +87,7 @@
     //
     std::string getFacesFromTableSql(std::string tableName) {
         std::string sql =
-            "select uuid,feature,create_time,faceUrl,del_flag from '" + tableName +
+            "select uuid,feature,create_time,faceUrl,del_flag,enabled from '" + tableName +
             "_fea' where feature is not null ";
         return sql;
     }
diff --git a/QiaoJiaSystem/build/DataWebServer b/QiaoJiaSystem/build/DataWebServer
index 9ba984c..1095109 100755
--- a/QiaoJiaSystem/build/DataWebServer
+++ b/QiaoJiaSystem/build/DataWebServer
Binary files differ
diff --git a/QiaoJiaSystem/build/EncodeServer b/QiaoJiaSystem/build/EncodeServer
index ea46651..82bb484 100755
--- a/QiaoJiaSystem/build/EncodeServer
+++ b/QiaoJiaSystem/build/EncodeServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceDetectResourcesTest b/QiaoJiaSystem/build/FaceDetectResourcesTest
index 1afe23e..53d7966 100755
--- a/QiaoJiaSystem/build/FaceDetectResourcesTest
+++ b/QiaoJiaSystem/build/FaceDetectResourcesTest
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceDetectServer b/QiaoJiaSystem/build/FaceDetectServer
index 8822702..3ae6207 100755
--- a/QiaoJiaSystem/build/FaceDetectServer
+++ b/QiaoJiaSystem/build/FaceDetectServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceExtractServer b/QiaoJiaSystem/build/FaceExtractServer
index 3dcfee4..4b1465d 100755
--- a/QiaoJiaSystem/build/FaceExtractServer
+++ b/QiaoJiaSystem/build/FaceExtractServer
Binary files differ
diff --git a/QiaoJiaSystem/build/FaceSearchServer b/QiaoJiaSystem/build/FaceSearchServer
index 3953b34..c0ed347 100755
--- a/QiaoJiaSystem/build/FaceSearchServer
+++ b/QiaoJiaSystem/build/FaceSearchServer
Binary files differ
diff --git a/QiaoJiaSystem/build/RapidStructureApp b/QiaoJiaSystem/build/RapidStructureApp
index 8e421e7..b8fba24 100755
--- a/QiaoJiaSystem/build/RapidStructureApp
+++ b/QiaoJiaSystem/build/RapidStructureApp
Binary files differ
diff --git a/QiaoJiaSystem/build/RapidStructureAppRtsp b/QiaoJiaSystem/build/RapidStructureAppRtsp
index 83c8c8e..a4d7b19 100755
--- a/QiaoJiaSystem/build/RapidStructureAppRtsp
+++ b/QiaoJiaSystem/build/RapidStructureAppRtsp
Binary files differ
diff --git a/QiaoJiaSystem/build/RecordVideo b/QiaoJiaSystem/build/RecordVideo
index f1c34cc..be82679 100755
--- a/QiaoJiaSystem/build/RecordVideo
+++ b/QiaoJiaSystem/build/RecordVideo
Binary files differ
diff --git a/QiaoJiaSystem/build/StructureApp b/QiaoJiaSystem/build/StructureApp
index a8e0934..5b2d6f4 100755
--- a/QiaoJiaSystem/build/StructureApp
+++ b/QiaoJiaSystem/build/StructureApp
Binary files differ
diff --git a/QiaoJiaSystem/build/VideoAnalysFromHC b/QiaoJiaSystem/build/VideoAnalysFromHC
index 9e1015b..51b9386 100755
--- a/QiaoJiaSystem/build/VideoAnalysFromHC
+++ b/QiaoJiaSystem/build/VideoAnalysFromHC
Binary files differ
diff --git a/QiaoJiaSystem/build/YoloDetectClientTest b/QiaoJiaSystem/build/YoloDetectClientTest
index 7d376dd..758ea31 100755
--- a/QiaoJiaSystem/build/YoloDetectClientTest
+++ b/QiaoJiaSystem/build/YoloDetectClientTest
Binary files differ
diff --git a/QiaoJiaSystem/build/YoloServer b/QiaoJiaSystem/build/YoloServer
index 662587b..3241df9 100755
--- a/QiaoJiaSystem/build/YoloServer
+++ b/QiaoJiaSystem/build/YoloServer
Binary files differ
diff --git a/QiaoJiaSystem/build/syncDBClient b/QiaoJiaSystem/build/syncDBClient
index 5584639..bc319de 100755
--- a/QiaoJiaSystem/build/syncDBClient
+++ b/QiaoJiaSystem/build/syncDBClient
Binary files differ
diff --git a/syncDBTool/ErlangDbTool.cpp b/syncDBTool/ErlangDbTool.cpp
index 667704a..ff0a319 100755
--- a/syncDBTool/ErlangDbTool.cpp
+++ b/syncDBTool/ErlangDbTool.cpp
@@ -1592,7 +1592,7 @@
     }
     if (str_tableUuid.size() > 0) {
         QString sql = QString::fromStdString(
-            "Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard from '" + str_tableUuid +
+            "Select a.uuid as id ,a.faceUrl as img,a.feature,b.idCard as idcard,a.enable from '" + str_tableUuid +
             "_fea' as a ,'" + str_tableUuid + "' as b  where a.uuid = b.uuid and ( a.del_flag=0 AND b.del_flag=0);");
         QSqlQuery query(g_syncDbFile);
         query.prepare(sql);
@@ -1605,6 +1605,7 @@
                 t_feature_info.img = query.value(1).toString().toStdString();
                 t_feature_info.feature = query.value(2).toString().toStdString();
                 t_feature_info.idcard = query.value(3).toString().toStdString();
+                t_feature_info.enable = query.value(4).toString().toStdString();
 
                 dataCache.insert(std::make_pair(t_feature_info.id, t_feature_info));
             }
@@ -1630,7 +1631,7 @@
     }
     if (str_tableUuid.size() > 0) {
         QString sql = QString::fromStdString(
-            "Select b.uuid as id,b.faceUrl as img,a.idCard as idcard from '" + str_tableUuid + "' as a, '" +
+            "Select b.uuid as id,b.faceUrl as img,a.idCard as idcard,a.enable from '" + str_tableUuid + "' as a, '" +
             str_tableUuid + "_fea' As b  where a.uuid = b.uuid and ( a.del_flag=0 AND b.del_flag=0);");
         QSqlQuery query(g_syncDbFile);
         query.prepare(sql);
@@ -1642,6 +1643,7 @@
                 t_feature_info.id = query.value(0).toString().toStdString();
                 t_feature_info.img = query.value(1).toString().toStdString();
                 t_feature_info.idcard = query.value(2).toString().toStdString();
+                t_feature_info.enable = query.value(4).toString().toStdString();
 
                 dataCache.insert(std::make_pair(t_feature_info.id, t_feature_info));
             }
diff --git a/syncDBTool/SyncDB.hpp b/syncDBTool/SyncDB.hpp
index e9b97aa..8018f7c 100755
--- a/syncDBTool/SyncDB.hpp
+++ b/syncDBTool/SyncDB.hpp
@@ -21,6 +21,7 @@
         update_time,
         img,
         idcard,
+        enable,
         evEnd
     };
 
@@ -36,6 +37,7 @@
         map_Fea_InfoString2Values["update_time"] = Feature_InfoStringValue::update_time;
         map_Fea_InfoString2Values["img"] = Feature_InfoStringValue::img;
         map_Fea_InfoString2Values["idcard"] = Feature_InfoStringValue::idcard;
+        map_Fea_InfoString2Values["enable"] = Feature_InfoStringValue::enable;
         map_Fea_InfoString2Values["end"] = evEnd;
     }
 
@@ -81,6 +83,9 @@
                     case Feature_InfoStringValue::idcard:
                         idcard = value;
                         break;
+                    case Feature_InfoStringValue::enable:
+                        enable = value;
+                        break;
                     default:
                         ERR(key << " is an invalid string. s_mapStringValues now contains "
                                 << map_Fea_InfoString2Values.size() << " entries.");
@@ -102,6 +107,8 @@
         std::string update_time;
         std::string img;
         std::string idcard;
+        std::string enable;
+
 
 //        value is a atom: atomSize:19, atomValue:test@192.168.50.216
 //        value is a list:2018-08-08 20:17:11

--
Gitblit v1.8.0