From 17ae0cd78c16f55d38dc3f9ad6b27688f445aee3 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期三, 03 四月 2019 09:57:19 +0800
Subject: [PATCH] Merge branch 'yangwu1.3' into 1.3nsq

---
 QiaoJiaSystem/StructureApp/AppPipeController.cpp                 |   57 +++----
 QiaoJiaSystem/StructureApp/FaceExtractElement.h                  |    8 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h   |    1 
 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp |   96 ++++++-----
 QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp           |    3 
 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp                |  277 ++++++++++++++++++----------------
 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp            |    2 
 7 files changed, 235 insertions(+), 209 deletions(-)

diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
index 27a837d..af7f598 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp
@@ -145,7 +145,8 @@
  * @param p_this
  */
 void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) {
-    DBG(p_this->m_camIdx << "  BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx);
+    DBG(p_this->m_camIdx <<  "  BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx);
+    DBG("p_thisADDR:" << p_this << "p_this->m_running" << p_this->m_running);
     while (!p_this->m_running) {
 
         p_this->m_running = true;
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
index 8859d91..2f7010f 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -35,44 +35,49 @@
 
 bool BASICGB28181::VideoCaptureElementWithRtp::startRtpStream(int streamTransType) {
 
-    //绛夊緟涓嬪眰ffmpeg灏唕tp鍖呰В鐮佹垚涓哄浘鐗囧悗瑙﹀彂淇″彿,鐒跺悗瑙﹀彂褰撳墠绫荤殑submit
-    std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) {
-        p_this->m_waitSignal = true;
-        //寰幆锛岀敱鎴愬憳鍙橀噺鏉ョ淮鎶よ繖涓嚎绋嬬殑杩愯鐘舵��
-        while (p_this->m_waitSignal) {
+    if(!m_waitSignalrunning) {
+        DBG("std::thread waitSignalAndEmit create New!!");
+        //绛夊緟涓嬪眰ffmpeg灏唕tp鍖呰В鐮佹垚涓哄浘鐗囧悗瑙﹀彂淇″彿,鐒跺悗瑙﹀彂褰撳墠绫荤殑submit
+        std::thread waitSignalAndEmit([&](BASICGB28181::VideoCaptureElementWithRtp *p_this) {
+            p_this->m_waitSignal = true;
+            p_this->m_waitSignalrunning = true;
+            //寰幆锛岀敱鎴愬憳鍙橀噺鏉ョ淮鎶よ繖涓嚎绋嬬殑杩愯鐘舵��
+            while (p_this->m_waitSignal) {
 //#TODO wait test
 #ifdef TestCode
-            DBG("waitSignal(\"DecoderImageOK\") begin");
+                DBG("waitSignal(\"DecoderImageOK\") begin");
 #endif
-            //绛夊緟淇″彿瑙﹀彂
-            gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK");
+                //绛夊緟淇″彿瑙﹀彂
+                gSignalLock.waitSignal(p_this->m_chanPubID + "DecoderImageOK");
 #ifdef TestCode
-            DBG("waitSignal(\"DecoderImageOK\") after");
+                DBG("waitSignal(\"DecoderImageOK\") after");
 #endif
-            /****褰曞儚妯″潡浠g爜*****/
-            p_this->m_picCount++;
-            //鍑犲紶閫変竴寮犳斁鍏edis
-            if (p_this->m_picCount % m_nPicsPickOne != 0) {
-                continue;
-            } else {
-                p_this->m_picCount.store(0);
-            }
+                /****褰曞儚妯″潡浠g爜*****/
+                p_this->m_picCount++;
+                //鍑犲紶閫変竴寮犳斁鍏edis
+                if (p_this->m_picCount % m_nPicsPickOne != 0) {
+                    continue;
+                } else {
+                    p_this->m_picCount.store(0);
+                }
 
 //            浠巉fmpeg瑙g爜绫讳腑鑾峰彇鍥剧墖
-            p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image);
-            {
-                cv::Mat copyMat;
-                std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName();
-                p_this->m_image.copyTo(copyMat);
-                m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat);
-            }
-            /*********/
+                p_this->m_fFmpegDecoderJPG.getImage().copyTo(p_this->m_image);
+                {
+                    cv::Mat copyMat;
+                    std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName();
+                    p_this->m_image.copyTo(copyMat);
+                    m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat);
+                }
+                /*********/
 
-            p_this->submit();
-        }
-        INFO("waitSignalAndEmit is exit...");
-    }, this);
-    waitSignalAndEmit.detach();
+                p_this->submit();
+            }
+            p_this->m_waitSignalrunning = false;
+            INFO("waitSignalAndEmit is exit...");
+        }, this);
+        waitSignalAndEmit.detach();
+    }
 
     TryCath(
     //--------------鍥芥爣璁惧鎴栧垯鍥芥爣涓嬬骇骞冲彴蹇呴』鏀寔GB28181-2016----------------------------------------------
@@ -146,9 +151,12 @@
                 //鐐规挱澶辫触
                 p_this->m_waitSignal = false;
                 p_this->m_running = false;
+
                 //鍏抽棴ffmpeg瑙g爜妯″潡
                 p_this->m_fFmpegDecoderJPG.stopThd();
                 ERR(p_this->m_chanPubID << " C_RealVideoStart is error lrealhandle is  " << lrealhandle);
+
+                p_this->startRtpStream(p_this->m_streamTransType);
             }
 
         }, this, streamTransType);
