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