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