@@ -196,20 +204,20 @@
 
 void BASICGB28181::VideoCaptureElementWithRtp::threadFunc() {
 
-    if ((!m_running) || (!m_waitSignal)) {
-//        鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚�
-        if (reopenTime < 0) {
-            stop();
-            INFO("grabFrame faild, element stopping");
-            return;
-        } else {
-            //todo 涓氬姟姝婚攣
-            usleep(reopenTime * 1000);
-            INFO("grabFrame faild, try reopen video: ");
-            startRtpStream(m_streamTransType);
-            return;
-        }
-    }
+//    if ((!m_running) || (!m_waitSignal)) {
+////        鏍规嵁reopenTime鍒ゆ柇鏄惁闇�瑕侀噸鍚�
+//        if (reopenTime < 0) {
+//            stop();
+//            INFO("grabFrame faild, element stopping");
+//            return;
+//        } else {
+//            //todo 涓氬姟姝婚攣
+//            usleep(reopenTime * 1000);
+//            INFO("grabFrame faild, try reopen video: ");
+//            startRtpStream(m_streamTransType);
+//            return;
+//        }
+//    }
     fireConnectors();
 }
 
diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
index 5f98e6a..f2915cc 100644
--- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
+++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h
@@ -68,6 +68,7 @@
 
         std::atomic<bool> m_running;
         std::atomic<bool> m_waitSignal;
+        std::atomic<bool> m_waitSignalrunning;
 
         //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰�
         std::string m_cutPath;
diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp
index c2d8a16..45c7773 100644
--- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp
+++ b/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};
@@ -261,27 +259,25 @@
         m_hiredisTool.listRpop(m_camId,imgKey);
         if(imgKey.empty())
         {
-            ERR("CamId  "<<m_camId<<" No ImgKey");
+//            ERR("CamId  "<<m_camId<<" No ImgKey");
             return;
         }
 
         cv::Mat imageTemp;
