| | |
| | | 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(); |
| | |
| | | } |
| | | |
| | | AppPipeController::~AppPipeController() { |
| | | if(recordStatus==RECORD_DOING) |
| | | { |
| | | newRecordVideoElement.endRecord(); |
| | | } |
| | | |
| | | } |
| | | |
| | | //************************************ |
| | |
| | | } |
| | | |
| | | |
| | | //#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 { |
| | |
| | | //#todo |
| | | faceRpcElement.setProperty("time", strNewTime); |
| | | // faceRpcElement.setProperty("time", uuid); |
| | | faceRpcElement.setImage(videoCaptureElement.getImage()); |
| | | faceRpcElement.setImage(imageTemp); |
| | | faceRpcElement.submit(); |
| | | } |
| | | |
| | |
| | | // 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(); |
| | | } |
| | | |
| | |
| | | registerElement(faceExtractElement); |
| | | } |
| | | registerElement(imageDrawElement); |
| | | |
| | | registerElement(newRecordVideoElement); |
| | | videoCaptureElement.setOutPutInterval(3); |
| | | faceExtractElement.setProperty("index", to_string(m_index)); |
| | | //#todo setProperty |
| | |
| | | //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()) { |
| | | |
| | |
| | | //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()); |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |