| | |
| | | #include <QtCore/QtGlobal> |
| | | #include <net_config.h> |
| | | |
| | | #include <basic/pipe_element/ffmpeg/basic_struct_for_video_image.h> |
| | | //AppPipeController::AppPipeController(std::string folderPath, const Json::Value &json) : |
| | | // videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0), |
| | | // m_folderPath(folderPath), |
| | |
| | | |
| | | //} |
| | | AppPipeController::AppPipeController(std::string folderPath, const SdkRuleMap &ruleMap) : |
| | | videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), m_index(0), |
| | | m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp"), |
| | | videoCaptureElement("filePath", 25, -1, appPref.getLongData("gpu.index")), |
| | | // videoCaptureElement(40), |
| | | m_index(0), |
| | | m_folderPath(folderPath), |
| | | m_sdkRuleMap(ruleMap), |
| | | fdfsClient(nullptr), |
| | |
| | | faceRpcElement(folderPath + "faceRpc", ruleMap[FaceSdk]), |
| | | faceExtractElement(folderPath + "faceExtract", ruleMap[FaceSdk]), |
| | | triggerElement(25, 10), |
| | | recordVideoElement(-1, ""), |
| | | bRecordVideoEnable(false) { |
| | | // recordVideoElement(-1, ""), |
| | | bRecordVideoEnable(false), |
| | | |
| | | m_bSetWH(false) |
| | | { |
| | | |
| | | init(); |
| | | |
| | |
| | | // intKeepRight(); |
| | | //} |
| | | AppPipeController::AppPipeController(std::string camId, const SdkRuleMap &ruleMap, bool RecordVideoEnable) : |
| | | m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcServerPort"),"tcp"), |
| | | videoCaptureElement(appPref.getStringData(camId + "rtsp"), 25, 3000, appPref.getLongData("gpu.index")), |
| | | // videoCaptureElement(40), |
| | | m_index(0), |
| | | m_camId(camId), |
| | | fdfsClient(nullptr), |
| | |
| | | faceRpcElement(camId + "faceRpc", ruleMap[FaceSdk]), |
| | | faceExtractElement(camId + "faceExtract", ruleMap[FaceSdk]), |
| | | triggerElement(25, 4), |
| | | recordVideoElement(camId, appPref.getStringData(camId + "rtsp")), |
| | | newRecordVideoElement(camId), |
| | | // recordVideoElement(camId, appPref.getStringData(camId + "rtsp")), |
| | | // newRecordVideoElement(camId), |
| | | perimeterElement(ruleMap[PerimeterSdk]), |
| | | crowdElement(ruleMap[CrowdSdk]), |
| | | perStaticElement(ruleMap[PerStaticSdk]), |
| | |
| | | leftJudgment(ruleMap[KeepRightSdk]), |
| | | rightJudgment(ruleMap[KeepRightSdk]), |
| | | bRecordVideoEnable(RecordVideoEnable), |
| | | m_sdkRuleMap(ruleMap) { |
| | | m_sdkRuleMap(ruleMap), |
| | | m_bSetWH(false) |
| | | |
| | | { |
| | | DBG("camId" << camId); |
| | | init(); |
| | | initPerimeter(); |
| | |
| | | } |
| | | |
| | | bool AppPipeController::getRunning() { |
| | | return videoCaptureElement.isRunning(); |
| | | //return videoCaptureElement.isRunning(); |
| | | return false; |
| | | } |
| | | |
| | | string test_str; |
| | | |
| | | |
| | | void AppPipeController::RecordVideo() { |
| | | /*std::string imgKeyYolo = yoloRpcElement.getProperty("imgKey"); |
| | | |
| | | std::string imgKeyFace = faceRpcElement.getProperty("imgKey"); |
| | | if(faceRpcElement.getTriggerState() || |
| | | personElement.getTriggerState() || |
| | | leftJudgment.getTriggerState() || |
| | | rightJudgment.getTriggerState() || |
| | | perimeterElement.getTriggerState() || |
| | | crowdElement.getTriggerState() || |
| | | perHubElement.getTriggerState() || |
| | | perStaticElement.getTriggerState()) |
| | | { |
| | | try { |
| | | auto server = rpcClient.getServer(); |
| | | if (!server) |
| | | { |
| | | ERR("server is null"); |
| | | return; |
| | | } |
| | | |
| | | if(imgKeyFace != imgKeyYolo) |
| | | { |
| | | server->recordVideo(imgKeyFace); |
| | | server->recordVideo(imgKeyYolo); |
| | | INFO("Record Video Face: "<<imgKeyFace); |
| | | INFO("Record Video Yolo: "<<imgKeyYolo); |
| | | } else { |
| | | INFO("Record Video: "<<imgKeyYolo); |
| | | server->recordVideo(imgKeyFace); |
| | | } |
| | | } |
| | | catch (std::exception &e) |
| | | { |
| | | ERR("Record Video ImgKeyFace: "<<imgKeyFace <<" ImgKeyYolo :"<<imgKeyYolo <<" Message: "<<e.what()); |
| | | return ; |
| | | } |
| | | } |
| | | else { |
| | | INFO("ImageNoFace Yolo:"<<imgKeyYolo<<" Face:"<<imgKeyFace); |
| | | INFO("faceRpcElement: "<< faceRpcElement.getTriggerState() <<" "<< |
| | | "personElement: "<<personElement.getTriggerState() <<" "<< |
| | | "leftJudgment: "<<leftJudgment.getTriggerState() <<" "<< |
| | | "leftJudgment: "<<rightJudgment.getTriggerState() <<" "<< |
| | | "perimeterElement: "<<perimeterElement.getTriggerState()<<" "<< |
| | | "crowdElement: "<<crowdElement.getTriggerState()<<" "<< |
| | | "perHubElement: "<<perHubElement.getTriggerState()<<" "<< |
| | | "perStaticElement: "<<perStaticElement.getTriggerState()); |
| | | }*/ |
| | | } |
| | | void AppPipeController::init() { |
| | | |
| | | unsigned char ip_old[15] = {0}; |
| | |
| | | // int max=appPref.getIntData("n_cut_max_duration"); |
| | | // recordInit(40,100); |
| | | videoCaptureElement.registerConnector([&] { |
| | | mutex.lock(); |
| | | cv::Mat imageTemp = videoCaptureElement.getImage(); |
| | | |
| | | std::string strNewTime = AppUtil::getTimeUSecString();; |
| | | mutex.unlock(); |
| | | //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); |
| | | std::string imgKey; |
| | | m_hiredisTool.listRpop(m_camId,imgKey); |
| | | if(imgKey.empty()) |
| | | { |
| | | ERR("CamId "<<m_camId<<" No ImgKey"); |
| | | return; |
| | | } |
| | | |
| | | cv::Mat imageTemp; |
| | | m_hiredisTool.getKeyImage(imgKey,imageTemp); |
| | | if(!m_bSetWH) |
| | | { |
| | | INFO("SetWidth:"<<imageTemp.cols<<" Height:"<<imageTemp.rows); |
| | | appPref.setIntData(m_camId+"width",imageTemp.cols); |
| | | appPref.setIntData(m_camId+"height",imageTemp.rows); |
| | | m_bSetWH=true; |
| | | } |
| | | |
| | | m_hiredisTool.delKey(imgKey); |
| | | if(imageTemp.empty()) |
| | | { |
| | | ERR("No Image Data In: "<<m_camId<<" ImgKey:"<<imgKey); |
| | | return; |
| | | } |
| | | std::string strNewTime = AppUtil::getTimeUSecString(); |
| | | |
| | | ImageName_s_t imgSt = ImageName_s_t::fromString(imgKey); |
| | | |
| | | if (m_camId.size() > 0) { |
| | | |
| | | |
| | | if (bRecordVideoEnable) { |
| | | newRecordVideoElement.pushImgBuf(strNewTime, imageTemp); |
| | | newRecordVideoElement.setSdkTrigger(faceRpcElement.getTriggerState() ||//TODO |
| | | personElement.getTriggerState() || |
| | | leftJudgment.getTriggerState() || |
| | | rightJudgment.getTriggerState() || |
| | | perimeterElement.getTriggerState() || |
| | | crowdElement.getTriggerState() || |
| | | perHubElement.getTriggerState() || |
| | | perStaticElement.getTriggerState() |
| | | ); |
| | | |
| | | if (!faceRpcElement.isBusy()) { |
| | | //#todo |
| | | faceRpcElement.setProperty("time", strNewTime); |
| | | faceRpcElement.setProperty("imgKey",imgKey); |
| | | INFO("Write To FaceRPC ES time:"<<strNewTime<< " ImgKey: "<<imgKey); |
| | | faceRpcElement.setImage(imageTemp); |
| | | faceRpcElement.submit(); |
| | | } |
| | | |
| | | } else { |
| | | //#todo 计算当前文件时间 |
| | | //#TODO 输出间隔用于计算时间 |
| | | // 现为每三帧计算一次,导致计算的时间长于文件的实际时间 |
| | | auto opit = 25;// videoCaptureElement.getOutPutInterval(); |
| | | auto opidx = videoCaptureElement.getoutPutIndex(); |
| | | int second = opidx / opit; |
| | | qint64 newTime = m_dt.toMSecsSinceEpoch() + second * 1000; |
| | | QDateTime newDt = QDateTime::fromMSecsSinceEpoch(newTime); |
| | | strNewTime = newDt.toString("yyyy-MM-dd hh:mm:ss").toStdString(); |
| | | if (!yoloRpcElement.isBusy()) { |
| | | //#todo |
| | | yoloRpcElement.setProperty("time", strNewTime); |
| | | yoloRpcElement.setProperty("imgKey",imgKey); |
| | | INFO("Write To YoloES time:"<<strNewTime<< " ImgKey: "<<imgKey); |
| | | yoloRpcElement.setImage(imageTemp); |
| | | yoloRpcElement.submit(); |
| | | } |
| | | |
| | | |
| | | if (appPref.getIntData("show.image") == 1 && !imageDrawElement.isBusy()) { |
| | | imageDrawElement.setImage(imageTemp); |
| | | imageDrawElement.submit(); |
| | | } |
| | | //this->RecordVideo(); |
| | | /*if(faceRpcElement.getTriggerState() || |
| | | personElement.getTriggerState() || |
| | | leftJudgment.getTriggerState() || |
| | | rightJudgment.getTriggerState() || |
| | | perimeterElement.getTriggerState() || |
| | | crowdElement.getTriggerState() || |
| | | perHubElement.getTriggerState() || |
| | | perStaticElement.getTriggerState()) |
| | | { |
| | | try { |
| | | auto server = rpcClient.getServer(); |
| | | if (!server) |
| | | { |
| | | ERR("server is null"); |
| | | return; |
| | | } |
| | | INFO("Record Video "<<imgKey); |
| | | server->recordVideo(imgKey); |
| | | } |
| | | catch (std::exception &e) |
| | | { |
| | | ERR("Record Video Err: "<<imgKey <<" Message: "<<e.what()); |
| | | return ; |
| | | } |
| | | } |
| | | else { |
| | | INFO("faceRpcElement: "<< faceRpcElement.getTriggerState() <<" "<< |
| | | "personElement: "<<personElement.getTriggerState() <<" "<< |
| | | "leftJudgment: "<<leftJudgment.getTriggerState() <<" "<< |
| | | "leftJudgment: "<<rightJudgment.getTriggerState() <<" "<< |
| | | "perimeterElement: "<<perimeterElement.getTriggerState()<<" "<< |
| | | "crowdElement: "<<crowdElement.getTriggerState()<<" "<< |
| | | "perHubElement: "<<perHubElement.getTriggerState()<<" "<< |
| | | "perStaticElement: "<<perStaticElement.getTriggerState()); |
| | | }*/ |
| | | } |
| | | // DBG(strNewTime); |
| | | |
| | | if (!faceRpcElement.isBusy()) { |
| | | // faceRpcElement.setProperty("uuid", uuid); |
| | | //#todo |
| | | faceRpcElement.setProperty("time", strNewTime); |
| | | // faceRpcElement.setProperty("time", uuid); |
| | | faceRpcElement.setImage(imageTemp); |
| | | faceRpcElement.submit(); |
| | | } |
| | | |
| | | if (!yoloRpcElement.isBusy()) { |
| | | // yoloRpcElement.setProperty("uuid", uuid); |
| | | //#todo |
| | | yoloRpcElement.setProperty("time", strNewTime); |
| | | yoloRpcElement.setImage(imageTemp); |
| | | yoloRpcElement.submit(); |
| | | } |
| | | |
| | | if (!imageDrawElement.isBusy()) { |
| | | imageDrawElement.setImage(imageTemp); |
| | | imageDrawElement.submit(); |
| | | } |
| | | |
| | | // if (bRecordVideoEnable) { |
| | | // registerElement(triggerElement); |
| | | // } |
| | | }); |
| | | |
| | | |
| | | yoloRpcElement.registerConnector([&] { |
| | | imageDrawElement.setYoloObjects(personElement.getLastScoreRects()); |
| | | if (!personElement.isBusy()) { |
| | | |
| | | personElement.setObjsResults(yoloRpcElement.getLastScoreRects()); |
| | | personElement.submit(); |
| | | } |
| | | //INFO("Record Video By Yolo"); |
| | | //this->RecordVideo(); |
| | | }); |
| | | |
| | | faceRpcElement.registerConnector([&] { |
| | | imageDrawElement.setFaces(faceRpcElement.getLastScoreRects()); |
| | | //INFO("Record Video By Face"); |
| | | //this->RecordVideo(); |
| | | }); |
| | | |
| | | yoloRpcElement.registerConnector("YoloTrigger", [&] { |
| | | // auto images = yoloRpcElement.getTriggerMats(); |
| | | //INFO("Record Video By Yolo"); |
| | | //this->RecordVideo(); |
| | | }); |
| | | |
| | | faceRpcElement.registerConnector("FaceTrigger", [&] { |
| | |
| | | faceRpcElement.getTriggerFaces(), |
| | | faceRpcElement.getTriggerScoreRects(), |
| | | faceRpcElement.getTriggerMats()}); |
| | | //INFO("Record Video By Face"); |
| | | //this->RecordVideo(); |
| | | }); |
| | | |
| | | imageDrawElement.registerConnector([&] { |
| | | if (appPref.getIntData("show.image") == 1) { |
| | | ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage()); |
| | | ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage()); |
| | | } |
| | | }); |
| | | |
| | |
| | | registerElement(faceRpcElement); |
| | | registerElement(faceExtractElement); |
| | | } |
| | | registerElement(imageDrawElement); |
| | | if(appPref.getIntData("show.image") == 1) |
| | | { |
| | | imageDrawElement.registerConnector([&] { |
| | | |
| | | ImageShowElement::showImage(to_string(this->m_index), *imageDrawElement.getImage()); |
| | | |
| | | }); |
| | | |
| | | registerElement(imageDrawElement); |
| | | } |
| | | |
| | | // registerElement(newRecordVideoElement); |
| | | videoCaptureElement.setOutPutInterval(3); |
| | | //videoCaptureElement.setOutPutInterval(3); |
| | | faceExtractElement.setProperty("index", to_string(m_index)); |
| | | registerElement(yoloRpcElement); |
| | | //#todo setProperty |