From 866e0bf538d3cf97ff34bd405167538d10503a99 Mon Sep 17 00:00:00 2001 From: xuxiuxi <554325746@qq.com> Date: 星期三, 06 三月 2019 11:50:09 +0800 Subject: [PATCH] Merge branch 'yw.1.2.fixbug' of http://192.168.1.226:10010/r/development/c++ into yw.1.2.fixbug --- QiaoJiaSystem/EncodeServer/CMakeLists.txt | 21 QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h | 94 +-- QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt | 1 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp | 70 ++ QiaoJiaSystem/YoloServer/ImageDrawElement.cpp | 4 QiaoJiaSystem/VideoToImageMulth/main.cpp | 107 ++++ QiaoJiaSystem/VideoAnalysFromHC/main.cpp | 14 QiaoJiaSystem/StructureApp/AppPipeController.h | 6 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp | 235 +++++++-- QiaoJiaSystem/FaceSearchServer/main.cpp | 2 QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt | 49 + QiaoJiaSystem/CMakeLists.txt | 2 QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h | 4 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h | 97 ++- QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h | 3 QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h | 54 +- QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp | 13 QiaoJiaSystem/YoloServer/YoloRpcElement.cpp | 2 QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 103 ++-- QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h | 4 QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp | 58 +- QiaoJiaSystem/DataManagerServer/http_configserver.cpp | 12 QiaoJiaSystem/FaceDetectServer/main_detect.cpp | 2 QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp | 237 ++++----- QiaoJiaSystem/FaceSearchServer/CMakeLists.txt | 2 QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp | 2 QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt | 3 QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h | 10 QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp | 1 QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h | 32 + QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp | 58 ++ QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp | 22 QiaoJiaSystem/StructureApp/FaceExtractElement.cpp | 33 33 files changed, 829 insertions(+), 528 deletions(-) diff --git a/QiaoJiaSystem/CMakeLists.txt b/QiaoJiaSystem/CMakeLists.txt index a2e7f1d..1db175e 100644 --- a/QiaoJiaSystem/CMakeLists.txt +++ b/QiaoJiaSystem/CMakeLists.txt @@ -34,6 +34,6 @@ #add_subdirectory(VideoToImage) add_subdirectory(UnitTest) add_subdirectory(VideoToImageMulth) -add_subdirectory(GB28181DecoderModel) +#add_subdirectory(GB28181DecoderModel) #add_subdirectory(FaceSearchDbWithImg) diff --git a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp index 8aea381..f93e4e0 100644 --- a/QiaoJiaSystem/DataManagerServer/http_configserver.cpp +++ b/QiaoJiaSystem/DataManagerServer/http_configserver.cpp @@ -1447,12 +1447,12 @@ fdfsClient.rwLock.unlock(); } - //# http client 127.0.0.1:9999/resetFdfs - std::string http_cmd = "http://127.0.0.1:9999/resetFdfs"; - HttpRequestWithCrul httpRequestWithCrul; - std::string response_bak = ""; - std::string postParams_bak = ""; - httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak); +// //# http client 127.0.0.1:9999/resetFdfs +// std::string http_cmd = "http://127.0.0.1:9999/resetFdfs"; +// HttpRequestWithCrul httpRequestWithCrul; +// std::string response_bak = ""; +// std::string postParams_bak = ""; +// httpRequestWithCrul.curl_post_req("http://127.0.0.1:9999/resetFdfs", postParams_bak, response_bak); } } else { return "{\"ret_status\": \"浼犺緭閿欒锛岃妫�鏌ワ紒\"}"; diff --git a/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h b/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h index 1852583..636a246 100644 --- a/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h +++ b/QiaoJiaSystem/DataManagerServer/vss/dao/BaseDao.h @@ -134,10 +134,10 @@ // appConfig.getIntProperty("db_port") // )) { if (conn->connect( - "basic_business_table", + "EGEyesForVSS", "127.0.0.1", "root", - "root", + "123456", 3306 )) { cout << "connect success" << endl; diff --git a/QiaoJiaSystem/EncodeServer/CMakeLists.txt b/QiaoJiaSystem/EncodeServer/CMakeLists.txt index c5685b6..660085b 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 @@ -79,22 +77,23 @@ ../../../BasicPlatForm/libs/ffmpeg/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 - ../../../BasicPlatForm/basic/timer_counter/TimerRecorder.cpp + ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp + ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp + ../StructureApp/NewRecordVideoElement.cpp + ../../../BasicPlatForm/basic/timer_counter/TimerRecorder.cpp + ../../../BasicPlatForm/basic/util/BASE64/Base64.cpp - EncodeVideoManager.cpp - EncodeVideo.cpp - ../StructureApp/HiredisTool.cpp - main.cpp + EncodeVideoManager.cpp + EncodeVideo.cpp + ../StructureApp/HiredisTool.cpp + main.cpp ) target_link_libraries(${PROJECT_NAME} ${LIBS} diff --git a/QiaoJiaSystem/FaceDetectServer/main_detect.cpp b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp index e086792..dabd089 100644 --- a/QiaoJiaSystem/FaceDetectServer/main_detect.cpp +++ b/QiaoJiaSystem/FaceDetectServer/main_detect.cpp @@ -47,7 +47,7 @@ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); auto ich = Ice::initialize(argc, argv); - appPref.setLongData("gpu.index", 1); + appPref.setLongData("gpu.index", 0); appPref.setLongData("thread.max", 32); IceRpcServer<FaceDetectServerI> server("faceServer", 10002, "tcp"); diff --git a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt index f214035..26f313c 100644 --- a/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt +++ b/QiaoJiaSystem/FaceSearchServer/CMakeLists.txt @@ -73,7 +73,7 @@ ../../../BasicPlatForm/libs/Ice-3.7.0/lib64 ../../../BasicPlatForm/libs/opencv/lib ../../../BasicPlatForm/libs/ffmpeg/lib - ../../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/cpu + ../../../BasicPlatForm/libs/Casia_Face/FaceSdk/lib/gpu ../../../BasicPlatForm/libs/crul/lib ../../../BasicPlatForm/libs/jsoncpp/lib ../../../BasicPlatForm/libs/libuuid/lib diff --git a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt index 2c8486f..e2cee97 100644 --- a/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt +++ b/QiaoJiaSystem/FaceSearchServer/LoadFeaTool/CMakeLists.txt @@ -20,7 +20,6 @@ ../../../../BasicPlatForm/libs/jsoncpp/lib ) - add_executable(syncDBClient main.cpp diff --git a/QiaoJiaSystem/FaceSearchServer/main.cpp b/QiaoJiaSystem/FaceSearchServer/main.cpp index bfbebd2..fa14be5 100644 --- a/QiaoJiaSystem/FaceSearchServer/main.cpp +++ b/QiaoJiaSystem/FaceSearchServer/main.cpp @@ -21,7 +21,7 @@ DBG("\n\n\nstart\n\n"); - appPref.setLongData("thread.max", 32); + appPref.setLongData("thread.max", 16); //#todo // appPref.setStringData("ipAdd", "192.168.1.185"); diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp index ebf1de9..5106cbf 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.cpp @@ -128,6 +128,10 @@ return bufsize; } +/*** + * 瑙g爜绾跨▼ + * @param p_this + */ void BASICGB28181::FFmpegDecoderJPG::BareFlowDecoderThd(FFmpegDecoderJPG *p_this) { DBG(p_this->m_camIdx << " BareFlowDecoderThd ok ... gpuIdx is " << p_this->m_gpuIdx); p_this->m_running = true; @@ -188,11 +192,6 @@ //# todo save package p_this->frame_number++; - //DBG("GotPicture "<<m_camId<<":"<<frame_number); - //鏀惧湪姝ゅ鏄洜涓轰箣鍓嶆斁鍦ㄥ墠闈�,鏀跺埌鐨勫抚涓嶅畬鎴� - p_this->SaveToPacketVector(pkt); - p_this->CheckSave(); - int err6 = avcodec_send_packet(ctx, &pkt); av_packet_unref(&pkt); int err7 = avcodec_receive_frame(ctx, frame); @@ -201,12 +200,17 @@ usleep(40000); continue; } + //DBG("GotPicture "<<m_camId<<":"<<frame_number); + //鏀惧湪姝ゅ鏄洜涓轰箣鍓嶆斁鍦ㄥ墠闈�,鏀跺埌鐨勫抚涓嶅畬鎴� + p_this->SaveToPacketVector(pkt); + p_this->CheckSave(); + // BASICGB28181::avframe_to_cvmat(frame).copyTo(p_this->m_image); p_this->m_image = std::move(BASICGB28181::avframe_to_cvmat(frame)); #ifdef TestCode { -// TestCode +// TestCode 娴嬭瘯浠g爜淇濆瓨鍥剧墖鍒版湰鍦� ClockTimer cl("TestCode"); std::string strNewTime2 = AppUtil::getTimeUSecString(); cv::putText(p_this->m_image, strNewTime2, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, @@ -228,7 +232,7 @@ #ifdef TestCode DBG("emitSigal(\"DecoderImageOK\") begin"); #endif - + //瑙﹀彂淇″彿 gSignalLock.emitSigal(p_this->m_camIdx + "DecoderImageOK"); //#ifdef TestCode // DBG("emitSigal(\"DecoderImageOK\") after"); @@ -278,7 +282,7 @@ bool BASICGB28181::FFmpegDecoderJPG::stopThd() { TryCath( - DBG(m_camIdx << " FFmpegDecoderJPG stopThd ... "); + DBG(m_camIdx << " FFmpegDecoderJPG stopThd ... " << m_camIdx); m_running = false; ); return true; @@ -380,9 +384,11 @@ int64_t firstKeyFrameDts = m_packetsVec[0].m_packet.dts; for (const auto &item:m_packetsVec) { if (item.m_frameId < lastFrameId) { + DBG("item.m_frameId < lastFrameId " << item.m_frameId << " " << lastFrameId); conversion(const_cast<AVPacket *> (&item.m_packet), firstKeyFramePts, firstKeyFrameDts, video_st); av_write_frame(m_pOutFmtCtx, &item.m_packet); } else { + DBG("item.m_frameId > lastFrameId " << item.m_frameId << " " << lastFrameId); break; } } diff --git a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h index 1f495fc..a593baa 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h +++ b/QiaoJiaSystem/GB28181DecoderModel/FFmpegDecoderJPG.h @@ -13,13 +13,12 @@ #include <iostream> #include <unistd.h> #include <MyQueue.h> -#include <Debug.h> #include <atomic> -#include "GlobalSignalWaitLock.hpp" #include "opencv2/core.hpp" #include "opencv2/highgui.hpp" #include <list> +#include "GlobalSignalWaitLock.hpp" #include "basic_struct_for_video_image.h" extern "C" diff --git a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp index 88a8c6c..44378a5 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/GB28181Server.cpp @@ -2,6 +2,7 @@ // Created by ps on 19-3-1. // +#include <basic/debug/Debug.h> #include "GB28181Server.h" bool bGetLoaclRes = {false}; @@ -50,6 +51,7 @@ bool GB28181Server::initServer() { bool iRet = C_InitSDK(&GBServerParam, &MysqlConnParam, NULL, enventcallback); + DBG("iRet is " << iRet); sleep(90); return iRet; diff --git a/QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp b/QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp index 83b1365..de41b0c 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp +++ b/QiaoJiaSystem/GB28181DecoderModel/GlobalSignalWaitLock.hpp @@ -6,6 +6,7 @@ #define GB28181SDK_GLOBALSIGNALWAITLOCK_H #include <iostream> +#include <Debug.h> #include <basic/util/thread/RWLock.hpp> //#define TryCath(CODE) try { \ diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp index 77862e7..bf433a6 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp @@ -6,18 +6,17 @@ #include <qt5/QtCore/QDateTime> #include <basic/util/app/AppPreference.hpp> #include "VideoCaptureElementWithRtp.h" +#include <VideoToImageMulth/RtspAnalysManager.h> //std::string BASICGB28181::VideoCaptureElementWithRtp::m_chanPubID; //BASICGB28181::FFmpegDecoderJPG BASICGB28181::VideoCaptureElementWithRtp::m_fFmpegDecoderJPG; BASICGB28181::VideoCaptureElementWithRtp::VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, - int gpuIdx) : m_chanPubID(chanPubID), m_fps(fps), - m_running(false), - m_waitSignal(false), - m_streamTransType(streamTransType), - m_gpuIdx(gpuIdx), - m_userdata((long) this) { + int gpuIdx, RtspAnalysManager *manager) + : m_chanPubID(chanPubID), m_fps(fps), m_running(false), + m_waitSignal(false), m_streamTransType(streamTransType), + m_gpuIdx(gpuIdx), m_userdata((long) this), m_pManager(manager) { // m_chanPubID = chanPubID; m_cutPath = appPref.getStringData("user.loop.absolute.path"); @@ -154,7 +153,7 @@ cv::Mat copyMat; std::string imageName = p_this->m_fFmpegDecoderJPG.GetImageName(); p_this->m_image.copyTo(copyMat); -// m_pManager->SaveImageToRedis(m_camId, imageName, copyMat); + m_pManager->SaveImageToRedis(p_this->m_chanPubID, imageName, copyMat); } p_this->submit(); } diff --git a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h index a4fa33b..77751c3 100644 --- a/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h +++ b/QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.h @@ -8,16 +8,19 @@ #include "FFmpegDecoderJPG.h" #include "28181SDK.h" #include <basic/pipe/PipeElement.h> -#include "GlobalSignalWaitLock.hpp" +//#include <RtspAnalysManager.h> +//#include <VideoToImageMulth/RtspAnalysManager.h> + +class RtspAnalysManager; namespace BASICGB28181 { class VideoCaptureElementWithRtp : public basic::PipeElement { public: - explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1); + explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1, + RtspAnalysManager *manager = nullptr); virtual ~VideoCaptureElementWithRtp(); - /*** * 鑾峰彇褰撳墠瀹炴椂娴佹帴鏀舵暟鎹嚎绋嬭繍琛岀姸鎬� @@ -47,6 +50,7 @@ FFmpegDecoderJPG m_fFmpegDecoderJPG; cv::Mat m_image; long m_userdata; + RtspAnalysManager *m_pManager; std::atomic<bool> m_running; std::atomic<bool> m_waitSignal; diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.h b/QiaoJiaSystem/StructureApp/AppPipeController.h index 2018f12..367af7a 100644 --- a/QiaoJiaSystem/StructureApp/AppPipeController.h +++ b/QiaoJiaSystem/StructureApp/AppPipeController.h @@ -116,10 +116,10 @@ int m_index; std::string m_camId; std::string m_folderPath; - Json::Value m_json; - Json::Value m_json_Record; +// Json::Value m_json; +// Json::Value m_json_Record; +// Json::FastWriter m_fastWriter; - Json::FastWriter m_fastWriter; FastFdsWithLock *fdfsClient; bool bRecordVideoEnable; diff --git a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp index b0eab37..a8aa27e 100644 --- a/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp +++ b/QiaoJiaSystem/StructureApp/FaceExtractElement.cpp @@ -38,8 +38,7 @@ appPref.getIntData("faceSear.port"), "tcp"), // faceSearchRpcClient("faceCmServer", "", 10004, "tcp") m_sdkRule(rule), - m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp") -{ + m_rpcClient("RtspAnalysServer", "127.0.0.1", appPref.getIntData("RpcServerPort"), "tcp") { sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); if (!sharedMemory->create(4608 * 2592 * 4)) { sharedMemory->attach(); @@ -66,8 +65,7 @@ std::vector<FaceToExtract> faceExtractQueueTmp; { std::lock_guard<std::mutex> lg(imageQueueMutex); - if (faceExtractQueue.empty()) - { + if (faceExtractQueue.empty()) { ERR("faceExtractQueue.empty "); return; } @@ -106,7 +104,7 @@ // cv::imwrite(string1, image); // } if (feature.empty()) { - INFO("No Face Find: "<<getProperty("imgKey")); + INFO("No Face Find: " << getProperty("imgKey")); continue; } features.clear(); @@ -119,12 +117,15 @@ CvUtil::cvMat2Buffer(faceExtractQueueTmp[i].faceImages[j], buffer); std::string strImgUrlTmp = ""; fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); - // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); - DBG("strImgUrlTmp="<<strImgUrlTmp); + // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); + DBG("strImgUrlTmp=" << strImgUrlTmp); strImgUrl.clear(); strImgUrl = strImgUrlTmp; // strImgUrl.append("/").append(strImgUrlTmp); fdfsClient->rwLock.unlock(); + } else { + strImgUrl = ""; + ERR("fdfsClient is nullptr ???"); } //鎷兼帴json @@ -151,7 +152,7 @@ t_json["personPicUrl"] = "";//浜哄憳鍥剧墖 store t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃 - DBG("picAddress="<< t_json["picAddress"] ); + DBG("picAddress=" << t_json["picAddress"]); t_json["picMaxUrl"] = "";//澶у浘璺緞 t_json["picLocalUrl"] = "";//鏈湴璺緞 t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥� @@ -163,7 +164,8 @@ 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["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: 鏈煡 @@ -219,22 +221,19 @@ t_json["indevicename"] = appPref.getStringData("fxDevNAME"); std::string strImageKey = faceExtractQueueTmp[i].scoredRects[j].properties["imgKey"]; - INFO("SaveImageKey To ES: "<<strImageKey); + INFO("SaveImageKey To ES: " << strImageKey); t_json["imgKey"] = strImageKey; try { auto server = m_rpcClient.getServer(); - if (!server) - { + if (!server) { ERR("server is null"); //return; } - INFO("Record Video "<<strImageKey); + INFO("Record Video " << strImageKey); server->recordVideo(strImageKey); - } - catch (std::exception &e) - { - ERR("Record Video Err: "<<strImageKey <<" Message: "<<e.what()); + } catch (std::exception &e) { + ERR("Record Video Err: " << strImageKey << " Message: " << e.what()); //return; } auto faceSearchServer = faceSearchRpcClient.getServer(); diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp index 9ab6f01..8ff149f 100644 --- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp +++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp @@ -6,6 +6,7 @@ #include <basic/util/opencv/CvUtil.h> #include <QJsonDocument> #include <QJsonObject> + #define GETSCORE(IDENT) appPref.getFloatData(IDENT) == -1 ? 95 : appPref.getFloatData(IDENT); //************************************ @@ -30,7 +31,7 @@ } //todo appPref.getStringData("face.detect.proxy") -FaceRpcElement::FaceRpcElement(string shareMemoryName,const SdkRule& rule) : +FaceRpcElement::FaceRpcElement(string shareMemoryName, const SdkRule &rule) : //#todo rpcClient(appPref.getStringData("faceDete.proxy"), appPref.getStringData("faceDete.ip"), appPref.getIntData("faceDete.port"), "tcp"), @@ -40,8 +41,7 @@ trackingTrigger(nullptr), m_sdkRule(rule), m_bIsMask(true), - m_bSetWH(false) -{ + m_bSetWH(false) { sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); if (!sharedMemory->create(4608 * 2592 * 4)) { sharedMemory->attach(); @@ -50,21 +50,21 @@ // string t_camIdex = getProperty("dev_id"); //#todo - string t_camIdex; - if (shareMemoryName.find("/")) { - string_replace(shareMemoryName, "//", "/"); - auto dev_pos = shareMemoryName.find("/cut/") + 5; - auto ch_pos = shareMemoryName.find("/", dev_pos) + 1; - auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1); - auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos); - t_camIdex.append(str_device_id).append(str_ch_id); - } else { - t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc")); - } +// string t_camIdex; +// if (shareMemoryName.find("/")) { +// string_replace(shareMemoryName, "//", "/"); +// auto dev_pos = shareMemoryName.find("/cut/") + 5; +// auto ch_pos = shareMemoryName.find("/", dev_pos) + 1; +// auto str_device_id = shareMemoryName.substr(dev_pos, ch_pos - dev_pos - 1); +// auto str_ch_id = shareMemoryName.substr(ch_pos, shareMemoryName.find("/", ch_pos) - ch_pos); +// t_camIdex.append(str_device_id).append(str_ch_id); +// } else { +// t_camIdex = shareMemoryName.substr(0, shareMemoryName.rfind("faceRpc")); +// } float t_score = m_sdkRule.nQuality; - DBG(" TESTCODE getValue" << t_camIdex << " " << t_score << " " << t_score / 100); + DBG(" TESTCODE getValue" << shareMemoryName << " " << t_score << " " << t_score / 100); t_score = t_score / 100; @@ -89,8 +89,7 @@ // string string1(AppUtil::getTimeString() + "-ff2" + getProperty("time") + ".jpg"); // cv::imwrite(string1, image); // } - if(!isInWeek(m_sdkRule.weekRuleVec)) - { + if (!isInWeek(m_sdkRule.weekRuleVec)) { ERR("In Week"); return; } @@ -110,11 +109,10 @@ int y = face.rcFace.top; int w = face.rcFace.right - face.rcFace.left; int h = face.rcFace.bottom - face.rcFace.top; - QRect re(x,y,w,h); + QRect re(x, y, w, h); QPoint center = re.center(); - if(m_bIsMask && !mPolygon.containsPoint(center,Qt::OddEvenFill)) - { - ERR("m_bIsMask :"<<m_bIsMask) + if (m_bIsMask && !mPolygon.containsPoint(center, Qt::OddEvenFill)) { + ERR("m_bIsMask :" << m_bIsMask) return; } scoredRect.rect = {x, y, w, h}; @@ -131,19 +129,18 @@ trackingTrigger->getLastRect().properties["time"] = getProperty("time"); trackingTrigger->getLastRect().properties["detectscore"] = scoredRect.score; trackingTrigger->getLastRect().properties["imgKey"] = getProperty("imgKey"); - INFO("FaceRpcElement SaveToES: "<<getProperty("imgKey")); + INFO("FaceRpcElement SaveToES: " << getProperty("imgKey")); triggerFaces.push_back(face); triggerMats.push_back(image( CvUtil::zoomRectEqual(scoredRect.rect, 1.5, 1.5) & cv::Rect(0, 0, image.cols, image.rows)).clone()); triggerScoredRects.push_back(trackingTrigger->getLastRect()); } else { - INFO("No Face Find: "<<getProperty("imgKey")); + INFO("No Face Find: " << getProperty("imgKey")); // DBG("trackingTrigger->triggerOnce(scoredRect) is false "); } } - if(faces.empty()) - { - INFO("No Face Find: "<<getProperty("imgKey")); + if (faces.empty()) { + INFO("No Face Find: " << getProperty("imgKey")); } trackingTrigger->triggerLine(); // DBG("faces.size " << faces.size()); @@ -190,60 +187,54 @@ image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); } value.copyTo(image); - if(!m_bSetWH) - { + if (!m_bSetWH) { setMask(m_sdkRule.strAreas.toStdString()); - m_bSetWH=true; + m_bSetWH = true; } } bool FaceRpcElement::getTriggerState() const { return m_triggerElement.getTriggerState(); } -void FaceRpcElement::setMask(std::string mask) -{ + +void FaceRpcElement::setMask(std::string mask) { QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); - if(arrayAreas.isEmpty()) - { - m_bIsMask=false; + if (arrayAreas.isEmpty()) { + m_bIsMask = false; return;//do not detect } - float sizeW=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"width")/480; - float sizeH=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"height")/270; - for(int i = 0;i < arrayAreas.size();++i) - { + float sizeW = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "width") / 480; + float sizeH = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "height") / 270; + for (int i = 0; i < arrayAreas.size(); ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); - int x = obj.value("x").toDouble() *sizeW ; - int y = obj.value("y").toDouble() *sizeH; - mPolygon<<(QPoint(x,y)); - DBG("width="<<sizeW); - DBG("height="<<sizeH); + int x = obj.value("x").toDouble() * sizeW; + int y = obj.value("y").toDouble() * sizeH; + mPolygon << (QPoint(x, y)); + DBG("width=" << sizeW); + DBG("height=" << sizeH); } } -QJsonArray FaceRpcElement::getJsonArrayFromQString(const QString& strJson) -{ + +QJsonArray FaceRpcElement::getJsonArrayFromQString(const QString &strJson) { QJsonDocument jsonDocument = QJsonDocument::fromJson(strJson.toLocal8Bit()); - if( jsonDocument.isNull() ){ - DBG("please check the string"<< strJson.toStdString()); + if (jsonDocument.isNull()) { + DBG("please check the string" << strJson.toStdString()); return QJsonArray(); } QJsonArray jsonArray = jsonDocument.array(); return jsonArray; } -bool FaceRpcElement::isInWeek(const std::vector<LActRuleWeekRecord>& ruleWeek) -{ + +bool FaceRpcElement::isInWeek(const std::vector<LActRuleWeekRecord> &ruleWeek) { int nWeek = QDate::currentDate().dayOfWeek(); - for(int i = 0;i < ruleWeek.size();++i) - { - if(ruleWeek[i].m_nType == nWeek) - { + for (int i = 0; i < ruleWeek.size(); ++i) { + if (ruleWeek[i].m_nType == nWeek) { QString strCurrent = QDateTime::currentDateTime().toString("hh:mm"); - if(strCurrent >= ruleWeek[i].m_strBegin && strCurrent <= ruleWeek[i].m_strEnd) - { - return true; + if (strCurrent >= ruleWeek[i].m_strBegin && strCurrent <= ruleWeek[i].m_strEnd) { + return true; } } } diff --git a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h index 622bc1e..991d212 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h +++ b/QiaoJiaSystem/VideoAnalysFromHC/BaiscSDKAnalysVideo.h @@ -23,38 +23,38 @@ using TASK_FUNCTION = std::function<void(std::shared_ptr<finishSdkHdlManage> &, int)>; public: BaiscSDKAnalysVideo(TASK_FUNCTION task_f = nullptr) : m_task_function(task_f) { - resetFdfs(); - { - std::thread httpServer([&]() { - HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 9090, 1); - httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&BaiscSDKAnalysVideo::resetFdfs, this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3)); - httpSrvRetRecieve.start(); - httpSrvRetRecieve.waitForShutDown(); - }); - httpServer.detach(); - } +// resetFdfs(); +// { +// std::thread httpServer([&]() { +// HttpSrvRetRecieve httpSrvRetRecieve("0.0.0.0", 9090, 1); +// httpSrvRetRecieve.setInfo("^/resetFdfs$", "POST", std::bind(&BaiscSDKAnalysVideo::resetFdfs, this, +// std::placeholders::_1, +// std::placeholders::_2, +// std::placeholders::_3)); +// httpSrvRetRecieve.start(); +// httpSrvRetRecieve.waitForShutDown(); +// }); +// httpServer.detach(); +// } } ~BaiscSDKAnalysVideo() { } - std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "") { - - std::thread reset([&]() { - fdfsClient.rwLock.rdlock(); - if (fdfsClient.fastFds != nullptr) { - delete fdfsClient.fastFds; - } - fdfsClient.fastFds = new FastFds("fastDfsClient.conf"); - fdfsClient.rwLock.unlock(); - }); - reset.detach(); - - return ""; - } +// std::string resetFdfs(std::string ip = "", unsigned int port = 0, std::string content = "") { +// +// std::thread reset([&]() { +// fdfsClient.rwLock.rdlock(); +// if (fdfsClient.fastFds != nullptr) { +// delete fdfsClient.fastFds; +// } +// fdfsClient.fastFds = new FastFds("fastDfsClient.conf"); +// fdfsClient.rwLock.unlock(); +// }); +// reset.detach(); +// +// return ""; +// } private: virtual void doFunc(std::shared_ptr<getsdkHdlManage> spPacket) { diff --git a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt index d0067c6..0d4e6e6 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt +++ b/QiaoJiaSystem/VideoAnalysFromHC/CMakeLists.txt @@ -9,6 +9,7 @@ set(CMAKE_BUILD_TYPE debug) add_compile_options(-fPIC) add_definitions(-DGLOG) +add_definitions(-DGB28181) add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive) SET(SOURCES @@ -161,7 +162,7 @@ # cudart # cublas opencv_world - jsoncpp +# jsoncpp curl uuid pthread diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp index 0058a02..db552a4 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp +++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp @@ -68,8 +68,9 @@ } void RtspAnalysElement::init() { - auto lst = m_lDBTool->searchCamDevTableAll(); Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); +#ifndef GB28181 + auto lst = m_lDBTool->searchCamDevTableAll(); appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); @@ -79,19 +80,17 @@ int CamCount = appPref.getIntData("CamStep"); auto itor = lst.begin(); - if(startCamNO >= lst.size()) - { + if (startCamNO >= lst.size()) { ERR("startCamNO > lst.size()"); return; } - for(int i=0; i < startCamNO; i++){ + for (int i = 0; i < startCamNO; i++) { itor++; } for (int i = 0; i < CamCount; i++) { - if (itor == lst.end()) - { + if (itor == lst.end()) { ERR("itor == lst.end()"); return; } @@ -104,16 +103,13 @@ rule.second.strAddr = itor->str_addr; rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(itor->str_cam_dev_id, rule.first); - if(rule.second.nSdkType == PerStaticSdk) - { - float temp=1-(float)(rule.second.nThreshold)/100; - rule.second.fSensitivity=(75+25*temp)/100; + if (rule.second.nSdkType == PerStaticSdk) { + float temp = 1 - (float) (rule.second.nThreshold) / 100; + rule.second.fSensitivity = (75 + 25 * temp) / 100; - } - else if(rule.second.nSdkType != FaceSdk) - { - float temp=1-(float)(rule.second.nThreshold)/100; - rule.second.fSensitivity=(5+90*temp)/100; + } else if (rule.second.nSdkType != FaceSdk) { + float temp = 1 - (float) (rule.second.nThreshold) / 100; + rule.second.fSensitivity = (5 + 90 * temp) / 100; } // if (rule.second.nThreshold < 5 ) // { @@ -140,7 +136,6 @@ addCamera(t_camIdex, ruleMap); itor++; } - // for (auto item : lst) { // std::string t_camIdex = item.str_cam_dev_id.toStdString(); // std::string rtsp_url = rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), @@ -190,6 +185,49 @@ ERR("searchCamDevTableAll size is 0"); } +#else + auto lst = m_lDBTool->searchCamDevTableByType(1); + + appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); + appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); + if (lst.size() > 0) { +// Json::Value json; + + for (auto &item : lst) { + std::string t_camIdex = item.str_cam_dev_id.toStdString(); + std::string rtsp_url = "GB28181"; +// rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), +// item.str_password.toStdString(), item.str_brand.toStdString()); + SdkRuleMap ruleMap = m_lDBTool->searchSdkRuleByCamId(item.str_cam_dev_id); + for (auto &rule:ruleMap) { + + rule.second.strAddr = item.str_addr; + rule.second.weekRuleVec = m_lDBTool->searchCameraWeekRuleByCamId(item.str_cam_dev_id, rule.first); + + if (rule.second.nSdkType == PerStaticSdk) { + float temp = 1 - (float) (rule.second.nThreshold) / 100; + rule.second.fSensitivity = (75 + 25 * temp) / 100; + + } else if (rule.second.nSdkType != FaceSdk) { + float temp = 1 - (float) (rule.second.nThreshold) / 100; + rule.second.fSensitivity = (5 + 90 * temp) / 100; + } + DBG("fSensitivity" << rule.second.fSensitivity); + } + appPref.setStringData(t_camIdex + "rtsp", rtsp_url); + // appPref.setStringData(t_camIdex+"addr", item.str_addr.toStdString()); +// json["rtsp"] = rtsp_url; + // json["addr"] = item.str_addr.toStdString(); + + INFO("cam add is " << item.str_addr.toStdString()); + + addCamera(t_camIdex, ruleMap); + } + } else { + ERR("searchCamDevTableAll size is 0"); + } + +#endif } RtspAnalysElement::~RtspAnalysElement() { diff --git a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h index 21db01e..01d9abd 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h +++ b/QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.h @@ -21,7 +21,7 @@ virtual ~RtspAnalysElement(); - int addCamera(const std::string &, const std::map<int, SdkRule>& sdkRuleMap); + int addCamera(const std::string &, const std::map<int, SdkRule> &sdkRuleMap); int removeCamera(const std::string &); @@ -40,7 +40,7 @@ static std::vector<int> chnString2Vec(std::string str_list); - void setDataByType(Json::Value& json,const SdkRule& rule); +// void setDataByType(Json::Value& json,const SdkRule& rule); private: LDBTool *m_lDBTool; diff --git a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp index a82bf09..3a39a22 100644 --- a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp +++ b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp @@ -66,9 +66,15 @@ int main(int argc, char **argv) { SAVE_APP_ARGS - std::cout<<__DATE__<<" "<<__TIME__<<std::endl; + std::cout << __DATE__ << " " << __TIME__ << std::endl; #ifdef GLOG - ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); + ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); +#endif + +#ifndef GB28181 + DBG("no GB28181"); +#else + DBG("hava GB28181"); #endif appPref.setLongData("gpu.index", 0); @@ -77,7 +83,7 @@ //todo appPref.setIntData("CamStart", atoi(argv[1])); appPref.setIntData("CamStep", atoi(argv[2])); - appPref.setIntData("RpcServerPort",atoi(argv[3])); + appPref.setIntData("RpcServerPort", atoi(argv[3])); //#todo get from config File // appPref.setStringData("ipAdd", "192.168.1.185"); @@ -138,7 +144,7 @@ bool loopRet = true; while (loopRet) { - switch (_dbTool.searchDevTypeFromConfigTable()) { + switch (_dbTool.searchDevTypeFromConfigTable()) { case 0: { DBG("case 0"); diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h index 684890d..0ae7935 100644 --- a/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h +++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h @@ -7,10 +7,9 @@ #include <QDateTime> #include <QVector> #include <map> -struct Record_Storage_Dev -{ - Record_Storage_Dev() - { + +struct Record_Storage_Dev { + Record_Storage_Dev() { n_id = 0; str_storage_dev_id = ""; str_dev_name = ""; @@ -47,10 +46,8 @@ QString str_reserved;//鎴浘鍦板潃 }; -struct Record_Cam_Dev -{ - Record_Cam_Dev() - { +struct Record_Cam_Dev { + Record_Cam_Dev() { n_id = 0; str_name = ""; str_addr = ""; @@ -63,6 +60,7 @@ str_password = ""; str_brand = ""; str_reserved = ""; + n_type = -1; } int n_id;//鑷id @@ -77,13 +75,12 @@ QString str_password;//鎽勫儚鏈哄瘑鐮� QString str_brand;//鎽勫儚鏈哄搧鐗� QString str_reserved;//棰勭暀 + int n_type;//棰勭暀 }; -struct Record_Cam_Chn -{ +struct Record_Cam_Chn { - Record_Cam_Chn() - { + Record_Cam_Chn() { n_id = 0; str_storage_dev_id = ""; n_chn = 0; @@ -121,8 +118,7 @@ QString str_reserved;//棰勭暀 }; -struct Record_Load_File_info -{ +struct Record_Load_File_info { // Record_Load_File_info() // { @@ -146,8 +142,7 @@ QString str_reserved;//棰勭暀 }; -struct Record_Cut_Video_info -{ +struct Record_Cut_Video_info { // Record_Cut_Video_info() // { @@ -173,8 +168,7 @@ QString str_reserved;//棰勭暀 }; -struct Record_Sdk_Hdl_info -{ +struct Record_Sdk_Hdl_info { // Record_Sdk_Hdl_info() // { @@ -196,11 +190,9 @@ QString str_reserved;//棰勭暀 }; -struct Record_Chn_Sdk -{ +struct Record_Chn_Sdk { - Record_Chn_Sdk() - { + Record_Chn_Sdk() { n_id = 0; str_storage_dev_id = ""; n_chn = 0; @@ -221,11 +213,9 @@ QString str_reserved;//棰勭暀 }; -struct Record_Cam_Sdk -{ +struct Record_Cam_Sdk { - Record_Cam_Sdk() - { + Record_Cam_Sdk() { n_id = 0; str_cam_dev_id = ""; str_sdks = ""; @@ -242,10 +232,8 @@ QString str_reserved;//棰勭暀 }; -struct Record_Config -{ - Record_Config() - { +struct Record_Config { + Record_Config() { str_alarm_ip = ""; n_alarm_port = 0; str_web_pic_ip = ""; @@ -257,7 +245,7 @@ n_dev_type = 0; str_reserved = ""; dev_id = ""; - dev_name= ""; + dev_name = ""; } QString str_alarm_ip;//鎶ヨ鏈嶅姟鍣╥p @@ -274,16 +262,15 @@ QString dev_name; }; -struct LActRuleWeekRecord -{ - LActRuleWeekRecord() - { - m_strCamId=""; - m_nSdkType=0; +struct LActRuleWeekRecord { + LActRuleWeekRecord() { + m_strCamId = ""; + m_nSdkType = 0; m_nType = 0; m_strBegin = ""; m_strEnd = ""; } + QString m_strCamId; int m_nSdkType; int m_nType; //鍛ㄥ嚑 @@ -292,27 +279,26 @@ }; -struct SdkRule -{ - SdkRule() - { - nIsRun=0; - nSdkType = 0 ; +struct SdkRule { + SdkRule() { + nIsRun = 0; + nSdkType = 0; strCamId = ""; strAreas = ""; strLine = ""; strImageUrl = ""; nTriggerTolerance = 0; - nTriggerDelay=0; - nQuality=0; - nThreshold=0; + nTriggerDelay = 0; + nQuality = 0; + nThreshold = 0; nAlarmNumUpperLimit = 0; nAlarmNumLowerLimit = 0; - fSensitivity=0; - strExAreas=""; - strLine=""; - strAddr=""; + fSensitivity = 0; + strExAreas = ""; + strLine = ""; + strAddr = ""; } + int nSdkType; QString strCamId; QString strAreas; //鐩戞祴鍖哄煙 @@ -333,10 +319,10 @@ std::vector<LActRuleWeekRecord> weekRuleVec; }; -typedef std::map<int,SdkRule> SdkRuleMap; -enum SdkType -{ - SdkTypeStart=0, + +typedef std::map<int, SdkRule> SdkRuleMap; +enum SdkType { + SdkTypeStart = 0, FaceSdk, CarSdk, YoloSdk, //浜轰綋 diff --git a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp index 42f22eb..8070b13 100644 --- a/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp +++ b/QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp @@ -406,7 +406,7 @@ ERR("deleteLDeviceTable err ,Database Error: " \ << pModel_cam.lastError().text().toStdString() \ << pModel_sdk.lastError().text().toStdString() \ - << pModel_week.lastError().text().toStdString() ); + << pModel_week.lastError().text().toStdString()); // QMessageBox::warning(NULL,QObject::tr("deleteLDeviceTable"),QObject::tr("Database Error: %1").arg(pModel.lastError().text())); return false; } @@ -453,8 +453,8 @@ return false; } } -bool LDBTool::updateCamDevSnapshot(const QString& strIp,const QString& imgUrl) -{ + +bool LDBTool::updateCamDevSnapshot(const QString &strIp, const QString &imgUrl) { QMutexLocker mutexLocker(&m_mutexVisit);//TODO QSqlTableModel pModel(NULL, m_db); pModel.setTable("cam_dev"); @@ -467,25 +467,22 @@ rec.setValue("reserved", imgUrl); int rowCount = pModel.rowCount(); - if (rowCount > 0) - { + if (rowCount > 0) { pModel.setRecord(0, rec);//TODO } m_db.transaction();//寮�濮嬩簨鍔℃搷浣� - if (pModel.submitAll()) - { + if (pModel.submitAll()) { m_db.commit();//鎻愪氦 return true; - } - else - { + } 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"); @@ -530,8 +527,8 @@ return lst; } -bool LDBTool::searchCamDevByCamId(QString strCamId) -{ + +bool LDBTool::searchCamDevByCamId(QString strCamId) { QMutexLocker mutexLocker(&m_mutexVisit);//TODO std::list<Record_Cam_Dev> lst; QSqlTableModel pModel(NULL, m_db); @@ -2435,7 +2432,7 @@ //config 淇敼瑁佸壀瑙嗛鏃堕暱 -bool LDBTool::updateConfigTableByCutDuration(int n_cut_max_duration,int n_cut_min_duration) { +bool LDBTool::updateConfigTableByCutDuration(int n_cut_max_duration, int n_cut_min_duration) { QMutexLocker mutexLocker(&m_mutexVisit);//TODO QSqlTableModel pModel(NULL, m_db); pModel.setTable("config"); @@ -2492,17 +2489,14 @@ lRec.dev_name = rec.value("dev_name").toString(); } lRec.dev_id = QString::fromStdString(appConfig.getStringProperty("DEV_ID")); - if(lRec.n_cut_max_duration == 0) - { + if (lRec.n_cut_max_duration == 0) { lRec.n_cut_max_duration = 20; } - if(lRec.n_cut_min_duration == 0) - { + if (lRec.n_cut_min_duration == 0) { lRec.n_cut_min_duration = 4; } return lRec; } - bool LDBTool::insertRecordVedioPath(QString pathKey, QString filePath) { @@ -2580,76 +2574,68 @@ } +bool LDBTool::updateCameraWeekRule(const LActRuleWeekRecord &weekRule) { + QMutexLocker mutexLocker(&m_mutexVisit);//TODO + QSqlTableModel pModel(NULL, m_db); + pModel.setTable("rule_week"); + pModel.setFilter(QObject::tr("camera_id = '%1' and type='%2' and sdk_type='%3'").arg(weekRule.m_strCamId).arg( + weekRule.m_nType).arg(weekRule.m_nSdkType)); + pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange + pModel.select(); + QSqlRecord rec = pModel.record(0); + //rec.setGenerated("id", false); + rec.setValue("camera_id", weekRule.m_strCamId); + rec.setValue("sdk_type", weekRule.m_nSdkType); + rec.setValue("type", weekRule.m_nType); + rec.setValue("begin_time", weekRule.m_strBegin); + rec.setValue("end_time", weekRule.m_strEnd); + + int rowCount = pModel.rowCount(); + if (rowCount == 0) { + pModel.insertRecord(-1, rec); + } else if (rowCount > 0) { + pModel.setRecord(0, rec);//TODO + } + + m_db.transaction();//寮�濮嬩簨鍔℃搷浣� + + if (pModel.submitAll()) { + m_db.commit();//鎻愪氦 + return true; + } else { + m_db.rollback();//鍥炴粴 + ERR("updateCameraWeekRule ,pModel_load Error: " << pModel.lastError().text().toStdString()); + + return false; + } +} + +std::vector<LActRuleWeekRecord> LDBTool::searchCameraWeekRuleByCamId(const QString &camId, const int &sdkType) { + std::vector<LActRuleWeekRecord> vecWeek; + QMutexLocker mutexLocker(&m_mutexVisit);//TODO + QSqlTableModel pModel(NULL, m_db); + pModel.setTable("rule_week"); + pModel.setFilter(QObject::tr("camera_id = '%1' and sdk_type='%2'").arg(camId).arg(sdkType)); + pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange + pModel.select(); + + int rowCount = pModel.rowCount(); + for (int i = 0; i < rowCount; ++i) { + LActRuleWeekRecord lActRuleWeekRec; + QSqlRecord rec = pModel.record(i); + lActRuleWeekRec.m_nSdkType = rec.value("sdk_type").toInt(); + lActRuleWeekRec.m_nType = rec.value("type").toInt(); + lActRuleWeekRec.m_strBegin = rec.value("begin_time").toString(); + lActRuleWeekRec.m_strEnd = rec.value("end_time").toString(); + lActRuleWeekRec.m_strCamId = rec.value("camera_id").toString(); + vecWeek.push_back(lActRuleWeekRec); + } + + return vecWeek; +} - bool LDBTool::updateCameraWeekRule(const LActRuleWeekRecord& weekRule) - { - QMutexLocker mutexLocker(&m_mutexVisit);//TODO - QSqlTableModel pModel(NULL, m_db); - pModel.setTable("rule_week"); - pModel.setFilter(QObject::tr("camera_id = '%1' and type='%2' and sdk_type='%3'").arg(weekRule.m_strCamId).arg(weekRule.m_nType).arg(weekRule.m_nSdkType)); - pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange - pModel.select(); - QSqlRecord rec = pModel.record(0); - //rec.setGenerated("id", false); - rec.setValue("camera_id",weekRule.m_strCamId); - rec.setValue("sdk_type",weekRule.m_nSdkType); - rec.setValue("type", weekRule.m_nType); - rec.setValue("begin_time", weekRule.m_strBegin); - rec.setValue("end_time",weekRule.m_strEnd); - - int rowCount = pModel.rowCount(); - if (rowCount == 0) - { - pModel.insertRecord(-1, rec); - } - else if (rowCount > 0) - { - pModel.setRecord(0, rec);//TODO - } - - m_db.transaction();//寮�濮嬩簨鍔℃搷浣� - - if (pModel.submitAll()) { - m_db.commit();//鎻愪氦 - return true; - } else { - m_db.rollback();//鍥炴粴 - ERR("updateCameraWeekRule ,pModel_load Error: " << pModel.lastError().text().toStdString()); - - return false; - } - } - std::vector<LActRuleWeekRecord> LDBTool::searchCameraWeekRuleByCamId(const QString& camId,const int& sdkType) - { - std::vector<LActRuleWeekRecord> vecWeek; - QMutexLocker mutexLocker(&m_mutexVisit);//TODO - QSqlTableModel pModel(NULL, m_db); - pModel.setTable("rule_week"); - pModel.setFilter(QObject::tr("camera_id = '%1' and sdk_type='%2'").arg(camId).arg(sdkType)); - pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange - pModel.select(); - - int rowCount = pModel.rowCount(); - for(int i = 0;i < rowCount;++i) - { - LActRuleWeekRecord lActRuleWeekRec; - QSqlRecord rec = pModel.record(i); - lActRuleWeekRec.m_nSdkType = rec.value("sdk_type").toInt(); - lActRuleWeekRec.m_nType = rec.value("type").toInt(); - lActRuleWeekRec.m_strBegin = rec.value("begin_time").toString(); - lActRuleWeekRec.m_strEnd = rec.value("end_time").toString(); - lActRuleWeekRec.m_strCamId=rec.value("camera_id").toString(); - vecWeek.push_back(lActRuleWeekRec); - } - - return vecWeek; - } - - - -bool LDBTool::updateSdkRule(const SdkRule& sdkRule) -{ +bool LDBTool::updateSdkRule(const SdkRule &sdkRule) { QMutexLocker mutexLocker(&m_mutexVisit);//TODO QSqlTableModel pModel(NULL, m_db); pModel.setTable("sdk_rule"); @@ -2660,73 +2646,66 @@ rec.setValue("cam_id", sdkRule.strCamId); rec.setValue("sdk_type", sdkRule.nSdkType); rec.setValue("area", sdkRule.strAreas); - rec.setValue("ex_area",sdkRule.strExAreas); - rec.setValue("line",sdkRule.strLine); - rec.setValue("ex_line",sdkRule.strExLine); - rec.setValue("alarm_delay",sdkRule.nTriggerDelay); - rec.setValue("tolerance",sdkRule.nTriggerTolerance); - rec.setValue("alarm_num_upper",sdkRule.nAlarmNumUpperLimit); - rec.setValue("alarm_num_lower",sdkRule.nAlarmNumLowerLimit); - rec.setValue("broadcast_area",sdkRule.strBroadcast); - rec.setValue("is_run",sdkRule.nIsRun); - rec.setValue("img_threshold",sdkRule.nThreshold); - rec.setValue("img_quality",sdkRule.nQuality); + rec.setValue("ex_area", sdkRule.strExAreas); + rec.setValue("line", sdkRule.strLine); + rec.setValue("ex_line", sdkRule.strExLine); + rec.setValue("alarm_delay", sdkRule.nTriggerDelay); + rec.setValue("tolerance", sdkRule.nTriggerTolerance); + rec.setValue("alarm_num_upper", sdkRule.nAlarmNumUpperLimit); + rec.setValue("alarm_num_lower", sdkRule.nAlarmNumLowerLimit); + rec.setValue("broadcast_area", sdkRule.strBroadcast); + rec.setValue("is_run", sdkRule.nIsRun); + rec.setValue("img_threshold", sdkRule.nThreshold); + rec.setValue("img_quality", sdkRule.nQuality); int rowCount = pModel.rowCount(); - if (rowCount == 0) - { + if (rowCount == 0) { pModel.insertRecord(-1, rec); - } - else if (rowCount > 0) - { + } else if (rowCount > 0) { pModel.setRecord(0, rec);//TODO } m_db.transaction();//寮�濮嬩簨鍔℃搷浣� - if (pModel.submitAll()) - { + if (pModel.submitAll()) { m_db.commit();//鎻愪氦 return true; - } - else - { + } else { m_db.rollback();//鍥炴粴 ERR("updateSdkRule ,pModel_load Error: " << pModel.lastError().text().toStdString()); return false; } } -SdkRuleMap LDBTool::searchSdkRuleByCamId(const QString& camId) -{ + +SdkRuleMap LDBTool::searchSdkRuleByCamId(const QString &camId) { QMutexLocker mutexLocker(&m_mutexVisit);//TODO QSqlTableModel pModel(NULL, m_db); pModel.setTable("sdk_rule"); pModel.setFilter(QObject::tr("cam_id = '%1' ").arg(camId)); pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); - std::map<int,SdkRule> ruleMap; + std::map<int, SdkRule> ruleMap; //std::vector<SdkRule> ruleVec; int rowCount = pModel.rowCount(); - for(int i=0;i<rowCount;++i) - { + for (int i = 0; i < rowCount; ++i) { SdkRule rule; QSqlRecord rec = pModel.record(i); - rule.strCamId=rec.value("cam_id").toString(); - rule.strAreas=rec.value("area").toString(); - rule.strExAreas=rec.value("ex_area").toString(); - rule.strLine=rec.value("line").toString(); - rule.strExLine=rec.value("ex_line").toString(); - rule.nTriggerDelay=rec.value("alarm_delay").toInt(); - rule.nTriggerTolerance=rec.value("tolerance").toInt(); - rule.nQuality=rec.value("img_quality").toInt(); - rule.nThreshold=rec.value("img_threshold").toInt(); - rule.nAlarmNumUpperLimit=rec.value("alarm_num_upper").toInt(); - rule.nAlarmNumLowerLimit=rec.value("alarm_num_lower").toInt(); - rule.strBroadcast=rec.value("broadcast_area").toString(); - rule.nIsRun=rec.value("is_run").toInt(); - rule.nSdkType=rec.value("sdk_type").toInt(); - ruleMap[rule.nSdkType]=rule; + rule.strCamId = rec.value("cam_id").toString(); + rule.strAreas = rec.value("area").toString(); + rule.strExAreas = rec.value("ex_area").toString(); + rule.strLine = rec.value("line").toString(); + rule.strExLine = rec.value("ex_line").toString(); + rule.nTriggerDelay = rec.value("alarm_delay").toInt(); + rule.nTriggerTolerance = rec.value("tolerance").toInt(); + rule.nQuality = rec.value("img_quality").toInt(); + rule.nThreshold = rec.value("img_threshold").toInt(); + rule.nAlarmNumUpperLimit = rec.value("alarm_num_upper").toInt(); + rule.nAlarmNumLowerLimit = rec.value("alarm_num_lower").toInt(); + rule.strBroadcast = rec.value("broadcast_area").toString(); + rule.nIsRun = rec.value("is_run").toInt(); + rule.nSdkType = rec.value("sdk_type").toInt(); + ruleMap[rule.nSdkType] = rule; //ruleVec.push_back(rule); } @@ -2742,7 +2721,8 @@ std::list<Record_Cam_Dev> lst; QSqlTableModel pModel(NULL, m_db); pModel.setTable("cam_dev"); - pModel.setFilter(QObject::tr((string("cam_dev_id != '' and cam_dev_id is not null and type='")+to_string(type)+"'").c_str())); + pModel.setFilter(QObject::tr( + (string("cam_dev_id != '' and cam_dev_id is not null and type='") + to_string(type) + "'").c_str())); pModel.setEditStrategy(QSqlTableModel::OnManualSubmit);//OnManualSubmit OnFieldChange pModel.select(); @@ -2763,6 +2743,7 @@ lChannelRec.str_password = rec.value("password").toString(); lChannelRec.str_brand = rec.value("brand").toString(); lChannelRec.str_reserved = rec.value("reserved").toString(); + lChannelRec.n_type = rec.value("type").toInt(); lst.push_back(lChannelRec); } } diff --git a/QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt b/QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt index f8df435..8b92de1 100644 --- a/QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt +++ b/QiaoJiaSystem/VideoToImageMulth/CMakeLists.txt @@ -5,6 +5,7 @@ set(CMAKE_BUILD_TYPE debug) add_compile_options(-fPIC) add_definitions(-DGLOG) +add_definitions(-DGB28181) add_definitions(-DDEBUG_ERR -DDEBUG_INFO -fpermissive) add_definitions(-Wall -Wextra) SET(LIBS @@ -12,7 +13,7 @@ Ice crypto - + mysqlpp #ffmpeg avformat @@ -35,9 +36,12 @@ jsoncpp pthread hiredis + 28181sdk + mysqlclient + StreamParse + ) include_directories( - #glog ../../../BasicPlatForm/libs/glog/include ./rpc @@ -46,11 +50,14 @@ ../VideoServer/QiaoJia/DB ../VideoServer/QiaoJia/dispatchTool ../StructureApp/ + ../GB28181DecoderModel + ../VideoToImageMulth + ../../../BasicPlatForm/basic/pipe_element/ffmpeg/ + ../../../BasicPlatForm/basic/debug/ ../../../BasicPlatForm/ ../../../BasicPlatForm/basic/pipe/ - ../../../BasicPlatForm/libs/opencv/include @@ -66,9 +73,14 @@ ../../BasicPlatForm/libs/hiredis-master/include ../../../BasicPlatForm/basic/timer_counter/ + ../../../BasicPlatForm/libs/GB28181/include + + ../../../BasicPlatForm/libs/mysqlpp/include + ../../../BasicPlatForm/libs/mysql/include/mysql/ ) link_directories( + ../../../BasicPlatForm/libs/GB28181/libs #glog ../../../BasicPlatForm/libs/glog/lib ../../../BasicPlatForm/libs/openssl/lib @@ -76,26 +88,31 @@ ../../../BasicPlatForm/libs/ffmpeg/lib ../../../BasicPlatForm/libs/jsoncpp/lib -# ../../../BasicPlatForm/libs/libuuid/lib + # ../../../BasicPlatForm/libs/libuuid/lib ../../../BasicPlatForm/libs/Ice-3.7.0/lib64 ../../../BasicPlatForm/libs/hiredis-master/lib + ../../../BasicPlatForm/libs/mysqlpp/lib ) add_executable(${PROJECT_NAME} - ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp + ../GB28181DecoderModel/FFmpegDecoderJPG.cpp + ../GB28181DecoderModel/GB28181Server.cpp + ../GB28181DecoderModel/VideoCaptureElementWithRtp.cpp + ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoChangeScore.cpp ../../../BasicPlatForm/basic/util/BASE64/Base64.cpp -# ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp - ../VideoServer/QiaoJia/DB/LDBTool.cpp - ./rpc/RtspAnalysServer.cpp - RtspCaptureElement.cpp - RtspAnalysManager.cpp - ../StructureApp/HiredisTool.cpp - ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h - ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp - ./RtspImageRedis.h - ./RtspImageRedis.cpp - main.cpp + # ../../../BasicPlatForm/basic/pipe_element/ffmpeg/FfmpegElement.cpp + ../VideoServer/QiaoJia/DB/LDBTool.cpp + ./rpc/RtspAnalysServer.cpp + RtspCaptureElement.cpp + RtspAnalysManager.cpp + ../StructureApp/HiredisTool.cpp + ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h + ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp + ../../../BasicPlatForm/basic/util/net_config/net_config.cpp + ./RtspImageRedis.h + ./RtspImageRedis.cpp + main.cpp ) target_link_libraries(${PROJECT_NAME} ${LIBS} diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp index dd25e47..7c814eb 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp +++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp @@ -40,45 +40,69 @@ //鍒濆鍖栧嚱鏁� void RtspAnalysManager::init() { INFO("MYH DEBUG HERE") - auto lst = m_lDBTool->searchCamDevTableAll(); - Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); - //璁剧疆瑙嗛鐨勬渶闀垮拰鏈�鐭椂闂撮棿闅� - appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); - appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); - if (lst.size() > 0) { - int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep"); - int CamCount = appPref.getIntData("CamStep"); - INFO("StartCamNO: " << startCamNO << " CamStep: " << CamCount); - auto itor = lst.begin(); + m_GB28181_Enable = appPref.getIntData("GB28181_Enable"); + //#todo GB28181 + if (m_GB28181_Enable) { + auto lst = m_lDBTool->searchCamDevTableByType(1); + Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); - if (startCamNO >= lst.size()) { - ERR("startCamNO > lst.size()"); - return; + //璁剧疆瑙嗛鐨勬渶闀垮拰鏈�鐭椂闂撮棿闅� + appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); + appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); + if (lst.size() > 0) { + for (auto item : lst) { + std::string t_camIdex = item.str_cam_dev_id.toStdString(); + std::string rtsp_url = "GB28181"; +// rtspAddrBuild(item.str_ip.toStdString(), 554, item.str_username.toStdString(), +// item.str_password.toStdString(), item.str_brand.toStdString()); + INFO("cam add is " << item.str_addr.toStdString()); + addCamera(t_camIdex, rtsp_url); + } + } else { + ERR("searchCamDevTableAll size is 0"); } - for (int i = 0; i < startCamNO; i++) { + } else { + auto lst = m_lDBTool->searchCamDevTableAll(); + Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); - std::string t_camIdex = itor->str_cam_dev_id.toStdString(); - std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), - itor->str_password.toStdString(), itor->str_brand.toStdString()); - INFO("JumpCam: " << t_camIdex << " URL: " << rtsp_url); - itor++; - } + //璁剧疆瑙嗛鐨勬渶闀垮拰鏈�鐭椂闂撮棿闅� + appPref.setIntData("n_cut_max_duration", lst_dev.n_cut_max_duration); + appPref.setIntData("n_cut_min_duration", lst_dev.n_cut_min_duration); + if (lst.size() > 0) { + int startCamNO = appPref.getIntData("CamStart") * appPref.getIntData("CamStep"); + int CamCount = appPref.getIntData("CamStep"); + INFO("StartCamNO: " << startCamNO << " CamStep: " << CamCount); + auto itor = lst.begin(); - for (int i = 0; i < CamCount; i++) { - if (itor == lst.end()) { - ERR("itor == lst.end()"); + if (startCamNO >= lst.size()) { + ERR("startCamNO > lst.size()"); return; } - std::string t_camIdex = itor->str_cam_dev_id.toStdString(); - std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), - itor->str_password.toStdString(), itor->str_brand.toStdString()); - INFO("cam add is " << itor->str_addr.toStdString()); - addCamera(t_camIdex, rtsp_url); - itor++; - } + for (int i = 0; i < startCamNO; i++) { + + std::string t_camIdex = itor->str_cam_dev_id.toStdString(); + std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), + itor->str_password.toStdString(), itor->str_brand.toStdString()); + INFO("JumpCam: " << t_camIdex << " URL: " << rtsp_url); + itor++; + } + + for (int i = 0; i < CamCount; i++) { + if (itor == lst.end()) { + ERR("itor == lst.end()"); + return; + } + std::string t_camIdex = itor->str_cam_dev_id.toStdString(); + std::string rtsp_url = rtspAddrBuild(itor->str_ip.toStdString(), 554, itor->str_username.toStdString(), + itor->str_password.toStdString(), itor->str_brand.toStdString()); + INFO("cam add is " << itor->str_addr.toStdString()); + + addCamera(t_camIdex, rtsp_url); + itor++; + } // for (auto item : lst) // { @@ -90,10 +114,10 @@ // addCamera(t_camIdex, rtsp_url); // // } - } else { - ERR("searchCamDevTableAll size is 0"); + } else { + ERR("searchCamDevTableAll size is 0"); + } } - } RtspAnalysManager::~RtspAnalysManager() { @@ -103,6 +127,11 @@ delete controller.second; } m_controllers.clear(); + for (auto controller: m_controllers_videoCapElem) { + INFO("Delete Controller: " << controller.first); + delete controller.second; + } + m_controllers_videoCapElem.clear(); } /** @@ -114,31 +143,76 @@ * @return -1 娣诲姞澶辫触,0 娣诲姞鎴愬姛 */ int RtspAnalysManager::addCamera(const std::string &index, const std::string &rtsp) { - auto lst = m_lDBTool->searchCamDevTableAll(); - Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); - if (m_controllers.find(index) == m_controllers.end()) { - INFO("MYH DEBUG HERE"); - if (m_currentCount >= m_maxCount) { - ERR("addCamera faild, camera's num is full!") - return -1; + if (m_GB28181_Enable) { + //#todo +// why search lst ? +// auto lst = m_lDBTool->searchCamDevTableAll(); + Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); + + //#todo end + if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end()) { + INFO("MYH DEBUG HERE"); + if (m_currentCount >= m_maxCount) { + ERR("addCamera faild, camera's num is full!") + return -1; + } + INFO("RTSP: " << rtsp << " INDEX:" << index); + + m_imgRedisCRwLock.wrlock(); + m_imgRedisControllers[index] = new RtspImageRedisElement(index); + m_imgRedisControllers[index]->start(); + m_imgRedisCRwLock.unlock(); + + //VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1) + m_controllers_videoCapElem[index] = new BASICGB28181::VideoCaptureElementWithRtp( + const_cast<string &>(index), + 25, 0, 0, this); + m_controllers_videoCapElem[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, + lst_dev.n_cut_max_duration); + m_controllers_videoCapElem[index]->start(); + m_currentCount++; + return 0; + + } else { + removeCamera(index); + INFO("removeCamera " << index); + //DBG("removeCamera " << index); + return addCamera(index, rtsp); } - INFO("RTSP: " << rtsp << " INDEX:" << index); - m_imgRedisControllers[index] = new RtspImageRedisElement(index); - m_imgRedisControllers[index]->start(); - - m_controllers[index] = new RtspCaptureElement(rtsp, index, 25, 3000, 0, this); - m_controllers[index]->start(); - m_controllers[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, lst_dev.n_cut_max_duration); - m_currentCount++; - return 0; - } else { - removeCamera(index); - INFO("removeCamera " << index); - //DBG("removeCamera " << index); - return addCamera(index, rtsp); + // why search lst ? + // auto lst = m_lDBTool->searchCamDevTableAll(); + Record_Config lst_dev = m_lDBTool->searchConfigTableWithinServerInfo(); + if (m_controllers.find(index) == m_controllers.end()) { + INFO("MYH DEBUG HERE"); + if (m_currentCount >= m_maxCount) { + ERR("addCamera faild, camera's num is full!") + return -1; + } + INFO("RTSP: " << rtsp << " INDEX:" << index); + m_imgRedisControllers[index] = new RtspImageRedisElement(index); + m_imgRedisControllers[index]->start(); + + m_controllers[index] = new RtspCaptureElement(rtsp, index, 25, 3000, 0, this); + m_controllers[index]->SetVideoMinMaxSeconds(lst_dev.n_cut_min_duration, lst_dev.n_cut_max_duration); + m_controllers[index]->start(); + m_currentCount++; + return 0; + + } else { + removeCamera(index); + INFO("removeCamera " << index); + //DBG("removeCamera " << index); + return addCamera(index, rtsp); + } } + +#ifndef GB28181 + +#else + +#endif } /** @@ -148,6 +222,7 @@ */ int RtspAnalysManager::removeCamera(const std::string &index) { INFO("MYH DEBUG HERE"); +#ifndef GB28181 if (m_controllers.find(index) == m_controllers.end())return -1; auto controller = m_controllers[index]; controller->stop(); @@ -156,11 +231,23 @@ m_controllers.erase(index); m_currentCount--; +#else + if (m_controllers_videoCapElem.find(index) == m_controllers_videoCapElem.end())return -1; + auto controller = m_controllers_videoCapElem[index]; + controller->stop(); + controller->wait(); + delete controller; + m_controllers_videoCapElem.erase(index); + m_currentCount--; +#endif + + m_imgRedisCRwLock.wrlock(); auto imgRedis = m_imgRedisControllers[index]; imgRedis->stop(); imgRedis->wait(); delete imgRedis; m_imgRedisControllers.erase(index); + m_imgRedisCRwLock.unlock(); INFO("MYH DEBUG HERE"); return 0; } @@ -171,6 +258,7 @@ */ int RtspAnalysManager::removeAll() { INFO("MYH DEBUG HERE"); +#ifndef GB28181 for (auto controller: m_controllers) { controller.second->stop(); } @@ -179,9 +267,19 @@ delete controller.second; } m_controllers.clear(); +#else + for (auto controller: m_controllers_videoCapElem) { + controller.second->stop(); + } + for (auto controller: m_controllers_videoCapElem) { + controller.second->wait(); + delete controller.second; + } + m_controllers_videoCapElem.clear(); +#endif INFO("MYH DEBUG HERE"); - + m_imgRedisCRwLock.wrlock(); for (auto controller: m_imgRedisControllers) { controller.second->stop(); } @@ -189,7 +287,8 @@ controller.second->wait(); delete controller.second; } - m_controllers.clear(); + m_imgRedisControllers.clear(); + m_imgRedisCRwLock.unlock(); m_currentCount = 0; @@ -207,17 +306,26 @@ return m_currentCount; } - //褰曞彇瑙嗛鐨凴PC鐨勬帴鍙e嚱鏁� ::std::string RtspAnalysManager::recordVideo(const ::std::string &name, const ::Ice::Current &) { INFO("Record Video For: " << name); ImageName_s_t nameSt = ImageName_s_t::fromString(name); if (nameSt.Valid()) { - auto pCaptureElem = m_controllers.find(nameSt.m_camId); - if (pCaptureElem != m_controllers.end()) { - pCaptureElem->second->SaveVideo(name); + if (GB28181_Enable) { + auto pCaptureElem = m_controllers_videoCapElem.find(nameSt.m_camId); + if (pCaptureElem != m_controllers_videoCapElem.end()) { +//#todo ~~~~~~!!!!!!! 杩欓噷鏈塨ug 闇�瑕佹斁寮�璋冭瘯 +// pCaptureElem->second->SaveVideo(name); + } else { + ERR("Can not Find CamId " << nameSt.m_camId); + } } else { - ERR("Can not Find CamId " << nameSt.m_camId); + auto pCaptureElem = m_controllers.find(nameSt.m_camId); + if (pCaptureElem != m_controllers.end()) { + pCaptureElem->second->SaveVideo(name); + } else { + ERR("Can not Find CamId " << nameSt.m_camId); + } } } else { ERR("Record Video Failed:Name Not Valid Name: " << name); @@ -227,7 +335,9 @@ //淇濆瓨瑙嗛鍒癛tspImageRedis鐨勯槦鍒�,鐢盧tspCaptureElement璋冪敤 bool RtspAnalysManager::SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img) { - INFO("MYH DEBUG HERE"); + INFO("MYH DEBUG HERE " << camId); + +// m_imgRedisCRwLock.rdlock(); auto item = m_imgRedisControllers.find(camId); if (item != m_imgRedisControllers.end()) { INFO("Save Succeed Cam: " << camId << " ImageKey: " << imageName); @@ -235,6 +345,7 @@ } else { ERR("Save Failed Cam: " << camId << " ImageKey: " << imageName); } +// m_imgRedisCRwLock.unlock(); INFO("MYH DEBUG HERE"); return true; } diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h index bfa08be..d608547 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h +++ b/QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.h @@ -9,24 +9,33 @@ #include <map> #include "RtspCaptureElement.h" #include "RtspImageRedis.h" -#include <VideoServer/QiaoJia/DB/LDBTool.h> +#include "../GB28181DecoderModel/VideoCaptureElementWithRtp.h" +//#include <VideoCaptureElementWithRtp.h> +#include <QiaoJia/DB/LDBTool.h> #include <basic/util/app/AppPreference.hpp> #include "RtspAnalysServer.h" +//#include <GB28181DecoderModel/VideoCaptureElementWithRtp.h> +//#include <VideoToImageMulth/rpc/RtspAnalysServer.h> + +//using BASICGB28181::VideoCaptureElementWithRtp; //鐢ㄦ潵瀹炵幇recordVideo鐨凴PC鐨勬帴鍙g被 -class RtspAnalysManager :public ::RtspAnalys::RtspAnalysServer{ +class RtspAnalysManager : public ::RtspAnalys::RtspAnalysServer { public: - RtspAnalysManager():m_maxCount(50), m_currentCount(0){ - m_lDBTool=new LDBTool; + RtspAnalysManager() : m_maxCount(50), m_currentCount(0) { + m_lDBTool = new LDBTool; init(); } + RtspAnalysManager(LDBTool *_dbTool); - virtual ::std::string recordVideo(const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent); + + virtual ::std::string recordVideo(const ::std::string &, const ::Ice::Current & = ::Ice::emptyCurrent); + virtual ~RtspAnalysManager(); - int addCamera(const std::string &, const std::string& rtsp); + int addCamera(const std::string &, const std::string &rtsp); int removeCamera(const std::string &); @@ -37,20 +46,27 @@ int getCurrentCamCount(); // 鏍规嵁camId淇濆瓨img鍒癛edis,img鐨凨ey涓篿mageName - bool SaveImageToRedis(const std::string& camId,const std::string& imageName,const cv::Mat& img); + bool SaveImageToRedis(const std::string &camId, const std::string &imageName, const cv::Mat &img); private: void init(); private: + RWLock m_imgRedisCRwLock; + LDBTool *m_lDBTool; + + int m_GB28181_Enable; //淇濆瓨CamID鍜孯tspCaptureElement鐨勬槧灏勫叧绯� std::map<std::string, RtspCaptureElement *> m_controllers; + //淇濆瓨CamID鍜孷ideoCaptureElementWithRtp鐨勬槧灏勫叧绯� + std::map<std::string, BASICGB28181::VideoCaptureElementWithRtp *> m_controllers_videoCapElem; + //淇濆瓨CamID鍜孯tspImageRedisElement鐨勬槧灏勫叧绯� - std::map<std::string, RtspImageRedisElement*> m_imgRedisControllers; + std::map<std::string, RtspImageRedisElement *> m_imgRedisControllers; //褰撳墠鎽勫儚澶寸殑鏁伴噺 int m_currentCount; // 鎽勫儚澶寸殑鏈�澶ф暟閲� diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp index 048999e..70c9143 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp +++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.cpp @@ -8,18 +8,19 @@ #include <QString> #include <QDateTime> #include "RtspAnalysManager.h" -RtspCaptureElement::RtspCaptureElement(const std::string &path, const std::string& camId,int fps, int reopenTime, int gpuIndex,RtspAnalysManager* manager): - TimerElement(10),m_path(path),m_gpuIndex(gpuIndex), - m_reopenTime(reopenTime),m_camId(camId),m_pManager(manager){ - m_cutPath= appPref.getStringData("user.loop.absolute.path"); + +RtspCaptureElement::RtspCaptureElement(const std::string &path, const std::string &camId, int fps, int reopenTime, + int gpuIndex, RtspAnalysManager *manager) : + TimerElement(10), m_path(path), m_gpuIndex(gpuIndex), + m_reopenTime(reopenTime), m_camId(camId), m_pManager(manager) { + m_cutPath = appPref.getStringData("user.loop.absolute.path"); assert(!m_cutPath.empty()); m_capture = new CvCapture_FFMPEG(m_camId); } //瀹氭椂鎶撳彇鍥剧墖,閫氳繃灏嗗浘鐗囨斁鍏tspImageRedisElement鐨勯槦鍒椾腑,鏉ュ噺灏戣棰戠殑涓㈠抚 -void RtspCaptureElement::timerFunc() -{ +void RtspCaptureElement::timerFunc() { bool ret = m_capture->grabFrame(); if (!ret) { @@ -53,13 +54,12 @@ cv::Mat copyMat; img.copyTo(copyMat); std::string imageName = m_capture->GetImageName(); - m_pManager->SaveImageToRedis(m_camId,imageName,copyMat); + m_pManager->SaveImageToRedis(m_camId, imageName, copyMat); } fireConnectors(); } -std::string RtspCaptureElement::MakeDir(const std::string &timeStamp) -{ +std::string RtspCaptureElement::MakeDir(const std::string &timeStamp) { std::string t_FilePath = m_cutPath; if (t_FilePath.back() != '/') { @@ -68,11 +68,11 @@ char buf[24]; QDateTime dt = QDateTime::fromString(QString::fromStdString(timeStamp), "yyyy-MM-dd hh:mm:ss:zzz"); - std::string t_strTime=dt.toString("yyyyMMddhh").toStdString(); + std::string t_strTime = dt.toString("yyyyMMddhh").toStdString(); // DBG("t_strTime="<<t_strTime); - t_FilePath.append(m_camId + "/" + t_strTime.substr(0, 6)+ "/" +t_strTime.substr(6, 2) + "/"); + t_FilePath.append(m_camId + "/" + t_strTime.substr(0, 6) + "/" + t_strTime.substr(6, 2) + "/"); //YYYYMMDDHH - t_FilePath.append(t_strTime.substr(0,10)+ "/"); + t_FilePath.append(t_strTime.substr(0, 10) + "/"); std::string t_cmd = "mkdir -p '"; t_cmd.append(t_FilePath + "'"); //#get path mkdir path @@ -80,40 +80,36 @@ return t_FilePath; } -void RtspCaptureElement::SaveVideo(const std::string &strImageName) -{ - INFO("SaveVideo: "<<strImageName); - std::string strTimeStamp= AppUtil::getTimeUSecString(); - std::string strPath=MakeDir(strTimeStamp); - m_capture->SaveVideoByImageName(strPath,strImageName); + +void RtspCaptureElement::SaveVideo(const std::string &strImageName) { + INFO("SaveVideo: " << strImageName); + std::string strTimeStamp = AppUtil::getTimeUSecString(); + std::string strPath = MakeDir(strTimeStamp); + m_capture->SaveVideoByImageName(strPath, strImageName); } -void RtspCaptureElement::openVideo() -{ - if(m_gpuIndex>=0){ - setenv("CUDA_VISIBLE_DEVICES", std::to_string(m_gpuIndex).c_str(),0); +void RtspCaptureElement::openVideo() { + if (m_gpuIndex >= 0) { + setenv("CUDA_VISIBLE_DEVICES", std::to_string(m_gpuIndex).c_str(), 0); } - INFO("Open Video "<<m_path<<" GPU_Index: "<<m_gpuIndex); - m_capture->open(m_path.c_str(),m_gpuIndex>=0); + INFO("Open Video " << m_path << " GPU_Index: " << m_gpuIndex); + m_capture->open(m_path.c_str(), m_gpuIndex >= 0); } -void RtspCaptureElement::threadInitial() -{ +void RtspCaptureElement::threadInitial() { INFO("MYH DEBUG"); openVideo(); } -void RtspCaptureElement::threadClosing() -{ +void RtspCaptureElement::threadClosing() { INFO("MYH DEBUG"); m_capture->close(); delete m_capture; m_capture = nullptr; } -void RtspCaptureElement::SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds) -{ - m_capture->SetMinMaxVideoSeconds(minSeconds,maxSeconds); +void RtspCaptureElement::SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds) { + m_capture->SetMinMaxVideoSeconds(minSeconds, maxSeconds); } diff --git a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h index 144b561..51c5a86 100644 --- a/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h +++ b/QiaoJiaSystem/VideoToImageMulth/RtspCaptureElement.h @@ -5,62 +5,71 @@ #include <opencv2/opencv.hpp> #include "../StructureApp/HiredisTool.h" #include <atomic> + class RtspAnalysManager; + struct CvCapture_FFMPEG; - /** - * 浣跨敤ffmpeg灏佽鐨勮棰戦噰闆嗘祦姘村厓绱� - * 杈撳叆锛宺tsp鍦板潃鎴栨枃浠讹紙mp4鎴朼vi锛夎矾寰勶紝杈撳嚭opencv涓殑cv::Mat - * 鏀寔GPU纭В鐮� - * 涓昏瀹屾垚瑙嗛甯х殑鑾峰彇浠ュ強鍚慍vCapture_FFMPEG浼犻�佹暟鎹� - */ - class RtspCaptureElement: public TimerElement { - public: - RtspCaptureElement(const std::string& path,const std::string& camId, int fps = 30, int reOpenTime = -1, int gpuIndex = -1,RtspAnalysManager* manager= nullptr); - //淇濆瓨瑙嗛鎺ュ彛,浠嶳tspAnalysManager鍙戣捣璋冪敤 - void SaveVideo(const std::string& strImageName); +/** + * 浣跨敤ffmpeg灏佽鐨勮棰戦噰闆嗘祦姘村厓绱� + * 杈撳叆锛宺tsp鍦板潃鎴栨枃浠讹紙mp4鎴朼vi锛夎矾寰勶紝杈撳嚭opencv涓殑cv::Mat + * 鏀寔GPU纭В鐮� + * 涓昏瀹屾垚瑙嗛甯х殑鑾峰彇浠ュ強鍚慍vCapture_FFMPEG浼犻�佹暟鎹� + */ +class RtspCaptureElement : public TimerElement { +public: + RtspCaptureElement(const std::string &path, const std::string &camId, int fps = 30, int reOpenTime = -1, + int gpuIndex = -1, RtspAnalysManager *manager = nullptr); - //璁剧疆淇濆瓨瑙嗛鐨勬渶灏忓拰鏈�澶ч暱搴�,鍗曚綅鏄,瀹為檯鐨勮繍琛屾儏鍐垫湁涓�浜涘樊璺濓紝闇�瑕佸畬鍠� - void SetVideoMinMaxSeconds(const int minSeconds,const int maxSeconds); - private: - //绾跨▼鎵ц鍑芥暟 - virtual void timerFunc() override; - //绾跨▼鐨勪竴浜涘彉閲忓垵濮嬪寲,绾跨▼鍚姩鐨勬椂鍊欒皟鐢� - virtual void threadInitial() override; - //绾跨▼缁撴潫鍑芥暟鐨勬椂鍊欒皟鐢�,瀹屾垚涓�浜涜祫婧愮殑閲婃斁 - virtual void threadClosing() override; - //鎵撳紑瑙嗛 - void openVideo(); + //淇濆瓨瑙嗛鎺ュ彛,浠嶳tspAnalysManager鍙戣捣璋冪敤 + void SaveVideo(const std::string &strImageName); - //鏍规嵁timeStamp鍒涘缓璺緞 - std::string MakeDir(const std::string& timeStamp); - private: - //鐢ㄦ潵鎶撳彇瑙嗛鐨凢fmpeg鐨勫皝瑁呯被 - CvCapture_FFMPEG* m_capture; - //淇濆瓨瑙嗛娴佺殑璺緞,绫讳技浜巖tsp://admin:a1234567@192.168.1.201:554/h264/ch2/main/av_stream - std::string m_path; + //璁剧疆淇濆瓨瑙嗛鐨勬渶灏忓拰鏈�澶ч暱搴�,鍗曚綅鏄,瀹為檯鐨勮繍琛屾儏鍐垫湁涓�浜涘樊璺濓紝闇�瑕佸畬鍠� + void SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds); - // Redis鐨勫伐鍏风被 +private: + //绾跨▼鎵ц鍑芥暟 + virtual void timerFunc() override; + + //绾跨▼鐨勪竴浜涘彉閲忓垵濮嬪寲,绾跨▼鍚姩鐨勬椂鍊欒皟鐢� + virtual void threadInitial() override; + + //绾跨▼缁撴潫鍑芥暟鐨勬椂鍊欒皟鐢�,瀹屾垚涓�浜涜祫婧愮殑閲婃斁 + virtual void threadClosing() override; + + //鎵撳紑瑙嗛 + void openVideo(); + + //鏍规嵁timeStamp鍒涘缓璺緞 + std::string MakeDir(const std::string &timeStamp); + +private: + //鐢ㄦ潵鎶撳彇瑙嗛鐨凢fmpeg鐨勫皝瑁呯被 + CvCapture_FFMPEG *m_capture; + //淇濆瓨瑙嗛娴佺殑璺緞,绫讳技浜巖tsp://admin:a1234567@192.168.1.201:554/h264/ch2/main/av_stream + std::string m_path; + + // Redis鐨勫伐鍏风被 // HiredisTool m_redisTool; - //瀵逛繚瀛樺埌Redis鐨勫浘鐗囪繘琛岃鏁� - std::atomic<int> m_picCount{0}; - //GPU鐨勭储寮� - int m_gpuIndex; + //瀵逛繚瀛樺埌Redis鐨勫浘鐗囪繘琛岃鏁� + std::atomic<int> m_picCount{0}; + //GPU鐨勭储寮� + int m_gpuIndex; - //鎵撳紑瑙嗛娴佸け璐ョ殑鏃跺�欙紝sleep涓�娈垫椂闂� - int m_reopenTime; + //鎵撳紑瑙嗛娴佸け璐ョ殑鏃跺�欙紝sleep涓�娈垫椂闂� + int m_reopenTime; - //鎽勫儚鏈篒D - std::string m_camId; + //鎽勫儚鏈篒D + std::string m_camId; - //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰� - std::string m_cutPath; + //鐢ㄦ潵淇濆瓨褰曞儚瑙嗛鐨勮矾寰� + std::string m_cutPath; - //鍑犲紶鍥句涪涓�寮�,鐩墠鏄�8寮犱涪涓�寮� - const int m_nPicsPickOne = 8; + //鍑犲紶鍥句涪涓�寮�,鐩墠鏄�8寮犱涪涓�寮� + const int m_nPicsPickOne = 8; - RtspAnalysManager * m_pManager; - }; + RtspAnalysManager *m_pManager; +}; #endif // VIDEOCAPTUREELEMENT_H diff --git a/QiaoJiaSystem/VideoToImageMulth/main.cpp b/QiaoJiaSystem/VideoToImageMulth/main.cpp index 4eced3d..fbc65f7 100644 --- a/QiaoJiaSystem/VideoToImageMulth/main.cpp +++ b/QiaoJiaSystem/VideoToImageMulth/main.cpp @@ -14,7 +14,10 @@ #include <basic/util/file/FileUtil.h> #include <basic/util/app/AppPreference.hpp> #include <basic/util/app/AppConfig.h> -#include <basic/util/app/AppConfig.h> + +#include <GB28181Server.h> +#include <basic/util/net_config/net_config.h> +#include <DataManagerServer/vss/dao/VssLocalSettingTblSqliteDao.h> static void startManager(LDBTool *_dbTool) { RtspAnalysManager rtspAnalysManager(_dbTool); @@ -23,7 +26,31 @@ } } +std::string getLocalIp() { + unsigned char netmask_old[15] = {0}; + unsigned char gateway_old[15] = {0}; + unsigned char ip_old[15] = {0}; + std::string net_ifname = appConfig.getStringProperty("netIfName"); + std::string str_ip; + + if (GetIpAddress(net_ifname.c_str(), ip_old)) { + std::string ip_old_temp((char *) ip_old); + str_ip = ip_old_temp; + } else { +// value["ipaddr"] = ""; + ERR("not get ip addr"); + } + assert(!str_ip.empty()); + return std::move(str_ip); +} + +/*** + * arg1 涓�-1鏃跺惎鐢╣b28181 + * @param argc + * @param argv + * @return + */ int main(int argc, char **argv) { std::cout << __DATE__ << " " << __TIME__ << std::endl; SAVE_APP_ARGS @@ -32,15 +59,89 @@ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str()); #endif - int gindx = atoi(argv[1]) % 2; + if (argc < 4) { + assert("t_value.size()"); + } + + int arg1 = atoi(argv[1]); + + int gindx = abs(arg1) % 2; + int GB28181_Enable = abs(arg1) % 2; DBG(gindx); + appPref.setIntData("GB28181_Enable", GB28181_Enable); appPref.setLongData("gpu.index", gindx); appPref.setIntData("show.image", 0); //todo - appPref.setIntData("CamStart", atoi(argv[1])); + appPref.setIntData("CamStart", arg1); appPref.setIntData("CamStep", atoi(argv[2])); appPref.setIntData("RpcServerPort", atoi(argv[3])); + if (GB28181_Enable) { + //#todo search from db + MysqlDBServerCfg mysqlDBServerCfg; + mysqlDBServerCfg.Host = getLocalIp(); + mysqlDBServerCfg.Port = 3306; + mysqlDBServerCfg.UserName = "root"; + mysqlDBServerCfg.Passwd = "123456"; + mysqlDBServerCfg.DBName = "EGEyesForVSS"; + mysqlDBServerCfg.DBConnCount = 5; + + LDBTool ldbTool; + BaseSqliteDao::setLDBTool(&ldbTool); + + //#todo search from db + Json::Value t_value; + { + LDBTool ldbTool; + BaseSqliteDao::setLDBTool(&ldbTool); + t_value = VssLocalSettingTblSqliteDao::instance()->findAllVssLocalSettingTblList(); + } + if (t_value.size() == 1 && t_value["data"].size() > 1) { + assert("t_value.size()"); + } + DBG(t_value["data"].begin()->toStyledString()); + auto &t_cfg = *t_value["data"].begin(); + GBServerCfg gbServerCfg; + gbServerCfg.SvrIp = t_cfg["ServerIp"].asString(); // 鍥芥爣鏈嶅姟鐨刬p鍦板潃 (鏈満鐨刬p鍦板潃) + gbServerCfg.SvrPort = atoi(t_cfg["ServerPort"].asString().c_str());// 7060; // 鍥芥爣鏈嶅姟鐩戝惉鐨勭鍙� + gbServerCfg.SvrPubID = t_cfg["ServerId"].asString();// "44120000002000000001"; // 鍥芥爣鏈嶅姟鍣ㄧ殑ID + gbServerCfg.bMD5Auth = false; // 鏄惁闇�瑕丮D5鍔犲瘑 + gbServerCfg.UserName = t_cfg["UserAuthId"].asString();// "44120100002000000002"; // 鍥芥爣鏈嶅姟鐨勭敤鎴峰悕 (涓嬬骇璁惧娉ㄥ唽鐨勭敤鎴峰悕) + gbServerCfg.Passwd = t_cfg["Password"].asString();// "123456"; // 鍥芥爣鏈嶅姟鐨勫瘑鐮� (涓嬬骇璁惧娉ㄥ唽鐨勫瘑鐮�) + gbServerCfg.SubScribeTime = 3600; // 璁㈤槄鏃堕棿 濡傛灉涓�0 琛ㄧず涓嶈闃� + + SpinLock spinLock; + + bool running = false; + bool serinit = false; + auto func = [&] { + spinLock.lock(); + GB28181Server m_gbs; + m_gbs.setMysqlConnParam(mysqlDBServerCfg); + m_gbs.setGBServerParam(gbServerCfg); + DBG("initServer start before"); + running = true; + m_gbs.initServer(); + DBG("initServer start after"); + + spinLock.unlock(); + while (running) { + usleep(4000); + } + }; + + std::thread thd(func); + thd.detach(); + + usleep(400); + // ---------------------娴嬭瘯------------------------ + spinLock.lock(); +// if (!running) { +// ERR("running is false << DB init error"); +// exit(0); +// } + } + DBG("test start"); appPref.setStringData("user.loop.absolute.path", appConfig.getStringProperty("cutPath")); IceRpcServer<RtspAnalysManager> server("RtspAnalysServer", appPref.getIntData("RpcServerPort"), "tcp"); diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp index 528bc12..88a1460 100644 --- a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp +++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp @@ -6,8 +6,8 @@ } void ImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) { - cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5, - cv::Scalar(255, 255, 0), 2); + cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 4, + cv::Scalar(200, 120, 200), 3); } void ImageDrawElement::processImage(cv::Mat &image) { diff --git a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp index 6a8fbbb..bb406ce 100644 --- a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp +++ b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp @@ -11,10 +11,11 @@ #include "ImageDrawElement.h" #include "YoloRpcElement.h" #include <basic/util/app/AppPreference.hpp> +#include <basic/util/opencv/CvUtil.h> class Controllor : public PipeController { public: - Controllor(const int index, const std::string &rtsp) : m_videoCaptureElement(rtsp, 25, 1000, 0), + Controllor(const int index, const std::string &rtsp) : m_videoCaptureElement(rtsp, 25, -1, 0), m_YoloRpcElement(std::to_string(index) + "YoloRpc") { m_index = index; m_rtsp = rtsp; @@ -36,7 +37,7 @@ }); m_imageDrawElement.registerConnector([&] { -// ImageShowElement::showImage(std::to_string(m_index), *m_imageDrawElement.getImage()); + ImageShowElement::showImage(std::to_string(m_index), *m_imageDrawElement.getImage()); }); m_videoCaptureElement.setOutPutInterval(3); @@ -55,24 +56,63 @@ int m_index; }; +void darwProperty(cv::Mat &image, string key, string value, int x, int y) { + cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5, + cv::Scalar(255, 255, 0), 2); +} + //using namespace std; int main(int argc, char *argv[]) { SAVE_APP_ARGS - int num = atoi(argv[1]); - std::string path(argv[2]); - int portNum = atoi(argv[3]); +// int num = atoi(argv[1]); +// std::string path(argv[2]); +// int portNum = atoi(argv[3]); //yolo server appPref.setStringData("yolo.proxy", "yoloServer"); //#todo appPref.setStringData("yolo.ip", ""); - appPref.setIntData("yolo.port", portNum); + appPref.setIntData("yolo.port", 10003); // rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"), - for (int i = 0; i < num; i++) { - Controllor *_Controllor = new Controllor(i, path); - _Controllor->start(); + Controllor *_Controllor = new Controllor(1, "/home/bsk/210235C23NF187000045$2019-02-28-23-07-30_209850_210049.mp4"); + _Controllor->start(); + + getchar(); + + + + + YoloRpcElement m_YoloRpcElement("YoloRpc"); + ImageDrawElement m_imageDrawElement; + m_YoloRpcElement.start(); + m_imageDrawElement.start(); + auto img = cv::imread("/home/bsk/Desktop/wubao2.jpg"); + m_YoloRpcElement.setImage(img); + m_YoloRpcElement.submit(); + m_YoloRpcElement.registerConnector([&] { + }); + + sleep(2); + + auto res = m_YoloRpcElement.getLastScoreRects(); + + for (auto yoloObj: res) { + auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1); + //[{"x":1.5999756,"y":82.533325},{"x":1.5999756,"y":180.53333},{"x":61.599976,"y":175.53333},{"x":63.599976,"y":66.533325}] + //cv::rectangle(image, cv::Rect(4,328,252,480 ), cv::Scalar(0, 0, 255), 2); + cv::rectangle(img, rect, yoloObj.id >= 0 ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 255, 255), 2); + int i = 0; + for (auto &property:yoloObj.properties) { + darwProperty(img, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++); + } } + cv::imwrite("img/test2.jpg", img); + cv::imshow("test", img); +// for (int i = 0; i < num; i++) { +// Controllor *_Controllor = new Controllor(i, path); +// _Controllor->start(); +// } // Controllor _Controllor(0, "/home/bsk/2.mp4"); // _Controllor.start(); diff --git a/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp b/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp index cdecab1..15b7a0b 100644 --- a/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp +++ b/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp @@ -84,9 +84,9 @@ if (trackingTrigger->triggerOnce(scoredRect)) { trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id); trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type]; + trackingTrigger->getLastRect().properties["score"] = to_string(scoredRect.score); auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone(); triggerMats.push_back(t_image); - } } trackingTrigger->triggerLine(); -- Gitblit v1.8.0