From a3365259bd9c51db3b5cfcf013ed323f27d1725a Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期三, 26 十二月 2018 15:01:51 +0800 Subject: [PATCH] 添加人脸时,裁剪图片 --- QiaoJiaSystem/StructureApp/AppPipeController.cpp | 153 ++++++++++----------------------------------------- 1 files changed, 30 insertions(+), 123 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/AppPipeController.cpp b/QiaoJiaSystem/StructureApp/AppPipeController.cpp index 2a0062d..c411932 100644 --- a/QiaoJiaSystem/StructureApp/AppPipeController.cpp +++ b/QiaoJiaSystem/StructureApp/AppPipeController.cpp @@ -36,17 +36,16 @@ faceRpcElement(camId + "faceRpc"), m_json(json), faceExtractElement(camId + "faceExtract"), - // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()), + // peTriggerElement(json["perimeter.tolerance"].asInt(), json["perimeter.delay"].asInt()), // leftTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()), // rightTriggerElement(json["keepRight.tolerance"].asInt(), json["keepRight.delay"].asInt()), - // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()), + // crowdTriggerElement(json["crowd.tolerance"].asInt(), json["crowd.delay"].asInt()), triggerElement(25, 4), recordVideoElement(camId, json["rtsp"].asString()), newRecordVideoElement(camId), perimeterElement(1), crowdElement(json["crowd.num"].asInt()), - bRecordVideoEnable(RecordVideoEnable) -{ + bRecordVideoEnable(RecordVideoEnable) { init(); initPerimeter(); initCrowd(); @@ -54,10 +53,7 @@ } AppPipeController::~AppPipeController() { - if(recordStatus==RECORD_DOING) - { - newRecordVideoElement.endRecord(); - } + } //************************************ @@ -155,23 +151,33 @@ } - //#todo - // int max=appPref.getIntData("n_cut_max_duration"); - recordInit(20,100); + //#todo + // int max=appPref.getIntData("n_cut_max_duration"); + // recordInit(40,100); videoCaptureElement.registerConnector([&] { - + cv::Mat imageTemp = videoCaptureElement.getImage(); std::string strNewTime; + strNewTime = AppUtil::getTimeUSecString(); + +// cv::putText(imageTemp, strNewTime, cv::Point(408, 540), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 5, +// cv::Scalar(255, 255, 0), 2); if (m_camId.size() > 0) { - strNewTime = AppUtil::getTimeUSecString(); - if(bRecordVideoEnable) - { - newRecordVideoElement.pushImgBuf(strNewTime,videoCaptureElement.getImage()); - setSdkTrigger(); - doRecord(); + if (bRecordVideoEnable) { + newRecordVideoElement.pushImgBuf(strNewTime, imageTemp); + newRecordVideoElement.setSdkTrigger(faceRpcElement.getTriggerState() ||//TODO + yoloRpcElement.getTrigger() || + leftJudgment.getTriggerState() || + rightJudgment.getTriggerState() || + perimeterElement.getTriggerState() || + crowdElement.getTriggerState()); + if (!newRecordVideoElement.isBusy()) { + newRecordVideoElement.submit(); + } + } } else { @@ -193,7 +199,7 @@ //#todo faceRpcElement.setProperty("time", strNewTime); // faceRpcElement.setProperty("time", uuid); - faceRpcElement.setImage(videoCaptureElement.getImage()); + faceRpcElement.setImage(imageTemp); faceRpcElement.submit(); } @@ -201,12 +207,12 @@ // yoloRpcElement.setProperty("uuid", uuid); //#todo yoloRpcElement.setProperty("time", strNewTime); - yoloRpcElement.setImage(videoCaptureElement.getImage()); + yoloRpcElement.setImage(imageTemp); yoloRpcElement.submit(); } if (!imageDrawElement.isBusy()) { - imageDrawElement.setImage(videoCaptureElement.getImage()); + imageDrawElement.setImage(imageTemp); imageDrawElement.submit(); } @@ -253,7 +259,7 @@ registerElement(faceExtractElement); } registerElement(imageDrawElement); - + registerElement(newRecordVideoElement); videoCaptureElement.setOutPutInterval(3); faceExtractElement.setProperty("index", to_string(m_index)); //#todo setProperty @@ -319,7 +325,7 @@ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]"; perimeterElement.setMask(area); perimeterElement.setFdfs(fdfsClient); - perimeterElement.setProperty("sdkType","perimeter"); + perimeterElement.setProperty("sdkType", "perimeter"); yoloRpcElement.registerConnector([&] { if (!perimeterElement.isBusy()) { @@ -356,7 +362,7 @@ //area="[{\"x\":100,\"y\":6},{\"x\":100,\"y\":1200},{\"x\":1800,\"y\":1200},{\"x\":1800,\"y\":6}]"; crowdElement.setMask(area); crowdElement.setFdfs(fdfsClient); - crowdElement.setProperty("sdkType","crowd"); + crowdElement.setProperty("sdkType", "crowd"); yoloRpcElement.registerConnector([&] { if (!crowdElement.isBusy()) { crowdElement.setObjsResults(yoloRpcElement.getObjects()); @@ -405,104 +411,5 @@ registerElement(leftJudgment); registerElement(rightJudgment); -} - - -//================ -void AppPipeController::recordInit(int videoMin, int videoMax) { - sdkTrigger = false; - fileMin = videoMin; - fileMax = videoMax; - triggerDelay = fileMin/2; - - recordStatus = RECORD_STOP; - videoLength = 0; - recordDelay = 0; -} - -void AppPipeController::setSdkTrigger() { - if( faceRpcElement.getTriggerState() ||//TODO - yoloRpcElement.getTrigger() || - leftJudgment.getTriggerState()|| - rightJudgment.getTriggerState() || - perimeterElement.getTriggerState() || - crowdElement.getTriggerState() - ){ - triggerDelay = 0; - sdkTrigger = true; - } else{ - if(triggerDelay++ >= fileMin/2) { - sdkTrigger = false; - } - else{ - sdkTrigger = true; - } - } -} - -void AppPipeController::doRecord() { - switch(recordStatus) - { - case RECORD_STOP: -// DBG("recordDelay:" << recordDelay); -// DBG("videoLength:" << videoLength); -// DBG("sdkTrigger:" << sdkTrigger); - videoLength = 0; - recordDelay = 0; - if(sdkTrigger){ - recordStatus = RECORD_DOING; - newRecordVideoElement.startRecord(); - } - else - { - ImgInfo info; - newRecordVideoElement.getImg(info); - } - break; - - case RECORD_DOING: - videoLength++; - if(sdkTrigger){ - if(videoLength < fileMax){ - newRecordVideoElement.doRecord(); - } - else{ - recordStatus = RECORD_STOP; - newRecordVideoElement.endRecord(); - } - }else{ - recordStatus = RECORD_ENDING; - newRecordVideoElement.doRecord(); - } - break; - - case RECORD_ENDING: - DBG("recordDelay:" << recordDelay); - DBG("videoLength:" << videoLength); - DBG("sdkTrigger:" << sdkTrigger); - recordDelay++; - videoLength++; - if(sdkTrigger){ - if( (recordDelay < fileMin/4) && - (videoLength < fileMax)){ - newRecordVideoElement.doRecord(); - }else{ - recordStatus = RECORD_STOP; - newRecordVideoElement.endRecord(); - } - }else{ - if( (recordDelay < fileMin/2) && - (videoLength < fileMax)){ - newRecordVideoElement.doRecord(); - }else{ - recordStatus = RECORD_STOP; - newRecordVideoElement.endRecord(); - } - } - break; - - default: - break; - } } -- Gitblit v1.8.0