From f676f7af18163b4532b6b982bbe1dc57b32e96dd Mon Sep 17 00:00:00 2001 From: zhangjixing <775834166@qq.com> Date: 星期四, 24 一月 2019 15:38:22 +0800 Subject: [PATCH] --- QiaoJiaSystem/EncodeServer/EncodeVideoManager.cpp | 24 +++ QiaoJiaSystem/StructureApp/HiredisTool.cpp | 12 + QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h | 2 QiaoJiaSystem/StructureApp/PerimeterElement.cpp | 63 ++++++-- QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h | 1 QiaoJiaSystem/StructureApp/NewRecordVideoElement.h | 3 QiaoJiaSystem/EncodeServer/EncodeVideo.cpp | 5 QiaoJiaSystem/StructureApp/TrackingTrigger.h | 3 QiaoJiaSystem/StructureApp/PerStaticElement.cpp | 130 +++++++++++------- QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h | 7 QiaoJiaSystem/StructureApp/AppPipeController.cpp | 13 + QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp | 24 ++ QiaoJiaSystem/YoloServer/main.cpp | 2 QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp | 50 +++++-- QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 6 QiaoJiaSystem/StructureApp/PerimeterElement.h | 5 QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp | 32 ++++ QiaoJiaSystem/StructureApp/PerStaticElement.h | 2 QiaoJiaSystem/StructureApp/PersonElement.cpp | 3 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | 17 +- 20 files changed, 283 insertions(+), 121 deletions(-) diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp index bc54682..6bdf1ac 100644 --- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp +++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp @@ -3069,7 +3069,8 @@ str_imgName +="-"; str_imgName += "snapshot.jpg"; //admin:a1234567@192.168.1.201:554/h264/ch1/main/av_stream -r 1/25 -f image2 -s 1920*1080 /home/basic/work_src/a.jpg - std::string cmd("ffmpeg -i " + rtsp_url + " -r 1/25 -f image2 -s 1920*1080 -y " + str_imgName); + std::string cmd("ffmpeg -i " + rtsp_url + " -vf select='eq(pict_type\\,I)',setpts='N/(25*TB)' -f image2 -s 1920*1080 -y " + str_imgName); +// std::string cmd("ffmpeg -i " + rtsp_url + " -r 1/25 -f image2 -s 1920*1080 -y " + str_imgName); DBG(cmd); system(cmd.c_str()); @@ -3086,13 +3087,14 @@ CvUtil::cvMat2Buffer(img, buffer); std::string strImgUrlTmp = ""; fdfsClient.fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); - strImgUrl.append(fdfsClient.fastFds->getIp() + "/" + strImgUrlTmp); + // strImgUrl.append(fdfsClient.fastFds->getIp() + "/" + strImgUrlTmp); strImgUrl.clear(); strImgUrl = strImgUrlTmp; } fdfsClient.rwLock.unlock(); Json::Value result; result["imgUrl"] = strImgUrl; + db_c.updateCamDevSnapshot(QString::fromStdString(ip),QString::fromStdString(strImgUrl)); return result.toStyledString(); diff --git a/QiaoJiaSystem/EncodeServer/EncodeVideo.cpp b/QiaoJiaSystem/EncodeServer/EncodeVideo.cpp index b9ce644..9341a44 100644 --- a/QiaoJiaSystem/EncodeServer/EncodeVideo.cpp +++ b/QiaoJiaSystem/EncodeServer/EncodeVideo.cpp @@ -12,7 +12,8 @@ void EncodeVideo::threadFunc() { - +// std::string tmp="threadFunc"; +// ClockTimer cl(tmp); std::string src_path=getProperty("src_path"); if(src_path.empty()) @@ -45,7 +46,7 @@ videoEncoderElement.doFunc(img); } - usleep(2*1000); + // usleep(1000); } videoEncoderElement.threadClosing(); diff --git a/QiaoJiaSystem/EncodeServer/EncodeVideoManager.cpp b/QiaoJiaSystem/EncodeServer/EncodeVideoManager.cpp index fd67754..27523af 100644 --- a/QiaoJiaSystem/EncodeServer/EncodeVideoManager.cpp +++ b/QiaoJiaSystem/EncodeServer/EncodeVideoManager.cpp @@ -1,8 +1,10 @@ #include "EncodeVideoManager.h" #include "NewRecordVideoElement.h" #include <basic/util/app/AppConfig.h> +#include <qdatetime.h> + EncodeVideoManager::EncodeVideoManager(): -TimerElement(1000) +TimerElement(10*1000) { // m_hiredisTool.delKey("") int thread_num=appConfig.getIntProperty("encode_thread_num"); @@ -28,12 +30,16 @@ { m_newEncodeVideoVec[i]->stop(); delete m_newEncodeVideoVec[i]; + m_newEncodeVideoVec[i]=nullptr; } } + m_newEncodeVideoVec.clear(); } void EncodeVideoManager::timerFunc() { + // std::string tmp="camId="+m_camId+"videoCaptureElement"; + ClockTimer cl("timerFunc"); std::map<std::string,int> fileMap=m_hiredisTool.findAllFileStatus(); // auto it=fileMap.begin(); for(auto it=fileMap.begin();it!=fileMap.end();it++) @@ -54,5 +60,21 @@ } + else + { + //----/home/basic/work/qiaojia/cut/DS-2CD2T46WDA2-I20180622AACHC30488278/201901/22/2019012210/2019-01-22 10:32:38:171.mp4 + + std::string file_name=it->first; + int begin=file_name.find_last_of("/")+1; + int end= file_name.find(".mp4"); + std::string file_time=file_name.substr(begin,end-begin); + QDateTime dt = QDateTime::fromString(QString::fromStdString(file_time), "yyyy-MM-dd hh:mm:ss:zzz"); + if( (AppUtil::getCurrentUs()-dt.toMSecsSinceEpoch())>5*60*1000*1000) + { + DBG(file_name<<">5*60*1000*1000"); + m_hiredisTool.hashSet(file_list,file_name,RECORD_ENDING); + } + + } } } diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp index 8bf95e3..c8e3733 100644 --- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp +++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp @@ -192,14 +192,18 @@ // int max=appPref.getIntData("n_cut_max_duration"); // recordInit(40,100); videoCaptureElement.registerConnector([&] { - mutex.lock(); - cv::Mat imageTemp = videoCaptureElement.getImage(); +// mutex.lock(); + +// std::string tmp="camId="+m_camId+"videoCaptureElement"; +// ClockTimer cl(tmp); + cv::Mat imageTemp = videoCaptureElement.getImage(); std::string strNewTime = AppUtil::getTimeUSecString();; //DBG("m_camId="<<m_camId<<" strNewTime="<<strNewTime); cv::putText(imageTemp, strNewTime, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5, cv::Scalar(255, 255, 0), 2); + if (m_camId.size() > 0) { @@ -229,9 +233,10 @@ strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString(); } - mutex.unlock(); +// mutex.unlock(); // DBG(strNewTime); - +// std::string tmp1="camId="+m_camId+"strNewTime"+strNewTime; +// ClockTimer cl1(tmp1); if (!faceRpcElement.isBusy()) { // faceRpcElement.setProperty("uuid", uuid); //#todo diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp index f81e18b..4fed07d 100644 --- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp +++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp @@ -134,20 +134,20 @@ //#鍦ㄥ姣斾腑娣诲姞鐗瑰緛鍊� t_json["FaceFeature"] = "base64"; - t_json["personId"] = "wait todo";//鍏宠仈搴曞簱浜哄憳id,浜鸿劯id - t_json["BaseName"] = "wait todo";//鍏宠仈搴曞簱琛ㄥ悕 + 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"] = "wait todo"; + t_json["picName"] = ""; - t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store + t_json["personPicUrl"] = "";//浜哄憳鍥剧墖 store t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃 DBG("picAddress="<< t_json["picAddress"] ); - t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞 - t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞 + t_json["picMaxUrl"] = "";//澶у浘璺緞 + t_json["picLocalUrl"] = "";//鏈湴璺緞 t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥� //#todo t_json["picDate"] = faceExtractQueueTmp[i].scoredRects[j].properties["time"]; @@ -155,8 +155,9 @@ // DBG("timeC ::::B" << t_json["picDate"m_bIsMask].asString()); // t_json["picDate"] = AppUtil::getTimeSecString(); - t_json["content"] = "wait todo"; - t_json["viType"] = "1";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷 + 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: 鏈煡 diff --git a/QiaoJiaSystem/StructureApp/HiredisTool.cpp b/QiaoJiaSystem/StructureApp/HiredisTool.cpp index a54a9bd..6a8715b 100644 --- a/QiaoJiaSystem/StructureApp/HiredisTool.cpp +++ b/QiaoJiaSystem/StructureApp/HiredisTool.cpp @@ -89,15 +89,19 @@ CvUtil::cvMat2Buffer(img,buf); // json["time"]=info.time; json["img"]=std::string(buf.begin(),buf.end()); - // buf.clear(); - std::string strBuf=std::string(buf.begin(),buf.end()); - if(!listLpush(file_name,json.toStyledString())); + if(!checkParam()) { + return false; + } + redisReply *reply; + reply = (redisReply*)redisCommand(m_redis,"lpush %s %s", file_name.c_str(),json.toStyledString().c_str()); + if(!checkResult(reply)) + { return false; } - //DBG(json.toStyledString()); + freeReplyObject(reply); return true; } diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp index bcf0518..d0f6d34 100644 --- a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp +++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.cpp @@ -12,7 +12,9 @@ JudgmentRetrogradeTool::JudgmentRetrogradeTool(const SdkRule &rule) : m_triggerElement(0, 0), m_sdkRule(rule), - pManagerEsDB(nullptr) + pManagerEsDB(nullptr), + pointArray(nullptr), + npts(0) { pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); } @@ -22,6 +24,12 @@ delete pManagerEsDB; pManagerEsDB = nullptr; } + if(pointArray) + { + delete pointArray; + pointArray=nullptr; + } + } bool JudgmentRetrogradeTool::init(QString area, QString line) { @@ -31,12 +39,15 @@ if (arrayAreas.isEmpty()) { return false; } + int size=arrayAreas.size(); QVector<QPoint> vec; - for (int i = 0; i < arrayAreas.size(); ++i) { + pointArray=new cv::Point2i[size]; + for (int i = 0; i < size; ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() * 4; int y = obj.value("y").toDouble() * 4; + pointArray[i]={x,y}; vec.push_back(QPoint(x, y)); } @@ -146,12 +157,23 @@ if (getPerRet(scoredRect.id))//judgment.bool { + DBG("scoredRect.id" << scoredRect.id << " val=" << m_mapPerRet[scoredRect.id]); m_mapPerRet[scoredRect.id] -=2400; - auto t_image = image( - CvUtil::zoomRectEqual(scoredRect.rect, 1.2, 1.2) & cv::Rect(0, 0, image.cols, image.rows)).clone(); +// auto t_image = image( +// CvUtil::zoomRectEqual(scoredRect.rect, 1.2, 1.2) & cv::Rect(0, 0, image.cols, image.rows)).clone(); // auto t_image = image(scoredRect.rect& cv::Rect(0, 0, image.cols, image.rows)).clone(); - std::string imgUrl = uploadImgToFdfs(t_image); + + if(pointArray==nullptr) return; + const cv::Point2i* ppt[1] = { pointArray }; + + int npt[]={npts}; + cv::polylines(image, ppt,npt, 1, true,cv::Scalar(255,255,0)); + cv::arrowedLine(image,m_UpBaseLine.start_Point,m_UpBaseLine.end_Point,cv::Scalar(0,0,255)); + + cv::rectangle(image, scoredRect.rect, cv::Scalar(0, 0, 255), 2); + + std::string imgUrl = uploadImgToFdfs(image); saveInfoToEs(imgUrl, scoredRect); state=true; @@ -243,30 +265,30 @@ t_json["sdkType"] = to_string(m_sdkRule.nSdkType); // t_json["Gender"] = obj.score; - t_json["picName"] = "wait todo";// 鎶撴媿鐓х墖鍚嶇О - t_json["content"] = "wait todo";// 鍐呭鎻忚堪 + t_json["picName"] = "";// 鎶撴媿鐓х墖鍚嶇О + t_json["content"] = "";// 鍐呭鎻忚堪 t_json["personPicUrl"] = "";// 浜哄憳 鍦板簱鍥剧墖 t_json["ChannlId"] = getProperty("ch_id"); // 閫氶亾id t_json["likeDate"] = AppUtil::getTimeSecString(); // 姣斿鏃堕棿 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 鎶撴媿鍦板潃 DBG("picAddress="<<m_sdkRule.strAddr.toStdString()); - t_json["picMaxUrl"] = "wait todo"; // 澶у浘璺緞 + t_json["picMaxUrl"] = ""; // 澶у浘璺緞 - // t_json["Age"] ="wait todo"; + // t_json["Age"] =""; t_json["picDate"] = obj.properties["time"]; // 鎶撴媿鏃堕棿锛屽繀椤绘湁 - t_json["picLocalUrl"] = "wait todo"; // 鏈湴璺緞 + t_json["picLocalUrl"] = ""; // 鏈湴璺緞 t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥 - t_json["likePer"] = obj.score; // 鐩镐技鍊� + t_json["likePer"] = 1.0; // 鐩镐技鍊� - t_json["BaseName"] = "wait todo";// 鍦板簱鍚嶇О + t_json["BaseName"] = "";// 鍦板簱鍚嶇О t_json["videoNum"] = m_sdkRule.strCamId.toStdString();//Video璁惧缂栧彿 t_json["picSmUrl"] = imgUrl; // 鎶撴媿鍥剧墖 t_json["indeviceid"] = appPref.getStringData("fxDevID");;// 璁惧id - t_json["idcard"] = "wait todo"; - t_json["personId"] = "wait todo"; + t_json["idcard"] = ""; + t_json["personId"] = ""; t_json["indevicename"] = appPref.getStringData("fxDevNAME");// 璁惧鍚嶇О t_json["FaceFeature"] = "base64"; t_json["personIsHub"] = m_triggerElement.getTriggerState() ? "1" : "4"; //1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 diff --git a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h index e3cd93f..d69df24 100644 --- a/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h +++ b/QiaoJiaSystem/StructureApp/JudgmentRetrogradeTool.h @@ -22,8 +22,8 @@ #include <jsoncpp/json/json.h> #include <basic/pipe/PipeElement.h> struct VectorPoint { - cv::Point2f start_Point; - cv::Point2f end_Point; + cv::Point2i start_Point; + cv::Point2i end_Point; }; typedef VectorPoint BaseLine; @@ -138,6 +138,9 @@ cv::Mat image; EsDBTool *pManagerEsDB; + cv::Point2i* pointArray; + + int npts; }; diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp index 6897343..3b8498f 100644 --- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp +++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.cpp @@ -5,11 +5,12 @@ //#todo index int -> string NewRecordVideoElement::NewRecordVideoElement(std::string camid) : //videoEncoderElement(cv::Size(1920, 1080), 5, 0), -camID(camid) +camID(camid), +m_bSaveWH(false) { // basicPath(); - isRecord=false; + //isRecord=false; m_cutPath= appPref.getStringData("user.loop.absolute.path"); recordInit(appPref.getIntData("n_cut_min_duration"),appPref.getIntData("n_cut_max_duration")); @@ -19,18 +20,23 @@ std::queue<ImgInfo> empty; empty.swap(m_imgBufQue); -//m_imgBufQue.clear(); + } std::string NewRecordVideoElement::startRecord() { -// ImgInfo info=m_HiredisTool.getImage(camID); - //isRecord=true; + + ImgInfo info; getImg(info); std::string srcPath= getFileName(info.time); m_filename=srcPath; // DBG("m_filename: " << m_filename); + if(!m_bSaveWH) + { + m_bSaveWH=m_hiredisTool.hashSet(camID,"width",info.img.cols) && m_hiredisTool.hashSet(camID,"height",info.img.rows); + DBG("m_bSaveWH="<<m_bSaveWH); + } m_hiredisTool.pushImageBuf(m_filename,info.img); m_hiredisTool.addFileInfo(m_filename,RECORD_DOING); @@ -47,7 +53,7 @@ // DBG("sdkTrigger:" << sdkTrigger); m_hiredisTool.pushImageBuf(m_filename,info.img); m_hiredisTool.addFileInfo(m_filename,RECORD_ENDING); - // isRecord=false; + } void NewRecordVideoElement::doRecord() { @@ -97,6 +103,8 @@ } void NewRecordVideoElement::pushImgBuf(const std::string& time,cv::Mat& img) { +// std::string tmp="camId="+camID+"pushImgBuf"; +// ClockTimer cl(tmp); ImgInfo info; img.copyTo(info.img); // info.img=img; @@ -109,6 +117,8 @@ } void NewRecordVideoElement::getImg(ImgInfo& info) { +// std::string tmp="camId="+camID+"getImg"; +// ClockTimer cl(tmp); info=m_imgBufQue.front(); int size=m_imgBufQue.size(); // DBG("m_imgBufQue size="<<size<<" camId="<<camID<<" fileMin="<<fileMin/2); @@ -200,6 +210,8 @@ } } void NewRecordVideoElement::setSdkTrigger(bool isTrigger) { +// std::string tmp="camId="+camID+"setSdkTrigger"; +// ClockTimer cl(tmp); if(isTrigger) { // DBG("setSdkTrigger time=" << AppUtil::getTimeUSecString()); diff --git a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h index dc35006..2b578f5 100644 --- a/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h +++ b/QiaoJiaSystem/StructureApp/NewRecordVideoElement.h @@ -35,7 +35,6 @@ #define RECORD_STOP (0) #define RECORD_DOING (1) #define RECORD_ENDING (2) - int recordStatus; int videoLength; int recordDelay; @@ -53,7 +52,7 @@ std::queue<ImgInfo> m_imgBufQue; HiredisTool m_hiredisTool; std::string m_filename; - bool isRecord; + bool m_bSaveWH; }; #endif // RECORDVIDEOELEMENT_H diff --git a/QiaoJiaSystem/StructureApp/PerStaticElement.cpp b/QiaoJiaSystem/StructureApp/PerStaticElement.cpp index a8156c3..667bb9a 100644 --- a/QiaoJiaSystem/StructureApp/PerStaticElement.cpp +++ b/QiaoJiaSystem/StructureApp/PerStaticElement.cpp @@ -46,9 +46,9 @@ if(!isInWeek(m_sdkRule.weekRuleVec)) return; int num=0; - - - for(auto obj:mObjs) + bool state=false; + time_t now= AppUtil::getCurrentUs(); + for(auto& obj:mObjs) { if(obj.score < m_sdkRule.fSensitivity)continue; @@ -57,11 +57,31 @@ QPoint center = rect.center(); if(mPolygon.containsPoint(center,Qt::OddEvenFill) || !m_bIsMask) { - for(auto score:m_lastScoreRect) + for(auto ele:m_lastScoreRect) { - if(obj.id == score.id) + if(obj.id == ele.id && (obj.rect&ele.rect).area()>ele.rect.area()*m_sdkRule.fSensitivity) { - obj.isMove = score.isMove; + if(obj.times ==0) + { + obj.times=AppUtil::getCurrentUs(); + } + else if( (now-obj.times)>m_sdkRule.nTriggerDelay*60*1000*1000) + { + DBG("now-obj.times="<<now-obj.times); + if(pointArray!=nullptr) + { + const cv::Point2i* ppt[1] = { pointArray }; + + int npt[]={npts}; + + cv::polylines(image, ppt,npt, 1, true,cv::Scalar(255,255,0)); + } + cv::rectangle(image, obj.rect, cv::Scalar(0, 0, 255), 2); + auto t_image = image(CvUtil::zoomRectEqual(obj.rect, 1.2, 1.2) & cv::Rect(0, 0, image.cols, image.rows)).clone(); + std::string imgUrl=uploadImgToFdfs(t_image); + saveInfoToEs(imgUrl,obj); + obj.times=0; + } //DBG("moving? "<<_TrackingInfo.m_bMoveState) break; } @@ -71,44 +91,47 @@ } } - if((AppUtil::getCurrentUs()-m_lTime)>(m_sdkRule.nTriggerDelay*60*1000*1000)) - { - for(auto& obj: mObjs){ - - //compare with last temp memery and clear temp memery - for(auto ele:m_lastScoreRect) - { - if(ele.id==obj.id) - { - if((obj.rect&ele.rect).area()>ele.rect.area()*m_sdkRule.fSensitivity) - { - //not moving - obj.isMove = true; - - auto t_image = image(CvUtil::zoomRectEqual(obj.rect, 1.2, 1.2) & cv::Rect(0, 0, image.cols, image.rows)).clone(); - std::string imgUrl=uploadImgToFdfs(t_image); - saveInfoToEs(imgUrl,obj); - m_triggerElement.setState(true); - //DBG("not moving") - } - else - { - obj.isMove = false; - m_triggerElement.setState(false); - //DBG("moving") - } - break; - } - } - //do temp memery - - } - // m_lastScoreRect = mObjs; - m_lTime =AppUtil::getCurrentUs(); - } - m_lastScoreRect=mObjs; - m_triggerElement.triggerOnce(); +// if((AppUtil::getCurrentUs()-m_lTime)>(m_sdkRule.nTriggerDelay*60*1000*1000)) +// { +// for(auto& obj: mObjs){ + +// //compare with last temp memery and clear temp memery +// for(auto ele:m_lastScoreRect) +// { +// if(ele.id==obj.id) +// { +// if((obj.rect&ele.rect).area()>ele.rect.area()*m_sdkRule.fSensitivity) +// { +// //not moving +// obj.isMove = true; + +// auto t_image = image(CvUtil::zoomRectEqual(obj.rect, 1.2, 1.2) & cv::Rect(0, 0, image.cols, image.rows)).clone(); +// std::string imgUrl=uploadImgToFdfs(t_image); +// saveInfoToEs(imgUrl,obj); +// m_triggerElement.setState(true); +// //DBG("not moving") +// } +// else +// { +// obj.isMove = false; +// m_triggerElement.setState(false); +// //DBG("moving") +// } +// break; +// } +// } +// //do temp memery + +// } +// // m_lastScoreRect = mObjs; +// m_lTime =AppUtil::getCurrentUs(); +// } + +// m_lastScoreRect=mObjs; + + m_triggerElement.setState(true); + m_triggerElement.triggerOnce(); fireConnectors(); @@ -149,6 +172,9 @@ m_bIsMask=false; return;//do not detect } + int size=arrayAreas.size(); + npts=size; + pointArray=new cv::Point2i[size]; for(int i = 0;i < arrayAreas.size();++i) { QJsonValue jsonValue = arrayAreas[i]; @@ -211,29 +237,29 @@ t_json["sdkType"] =to_string(m_sdkRule.nSdkType); // t_json["Gender"] = obj.score; - t_json["picName"] = "wait todo";// 鎶撴媿鐓х墖鍚嶇О - t_json["content"] = "wait todo";// 鍐呭鎻忚堪 + t_json["picName"] = "";// 鎶撴媿鐓х墖鍚嶇О + t_json["content"] = "";// 鍐呭鎻忚堪 t_json["personPicUrl"] = "";// 浜哄憳 鍦板簱鍥剧墖 t_json["ChannlId"] = getProperty("ch_id"); // 閫氶亾id t_json["likeDate"] =AppUtil::getTimeSecString(); // 姣斿鏃堕棿 t_json["picAddress"] =m_sdkRule.strAddr.toStdString();// 鎶撴媿鍦板潃 - t_json["picMaxUrl"] = "wait todo"; // 澶у浘璺緞 + t_json["picMaxUrl"] = ""; // 澶у浘璺緞 - // t_json["Age"] ="wait todo"; + // t_json["Age"] =""; t_json["picDate"] = obj.properties["time"]; // 鎶撴媿鏃堕棿锛屽繀椤绘湁 - t_json["picLocalUrl"] = "wait todo"; // 鏈湴璺緞 + t_json["picLocalUrl"] = ""; // 鏈湴璺緞 t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥 - t_json["likePer"] = obj.score; // 鐩镐技鍊� + t_json["likePer"] = 1.0; // 鐩镐技鍊� - t_json["BaseName"] = "wait todo";// 鍦板簱鍚嶇О + t_json["BaseName"] = "";// 鍦板簱鍚嶇О t_json["videoNum"] = m_sdkRule.strCamId.toStdString();//Video璁惧缂栧彿 t_json["picSmUrl"] = imgUrl; // 鎶撴媿鍥剧墖 t_json["indeviceid"] = appPref.getStringData("fxDevID");;// 璁惧id - t_json["idcard"] = "wait todo"; - t_json["personId"] = "wait todo"; + t_json["idcard"] = ""; + t_json["personId"] = ""; t_json["indevicename"] = appPref.getStringData("fxDevNAME");// 璁惧鍚嶇О t_json["FaceFeature"] = "base64"; t_json["personIsHub"] = m_triggerElement.getTriggerState()?"1":"4"; //1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 diff --git a/QiaoJiaSystem/StructureApp/PerStaticElement.h b/QiaoJiaSystem/StructureApp/PerStaticElement.h index edb88b8..fb55313 100644 --- a/QiaoJiaSystem/StructureApp/PerStaticElement.h +++ b/QiaoJiaSystem/StructureApp/PerStaticElement.h @@ -80,6 +80,8 @@ unsigned long long m_lTime; EsDBTool* pManagerEsDB; bool m_bIsMask; + cv::Point2i* pointArray; + int npts; }; #endif // PAELEMENT_H diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp index b605b07..c081c6b 100644 --- a/QiaoJiaSystem/StructureApp/PerimeterElement.cpp +++ b/QiaoJiaSystem/StructureApp/PerimeterElement.cpp @@ -21,7 +21,8 @@ mRealNum(0), m_triggerElement(rule.nTriggerDelay*8,0), pManagerEsDB(nullptr), - m_bIsMask(true) + m_bIsMask(true), + pointArray(nullptr) { pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); @@ -31,6 +32,11 @@ if (pManagerEsDB) { delete pManagerEsDB; pManagerEsDB = nullptr; + } + if(pointArray) + { +// delete[] pointArray[0]; + delete[] pointArray; } } @@ -157,13 +163,29 @@ if (m_triggerElement.getTriggerState() ) { if(num > 0) { - cv::Mat t_image = image(CutMask()).clone(); - if(t_image.empty()) + + + + if(pointArray!=nullptr) { - DBG("t_image empty"); - return; + const cv::Point2i* ppt[1] = { pointArray }; + + int npt[]={npts}; + + cv::polylines(image, ppt,npt, 1, true,cv::Scalar(255,255,0)); } - std::string imgUrl = uploadImgToFdfs(t_image); + + for(auto rect:m_recVec) + { + cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2); + } +// cv::Mat t_image = image(CutMask()).clone(); +// if(t_image.empty()) +// { +// DBG("t_image empty"); +// return; +// } + std::string imgUrl = uploadImgToFdfs(image); saveInfoToEs(imgUrl, picDate); } DBG("num=" << num << " lastnum=" << mRealNum); @@ -235,12 +257,22 @@ } int size = arrayAreas.size(); npts = size; +// pointArray=new cv::Point2i*[1]; +// pointArray[0]=new cv::Point2i[size]; + + pointArray=new cv::Point2i[npts]; + + for (int i = 0; i < size; ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() * 4; int y = obj.value("y").toDouble() * 4; + + pointArray[i]={x,y}; + + if(m_sdkRule.nSdkType == PerimeterSdk) { poly1.push_back(Point(x,y)); @@ -312,31 +344,31 @@ // DBG("to_string(m_sdkRule.nSdkType)="<<to_string(m_sdkRule.nSdkType)); // t_json["Gender"] = obj.score; - t_json["picName"] = "wait todo";// 鎶撴媿鐓х墖鍚嶇О - t_json["content"] = "wait todo";// 鍐呭鎻忚堪 + t_json["picName"] = "";// 鎶撴媿鐓х墖鍚嶇О + t_json["content"] = "";// 鍐呭鎻忚堪 t_json["personPicUrl"] = "";// 浜哄憳 鍦板簱鍥剧墖 t_json["ChannlId"] = getProperty("ch_id"); // 閫氶亾id t_json["likeDate"] = AppUtil::getTimeSecString(); // 姣斿鏃堕棿 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 鎶撴媿鍦板潃 DBG("picAddress="<<m_sdkRule.strAddr.toStdString()); - t_json["picMaxUrl"] = "wait todo"; // 澶у浘璺緞 + t_json["picMaxUrl"] = ""; // 澶у浘璺緞 // t_json["Age"] ="wait todo"; t_json["picDate"] = time; // 鎶撴媿鏃堕棿锛屽繀椤绘湁 DBG("picDate="<<time); - t_json["picLocalUrl"] = "wait todo"; // 鏈湴璺緞 + t_json["picLocalUrl"] = ""; // 鏈湴璺緞 t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥 - t_json["likePer"] = "0"; // 鐩镐技鍊� + t_json["likePer"] = 1.0; // 鐩镐技鍊� - t_json["BaseName"] = "wait todo";// 鍦板簱鍚嶇О + t_json["BaseName"] = "";// 鍦板簱鍚嶇О t_json["videoNum"] = m_sdkRule.strCamId.toStdString();//Video璁惧缂栧彿 t_json["picSmUrl"] = imgUrl; // 鎶撴媿鍥剧墖 t_json["indeviceid"] = appPref.getStringData("fxDevID");;// 璁惧id - t_json["idcard"] = "wait todo"; - t_json["personId"] = "wait todo"; + t_json["idcard"] = ""; + t_json["personId"] = ""; t_json["indevicename"] = appPref.getStringData("fxDevNAME");// 璁惧鍚嶇О t_json["FaceFeature"] = "base64"; t_json["personIsHub"] = m_triggerElement.getTriggerState() ? "1" : "4"; //1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 @@ -416,7 +448,4 @@ // DBG("RECT x="<<rect.x<<"y"<<rect.y<<"w"<<rect.width<<"h"<<rect.height); return rect; } -bool PerimeterElement::isAnd() -{ -} diff --git a/QiaoJiaSystem/StructureApp/PerimeterElement.h b/QiaoJiaSystem/StructureApp/PerimeterElement.h index 3e6e35e..24f32f7 100644 --- a/QiaoJiaSystem/StructureApp/PerimeterElement.h +++ b/QiaoJiaSystem/StructureApp/PerimeterElement.h @@ -66,7 +66,6 @@ void setMask(std::string mask); bool isInWeek(const std::vector<LActRuleWeekRecord>& ruleWeek); cv::Rect CutMask(); - bool isAnd(); private: cv::Mat image; //cv::Mat mask; @@ -83,12 +82,12 @@ EsDBTool* pManagerEsDB; - int npts; + int npts; std::vector<cv::Rect> m_recVec; bool m_bIsMask; std::vector<Point> poly1; - + cv::Point2i* pointArray; }; diff --git a/QiaoJiaSystem/StructureApp/PersonElement.cpp b/QiaoJiaSystem/StructureApp/PersonElement.cpp index 6509449..5a73369 100644 --- a/QiaoJiaSystem/StructureApp/PersonElement.cpp +++ b/QiaoJiaSystem/StructureApp/PersonElement.cpp @@ -91,7 +91,8 @@ // faceRpcElement.setProperty("frame_number", frame_number); t_json["picDate"] = obj.properties["time"]; t_json["content"] = "wait todo"; - t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷 + t_json["sdkType"] = std::to_string(m_sdkRule.nSdkType); + //t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷 t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃 diff --git a/QiaoJiaSystem/StructureApp/TrackingTrigger.h b/QiaoJiaSystem/StructureApp/TrackingTrigger.h index a9aa7a8..3f1019c 100644 --- a/QiaoJiaSystem/StructureApp/TrackingTrigger.h +++ b/QiaoJiaSystem/StructureApp/TrackingTrigger.h @@ -9,8 +9,9 @@ using namespace std; struct ScoredRect { - ScoredRect() : id(-1) ,isMove(false){} + ScoredRect() : id(-1) ,isMove(false),times(0){} bool isMove; + time_t times; float score; cv::Rect rect; long id; diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h index 64e0d36..684890d 100644 --- a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h +++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h @@ -44,7 +44,7 @@ QDateTime tim_start_time;//寮�濮嬩笅杞界殑鏂囦欢鐨勬椂闂� int n_duration;//姣忔涓嬭浇鐨勬椂闂撮暱搴︼紝鍗曚綅锛氬皬鏃� QString str_brand;//鍝佺墝 - QString str_reserved;//棰勭暀 + QString str_reserved;//鎴浘鍦板潃 }; struct Record_Cam_Dev diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp index 93ca3ab..8b8a3e1 100644 --- a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp +++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp @@ -453,7 +453,39 @@ return false; } } +bool LDBTool::updateCamDevSnapshot(const QString& strIp,const QString& imgUrl) +{ + QMutexLocker mutexLocker(&m_mutexVisit);//TODO + QSqlTableModel pModel(NULL, m_db); + pModel.setTable("cam_dev"); + pModel.setFilter( + QObject::tr("ip = '%1'").arg(strIp)); + pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange + pModel.select(); + QSqlRecord rec = pModel.record(0); + rec.setValue("reserved", imgUrl); + + int rowCount = pModel.rowCount(); + if (rowCount > 0) + { + pModel.setRecord(0, rec);//TODO + } + + m_db.transaction();//寮�濮嬩簨鍔℃搷浣� + + if (pModel.submitAll()) + { + m_db.commit();//鎻愪氦 + return true; + } + else + { + m_db.rollback();//鍥炴粴 + ERR("updateCamDevSnapshot err ,Database Error: " << pModel.lastError().text().toStdString()); + return false; + } +} int LDBTool::searchCamDevNumber(void) { QSqlTableModel pModel(NULL, m_db); pModel.setTable("cam_dev"); diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h index a3eaa3e..3521d79 100644 --- a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h +++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.h @@ -52,6 +52,7 @@ std::list<Record_Cam_Dev> searchCamDevTableAll(void); int searchCamDevNumber(void); bool searchCamDevByCamId(QString strCamId); + bool updateCamDevSnapshot(const QString& strIp ,const QString& imgUrl); //load_file_info bool insertLoadFileTable(Record_Load_File_info loadfileRec); diff --git a/QiaoJiaSystem/YoloServer/main.cpp b/QiaoJiaSystem/YoloServer/main.cpp index a44a900..20f2a6c 100644 --- a/QiaoJiaSystem/YoloServer/main.cpp +++ b/QiaoJiaSystem/YoloServer/main.cpp @@ -29,7 +29,7 @@ // return -1; // } - int gpuindex = 1; + int gpuindex = 0; int poolNum = 1; int portNum = 10003; -- Gitblit v1.8.0