-        m_hiredisTool.getKeyImage(imgKey,imageTemp);
-        if(!m_bSetWH)
-        {
-            INFO("SetWidth:"<<imageTemp.cols<<"  Height:"<<imageTemp.rows);
-            appPref.setIntData(m_camId+"width",imageTemp.cols);
-            appPref.setIntData(m_camId+"height",imageTemp.rows);
-            m_bSetWH=true;
+        m_hiredisTool.getKeyImage(imgKey, imageTemp);
+        if (!m_bSetWH) {
+            INFO("SetWidth:" << imageTemp.cols << "  Height:" << imageTemp.rows);
+            appPref.setIntData(m_camId + "width", imageTemp.cols);
+            appPref.setIntData(m_camId + "height", imageTemp.rows);
+            m_bSetWH = true;
         }
 
         m_hiredisTool.delKey(imgKey);
-        if(imageTemp.empty())
-        {
-            ERR("No Image Data In: "<<m_camId<<"   ImgKey:"<<imgKey);
+        if (imageTemp.empty()) {
+            ERR("No Image Data In: " << m_camId << "   ImgKey:" << imgKey);
             return;
         }
-        std::string  strNewTime = AppUtil::getTimeUSecString();
+        std::string strNewTime = AppUtil::getTimeUSecString();
 
         ImageName_s_t imgSt = ImageName_s_t::fromString(imgKey);
 
@@ -289,8 +285,8 @@
             if (!faceRpcElement.isBusy()) {
                 //#todo
                 faceRpcElement.setProperty("time", strNewTime);
-                faceRpcElement.setProperty("imgKey",imgKey);
-                INFO("Write To FaceRPC  ES time:"<<strNewTime<< "    ImgKey: "<<imgKey);
+                faceRpcElement.setProperty("imgKey", imgKey);
+                INFO("Write To FaceRPC  ES time:" << strNewTime << "    ImgKey: " << imgKey);
                 faceRpcElement.setImage(imageTemp);
                 faceRpcElement.submit();
             }
@@ -298,8 +294,8 @@
             if (!yoloRpcElement.isBusy()) {
                 //#todo
                 yoloRpcElement.setProperty("time", strNewTime);
-                yoloRpcElement.setProperty("imgKey",imgKey);
-                INFO("Write To YoloES time:"<<strNewTime<< "    ImgKey: "<<imgKey);
+                yoloRpcElement.setProperty("imgKey", imgKey);
+                INFO("Write To YoloES time:" << strNewTime << "    ImgKey: " << imgKey);
                 yoloRpcElement.setImage(imageTemp);
                 yoloRpcElement.submit();
             }
@@ -385,7 +381,7 @@
 
     imageDrawElement.registerConnector([&] {
         if (appPref.getIntData("show.image") == 1) {
-           ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
+            ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage());
         }
     });
 
@@ -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());
@@ -409,7 +404,7 @@
         registerElement(imageDrawElement);
     }
 
-   // registerElement(newRecordVideoElement);
+    // registerElement(newRecordVideoElement);
     //videoCaptureElement.setOutPutInterval(3);
     faceExtractElement.setProperty("index", to_string(m_index));
     registerElement(yoloRpcElement);
