QiaoJiaSystem/StructureApp/AppPipeController.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
QiaoJiaSystem/StructureApp/FaceExtractElement.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -33,8 +33,7 @@ // recordVideoElement(-1, ""), bRecordVideoEnable(false), m_bSetWH(false) { m_bSetWH(false) { init(); @@ -90,9 +89,7 @@ rightJudgment(ruleMap[KeepRightSdk]), bRecordVideoEnable(RecordVideoEnable), m_sdkRuleMap(ruleMap), m_bSetWH(false) { m_bSetWH(false) { DBG("camId" << camId); init(); initPerimeter(); @@ -229,6 +226,7 @@ "perStaticElement: "<<perStaticElement.getTriggerState()); }*/ } void AppPipeController::init() { unsigned char ip_old[15] = {0}; @@ -267,8 +265,7 @@ cv::Mat imageTemp; m_hiredisTool.getKeyImage(imgKey,imageTemp); if(!m_bSetWH) { if (!m_bSetWH) { INFO("SetWidth:"<<imageTemp.cols<<" Height:"<<imageTemp.rows); appPref.setIntData(m_camId+"width",imageTemp.cols); appPref.setIntData(m_camId+"height",imageTemp.rows); @@ -276,8 +273,7 @@ } m_hiredisTool.delKey(imgKey); if(imageTemp.empty()) { if (imageTemp.empty()) { ERR("No Image Data In: "<<m_camId<<" ImgKey:"<<imgKey); return; } @@ -398,8 +394,7 @@ registerElement(faceRpcElement); registerElement(faceExtractElement); } if(appPref.getIntData("show.image") == 1) { if (appPref.getIntData("show.image") == 1) { imageDrawElement.registerConnector([&] { ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage()); @@ -543,14 +538,12 @@ leftJudgment.init(rule.strAreas, rule.strLine); rightJudgment.init(rule.strExAreas, rule.strExLine); yoloRpcElement.registerConnector([&] { if(!leftJudgment.isBusy()) { if (!leftJudgment.isBusy()) { leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects()); leftJudgment.setImage(yoloRpcElement.getImage()); leftJudgment.submit(); } if(!rightJudgment.isBusy()) { if (!rightJudgment.isBusy()) { rightJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects()); rightJudgment.setImage(yoloRpcElement.getImage()); QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
@@ -92,6 +92,20 @@ auto sharedImage = cv::Mat(image.rows, image.cols, CV_8UC3, sharedMemory->data()); image.copyTo(sharedImage); // 上传大图 string strBigImgUrl; if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) { fdfsClient->rwLock.rdlock(); std::vector<unsigned char> buffer; CvUtil::cvMat2Buffer(image, buffer); fdfsClient->fastFds->uploadFile(buffer, strBigImgUrl, "jpg"); fdfsClient->rwLock.unlock(); } else { strBigImgUrl = ""; ERR("fdfsClient is nullptr ???"); } unsigned long size = faceExtractQueueTmp[i].facesPos.size(); for (int j = 0; j < size; j++) { auto feature = extractServer->faceExtract(image.cols, image.rows, faceExtractQueueTmp[i].facesPos[j], @@ -109,7 +123,6 @@ } features.clear(); features.emplace_back(feature); std::string strImgUrl = "http://"; if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) { fdfsClient->rwLock.rdlock(); @@ -127,7 +140,18 @@ strImgUrl = ""; ERR("fdfsClient is nullptr ???"); } InsertToESDB(faceExtractQueueTmp, t_com_sc, i, j, feature, strImgUrl, strBigImgUrl); } } } catch (std::exception &e) { ERR(e.what()) } if (!features.empty())fireConnectors(); } void FaceExtractElement::InsertToESDB(const vector<FaceToExtract> &faceExtractQueueTmp, float t_com_sc, int i, int j, FaceDetect::Data &feature, string &strImgUrl, string &strBigImgUrl) { //拼接json string str_uuid; uuid_t t_uuid; @@ -139,7 +163,7 @@ Json::Value t_json; t_json["Id"] = str_uuid; //主键 std::string feature_base64; string feature_base64; feature_base64 = base64.Encode(feature.data(), feature.size()); //#在对比中添加特征值 @@ -156,7 +180,7 @@ t_json["personPicUrl"] = "";//人员图片 store t_json["picAddress"] = getProperty("str_addr");//抓拍地址 DBG("picAddress=" << t_json["picAddress"]); t_json["picMaxUrl"] = "";//大图路径 t_json["picMaxUrl"] = strBigImgUrl;//大图路径 t_json["picLocalUrl"] = "";//本地路径 t_json["picSmUrl"] = strImgUrl;//人员抓小图 //#todo @@ -167,7 +191,7 @@ t_json["content"] = ""; //t_json["viType"] = "2";//只有4种类型 1:personface 2:personbody 3:car 4:bicycle 5:none 未知类型 t_json["sdkType"] = std::to_string( t_json["sdkType"] = to_string( m_sdkRule.nSdkType);//只有4种类型 1:personface 2:personbody 3:car 4:bicycle 5:none 未知类型 t_json["personIsHub"] = "4";//1: 报警 2: 可疑 3: 安全 4: 未知 @@ -223,7 +247,7 @@ t_json["indeviceid"] = appPref.getStringData("fxDevID"); t_json["indevicename"] = appPref.getStringData("fxDevNAME"); std::string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"]; string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"]; INFO("SaveImageKey To ES: " << strImageKey); t_json["imgKey"] = strImageKey; @@ -235,7 +259,7 @@ } INFO("Record Video " << strImageKey); server->recordVideo(strImageKey); } catch (std::exception &e) { } catch (exception &e) { ERR("Record Video Err: " << strImageKey << " Message: " << e.what()); //return; } @@ -257,14 +281,9 @@ t_com_sc); } } } } catch (std::exception &e) { ERR(e.what()) } if (!features.empty())fireConnectors(); } std::vector<::FaceDetect::Data> FaceExtractElement::getFeatures() const { return features; } QiaoJiaSystem/StructureApp/FaceExtractElement.h
@@ -14,6 +14,7 @@ #include <mutex> #include <jsoncpp/json/json.h> #include "DBStruct.h" #define VECTOR_MAX 50 class QSharedMemory; @@ -57,10 +58,13 @@ // AlarmServerInterface::TableNames tableNames; std::vector<::FaceDetect::Data> features; cv::Mat m_image; Base64 base64; SdkRule m_sdkRule; SaveVideoRpcClient_t m_rpcClient; void InsertToESDB(const vector<FaceToExtract> &faceExtractQueueTmp, float t_com_sc, int i, int j, FaceDetect::Data &feature, string &strImgUrl, string &strBigImgUrl); };