@@ -543,14 +538,12 @@
     leftJudgment.init(rule.strAreas, rule.strLine);
     rightJudgment.init(rule.strExAreas, rule.strExLine);
     yoloRpcElement.registerConnector([&] {
-        if(!leftJudgment.isBusy())
-        {
-             leftJudgment.setYoloObjects(yoloRpcElement.getLastScoreRects());
-              leftJudgment.setImage(yoloRpcElement.getImage());
-              leftJudgment.submit();
+        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());
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
index b6cbc28..f965ded 100644
--- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp
+++ b/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,135 +140,8 @@
                     strImgUrl = "";
                     ERR("fdfsClient is nullptr ???");
                 }
+                InsertToESDB(faceExtractQueueTmp, t_com_sc, i, j, feature, strImgUrl, strBigImgUrl);
 
-                //鎷兼帴json
-                string str_uuid;
-                uuid_t t_uuid;
-                char str[36];
-                uuid_generate(t_uuid);
-                uuid_unparse(t_uuid, str);
-                str_uuid = str;
-
-                Json::Value t_json;
-                t_json["Id"] = str_uuid; //涓婚敭
-
-                std::string feature_base64;
-                feature_base64 = base64.Encode(feature.data(), feature.size());
-
-                //#鍦ㄥ姣斾腑娣诲姞鐗瑰緛鍊�
-                t_json["FaceFeature"] = feature_base64;
-                t_json["personId"] = "";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
-                t_json["BaseName"] = "";//鍏宠仈搴曞簱琛ㄥ悕
-                //#end
-//                t_json["likePer"] = faceExtractQueueTmp[i].scoredRects[j].score;//浜哄憳鐩镐技搴� Score
-                t_json["likeDate"] = AppUtil::getTimeSecString();//"2018-01-01 01:01:01";//姣旇緝鏃堕棿
-
-                t_json["picName"] = "";
-
-
-                t_json["personPicUrl"] = "";//浜哄憳鍥剧墖 store
-                t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
-                DBG("picAddress=" << t_json["picAddress"]);
-                t_json["picMaxUrl"] = "";//澶у浘璺緞
-                t_json["picLocalUrl"] = "";//鏈湴璺緞
-                t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
-                //#todo
-                t_json["picDate"] = faceExtractQueueTmp[i].scoredRects[j].properties["time"];
-                DBG("picDate=" << t_json["picDate"].asString());
-//                DBG("timeC ::::B" << t_json["picDate"m_bIsMask].asString());
-//                t_json["picDate"] = AppUtil::getTimeSecString();
-
-                t_json["content"] = "";
-                //t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
-                t_json["sdkType"] = std::to_string(
-                    m_sdkRule.nSdkType);//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
-                t_json["personIsHub"] = "4";//1: 鎶ヨ  2: 鍙枒  3: 瀹夊叏  4: 鏈煡
-
-
-                t_json["cluster_id"] = appPref.getStringData("clusterID");
-                t_json["ack_alarm"] = "0";
-
-                //faceExtractElement.setProperty("dev_id", str_device_id);
-                //faceExtractElement.setProperty("cg_id", str_ch_id);
-                t_json["videoNum"] = getProperty("dev_id");//Video璁惧缂栧彿//getProperty("path");//Vide缂栧彿 澶栭敭
-                t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
-                t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
-                t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
-
-                //浜鸿劯灞炴��
-                t_json["Age"] = atoi(
-                    faceExtractQueueTmp[i].scoredRects[j].properties["age"].c_str());//妫�娴嬬殑骞撮緞  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
-
-                //#todo 浼樺寲 get vector<string> from json
-                t_json["Gender"] = faceExtractQueueTmp[i].scoredRects[j].properties["gender"];//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
-                switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["gender"].c_str())) {
-                    case 0:
-                        t_json["Gender"] = "濂�";
-                        break;
-                    case 1:
-                        t_json["Gender"] = "鐢�";
-                        break;
-                }
-
-                t_json["BeautyLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["beauty"];//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
-                t_json["SimleLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["smile"];//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
-                t_json["Race"] = "";//妫�娴嬬殑绉嶆棌  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
-                t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
-
-                t_json["cluster_id"] = appConfig.getStringProperty("clusterID");//闆嗙兢id
-                t_json["ack_alarm"] = "0";//ack_alarm鏄惁鎶ヨ
-
-                //#todo 浼樺寲 get vector<string> from json
-                switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["race"].c_str())) {
-                    case 1:
-                        t_json["Race"] = "鐧戒汉";
-                        break;
-                    case 2:
-                        t_json["Race"] = "榛勪汉";
-                        break;
-                    case 3:
-                        t_json["Race"] = "榛戜汉";
-                        break;
-                }
-
-//                DBG(t_json.toStyledString());
-
-                t_json["indeviceid"] = appPref.getStringData("fxDevID");
-                t_json["indevicename"] = appPref.getStringData("fxDevNAME");
-
-                std::string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"];
-                INFO("SaveImageKey To ES: " << strImageKey);
-                t_json["imgKey"] = strImageKey;
-
-                try {
-                    auto server = m_rpcClient.getServer();
-                    if (!server) {
-                        ERR("server is null");
-                        //return;
-                    }
-                    INFO("Record Video " << strImageKey);
-                    server->recordVideo(strImageKey);
-                } catch (std::exception &e) {
-                    ERR("Record Video Err: " << strImageKey << "   Message: " << e.what());
-                    //return;
-                }
-                auto faceSearchServer = faceSearchRpcClient.getServer();
-                if (!faceSearchServer) {
-                    ERR("faceSearchServer is null");
-                    EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
-                    bool retface = false;
-                    retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", t_json.toStyledString(),
-                                                      str_uuid);
-//                    if (retface) {
-//                        INFO("facedb success");
-//                    } else {
-//                        ERR("facedb fail");
-//                    }
-                } else {
-                    INFO("send faceSearchTopN ");
-                    auto faceSearchResults = faceSearchServer->faceSearchTopN(feature, t_json.toStyledString(), 2,
-                                                                              t_com_sc);
-                }
             }
         }
     } catch (std::exception &e) {
@@ -264,7 +150,140 @@
     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;
+    char str[36];
+    uuid_generate(t_uuid);
+    uuid_unparse(t_uuid, str);
+    str_uuid = str;
+
+    Json::Value t_json;
+    t_json["Id"] = str_uuid; //涓婚敭
+
+    string feature_base64;
+    feature_base64 = base64.Encode(feature.data(), feature.size());
+
+    //#鍦ㄥ姣斾腑娣诲姞鐗瑰緛鍊�
+    t_json["FaceFeature"] = feature_base64;
+    t_json["personId"] = "";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id
+    t_json["BaseName"] = "";//鍏宠仈搴曞簱琛ㄥ悕
+//#end
+//                t_json["likePer"] = faceExtractQueueTmp[i].scoredRects[j].score;//浜哄憳鐩镐技搴� Score
+    t_json["likeDate"] = AppUtil::getTimeSecString();//"2018-01-01 01:01:01";//姣旇緝鏃堕棿
+
+    t_json["picName"] = "";
+
+
+    t_json["personPicUrl"] = "";//浜哄憳鍥剧墖 store
+    t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃
+    DBG("picAddress=" << t_json["picAddress"]);
+    t_json["picMaxUrl"] = strBigImgUrl;//澶у浘璺緞
+    t_json["picLocalUrl"] = "";//鏈湴璺緞
+    t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥�
+//#todo
+    t_json["picDate"] = faceExtractQueueTmp[i].scoredRects[j].properties["time"];
+    DBG("picDate=" << t_json["picDate"].asString());
+//                DBG("timeC ::::B" << t_json["picDate"m_bIsMask].asString());
+//                t_json["picDate"] = AppUtil::getTimeSecString();
+
+    t_json["content"] = "";
+    //t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷
+    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: 鏈煡
+
+
+    t_json["cluster_id"] = appPref.getStringData("clusterID");
+    t_json["ack_alarm"] = "0";
+
+    //faceExtractElement.setProperty("dev_id", str_device_id);
+//faceExtractElement.setProperty("cg_id", str_ch_id);
+    t_json["videoNum"] = getProperty("dev_id");//Video璁惧缂栧彿//getProperty("path");//Vide缂栧彿 澶栭敭
+    t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿
+    t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id
+    t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥
+
+    //浜鸿劯灞炴��
+    t_json["Age"] = atoi(
+        faceExtractQueueTmp[i].scoredRects[j].properties["age"].c_str());//妫�娴嬬殑骞撮緞  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+
+    //#todo 浼樺寲 get vector<string> from json
+    t_json["Gender"] = faceExtractQueueTmp[i].scoredRects[j].properties["gender"];//妫�娴嬬殑鎬у埆 涓虹┖ 鏃犳娴嬬粨鏋�
+    switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["gender"].c_str())) {
+        case 0:
+            t_json["Gender"] = "濂�";
+            break;
+        case 1:
+            t_json["Gender"] = "鐢�";
+            break;
+    }
+
+    t_json["BeautyLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["beauty"];//妫�娴嬬殑缇庡寲姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["SimleLevel"] = faceExtractQueueTmp[i].scoredRects[j].properties["smile"];//妫�娴嬬殑寰瑧姘村钩 涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["Race"] = "";//妫�娴嬬殑绉嶆棌  搴旇涓虹┖ 鏃犳娴嬬粨鏋�
+    t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃
+
+    t_json["cluster_id"] = appConfig.getStringProperty("clusterID");//闆嗙兢id
+    t_json["ack_alarm"] = "0";//ack_alarm鏄惁鎶ヨ
+
+    //#todo 浼樺寲 get vector<string> from json
+    switch (atoi(faceExtractQueueTmp[i].scoredRects[j].properties["race"].c_str())) {
+        case 1:
+            t_json["Race"] = "鐧戒汉";
+            break;
+        case 2:
+            t_json["Race"] = "榛勪汉";
+            break;
+        case 3:
+            t_json["Race"] = "榛戜汉";
+            break;
+    }
+
+//                DBG(t_json.toStyledString());
+
+    t_json["indeviceid"] = appPref.getStringData("fxDevID");
+    t_json["indevicename"] = appPref.getStringData("fxDevNAME");
+
+    string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"];
+    INFO("SaveImageKey To ES: " << strImageKey);
+    t_json["imgKey"] = strImageKey;
+
+    try {
+        auto server = m_rpcClient.getServer();
+        if (!server) {
+            ERR("server is null");
+            //return;
+        }
+        INFO("Record Video " << strImageKey);
+        server->recordVideo(strImageKey);
+    } catch (exception &e) {
+        ERR("Record Video Err: " << strImageKey << "   Message: " << e.what());
+        //return;
+    }
+    auto faceSearchServer = faceSearchRpcClient.getServer();
+    if (!faceSearchServer) {
+        ERR("faceSearchServer is null");
+        EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort"));
+        bool retface = false;
+        retface = pManagerEsDB.insertData("videopersons", "perVideoPicture", t_json.toStyledString(),
+                                          str_uuid);
+//                    if (retface) {
+//                        INFO("facedb success");
+//                    } else {
+//                        ERR("facedb fail");
+//                    }
+    } else {
+        INFO("send faceSearchTopN ");
+        auto faceSearchResults = faceSearchServer->faceSearchTopN(feature, t_json.toStyledString(), 2,
+                                                                  t_com_sc);
+    }
+}
+
 std::vector<::FaceDetect::Data> FaceExtractElement::getFeatures() const {
     return features;
 }
 
+
diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.h b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
index 94f21b0..bbf7266 100644
--- a/QiaoJiaSystem/StructureApp/FaceExtractElement.h
+++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.h
@@ -14,6 +14,7 @@
 #include <mutex>
 #include <jsoncpp/json/json.h>
 #include "DBStruct.h"
+
 #define VECTOR_MAX 50
 
 class QSharedMemory;
@@ -30,7 +31,7 @@
 class FaceExtractElement : public TimerElement {
 public:
 
-    FaceExtractElement(std::string shareMemoryName,const SdkRule& rule);
+    FaceExtractElement(std::string shareMemoryName, const SdkRule &rule);
     //FaceExtractElement(std::string shareMemoryName,const SdkRule& rule,SaveVideoRpcClient_t& rpcClient);
 
     ~FaceExtractElement();
@@ -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);
 };
 
 
diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
index ae0cd84..afec100 100644
--- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
+++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -478,7 +478,7 @@
 //        INFO("Save Succeed Cam: " << camId << " ImageKey: " << imageName);
         item->second->SaveImage(imageName, img);
     } else {
-        ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName);
+//        ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName);
     }
 //    m_imgRedisCRwLock.unlock();
 //    INFO("MYH DEBUG HERE");

--
Gitblit v1.8.0