QiaoJiaSystem/DataManagerServer/http_configserver.cpp
@@ -3313,6 +3313,11 @@ rule.strExAreas = value["strExAreas"].asCString(); rule.strLine = value["strLine"].asCString(); rule.strExLine = value["strExLine"].asCString(); if(!value["strPerimeterObjType"].empty()) { rule.strPerimeterObjType = value["strPerimeterObjType"].asCString(); } if (rule.strCamId.isEmpty()) { return "{\"ret_status\":\"内容有误,请检查!\"}"; } @@ -3389,6 +3394,7 @@ obj["strExAreas"] = rule.second.strExAreas.toStdString(); obj["strLine"] = rule.second.strLine.toStdString(); obj["strExLine"] = rule.second.strExLine.toStdString(); obj["strPerimeterObjType"] = rule.second.strPerimeterObjType.toStdString(); Json::Value weekRuleArray; QiaoJiaSystem/GB28181DecoderModel/VideoCaptureElementWithRtp.cpp
@@ -261,7 +261,7 @@ void BASICGB28181::VideoCaptureElementWithRtp::SaveVideo(const std::string &strImageName) { INFO("SaveVideo: " << strImageName); // INFO("SaveVideo: " << strImageName); std::string strTimeStamp = AppUtil::getTimeUSecString(); std::string strPath = MakeDir(strTimeStamp); m_fFmpegDecoderJPG.SaveVideoByImageName(strPath, strImageName); QiaoJiaSystem/RapidStructureApp/TriggerElement.cpp
@@ -5,7 +5,7 @@ // TimerElement(1), triggerState(false), tolerance(tolerance), delay(delay), triggerType(DOWN), triggerTimes(0),lastDown(0),lastUp(0) { triggerType(DOWN), triggerTimes(0), lastDown(0), lastUp(0) { } @@ -78,12 +78,12 @@ lastDown = 0; triggerType = DOWN; } void TriggerElement::resetTriggerState() { void TriggerElement::resetTriggerState() { //state=false; triggerState=false; triggerTimes=0; triggerState = false; triggerTimes = 0; } void TriggerElement::timerFunc() { QiaoJiaSystem/StructureApp/AppPipeController.cpp
@@ -95,7 +95,7 @@ perHubElement(ruleMap[PerHubSdk]), leftJudgment(ruleMap[KeepRightSdk]), rightJudgment(ruleMap[KeepRightSdk]), bRecordVideoEnable(RecordVideoEnable), // bRecordVideoEnable(RecordVideoEnable), m_sdkRuleMap(ruleMap), m_bSetWH(false) { DBG("camId" << camId); @@ -530,7 +530,7 @@ #else vptRpcElement.registerConnector([&] { if (!perimeterElement.isBusy()) { perimeterElement.setYoloObjects(vptRpcElement.getLastHpRects()); perimeterElement.setYoloObjects(vptRpcElement.getLastScoreRects()); perimeterElement.setImage(vptRpcElement.getImage()); perimeterElement.submit(); } QiaoJiaSystem/StructureApp/PerimeterElement.cpp
@@ -14,19 +14,19 @@ #include <jsoncpp/json/json.h> #define ALARM_PERCENT (25) //25% PerimeterElement::PerimeterElement(const SdkRule &rule) : m_sdkRule(rule), PipeElement(true), trackingTrigger(nullptr), mRealNum(0), //每秒几张,就乘以几 m_triggerElement(rule.nTriggerDelay*3,0), m_triggerElement(rule.nTriggerDelay * 3, 0), pManagerEsDB(nullptr), m_bIsMask(true), m_bSetWH(false), pointArray(nullptr), m_rpcClient("RtspAnalysServer", "127.0.0.1",appPref.getIntData("RpcVTIMPort"),"tcp") { m_rpcClient("RtspAnalysServer", "127.0.0.1", appPref.getIntData("RpcVTIMPort"), "tcp") { pManagerEsDB = new EsDBTool(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); } @@ -36,8 +36,7 @@ delete pManagerEsDB; pManagerEsDB = nullptr; } if(pointArray) { if (pointArray) { // delete[] pointArray[0]; delete[] pointArray; } @@ -60,11 +59,17 @@ bool state = false; m_recVec.clear(); //todo debug m_scoreVec.clear(); m_objTypeVec.clear(); // DBG("Objs="<<mObjs.size()<<" fSensitivity="<<m_sdkRule.fSensitivity<<" nThreshold"<<m_sdkRule.nThreshold); for (auto obj:mObjs) { for (auto &obj:mObjs) { if (obj.score < m_sdkRule.fSensitivity)continue; DBG("objArea:" << obj.rect.width * obj.rect.height); DBG("alarmObjType:" << obj.properties["type"]); QRect rect(obj.rect.x, obj.rect.y, obj.rect.width, obj.rect.height); QPoint center = rect.center(); @@ -74,66 +79,64 @@ // DBG("picDate="<<picDate); } if(imgKey.empty()) { imgKey =obj.properties["imgKey"]; if (imgKey.empty()) { imgKey = obj.properties["imgKey"]; } if (m_sdkRule.nSdkType == PerimeterSdk) { if(m_bIsMask) if (m_sdkRule.nSdkType == PerimeterSdk) { //todo 解析sdkrule 并和检测结果对比 if (m_sdkRule.strPerimeterObjType.toStdString().find(obj.properties["type"]) == m_sdkRule.strPerimeterObjType.toStdString().npos)//页面没有配置了该算法 { std::vector<Point> poly2; std::vector<Point> interPoly; poly2.push_back(Point(rect.x(),rect.y())); poly2.push_back(Point(rect.x()+rect.width(),rect.y())); poly2.push_back(Point(rect.x()+rect.width(),rect.y()+rect.height())); poly2.push_back(Point(rect.x(),rect.y()+rect.height())); IntAreaCalcUtil::PolygonClip(poly1,poly2,interPoly); float inter = IntAreaCalcUtil::intAreaCalc(interPoly); float total1 =IntAreaCalcUtil::intAreaCalc(poly1); float total2 = IntAreaCalcUtil::intAreaCalc(poly2); int per1 = (int)(inter / total1 * 100); int per2 = (int)(inter / total2 * 100); int per=std::max(per1,per2); continue; } if(ALARM_PERCENT <= per) { //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per); m_recVec.push_back(obj.rect); num++; } if (m_bIsMask) { std::vector<Point> poly2; std::vector<Point> interPoly; poly2.push_back(Point(rect.x(), rect.y())); poly2.push_back(Point(rect.x() + rect.width(), rect.y())); poly2.push_back(Point(rect.x() + rect.width(), rect.y() + rect.height())); poly2.push_back(Point(rect.x(), rect.y() + rect.height())); IntAreaCalcUtil::PolygonClip(poly1, poly2, interPoly); float inter = IntAreaCalcUtil::intAreaCalc(interPoly); float total1 = IntAreaCalcUtil::intAreaCalc(poly1); float total2 = IntAreaCalcUtil::intAreaCalc(poly2); int per1 = (int) (inter / total1 * 100); int per2 = (int) (inter / total2 * 100); int per = std::max(per1, per2); if (ALARM_PERCENT <= per) { //DBG("per 1="<<per1<<" per2="<<per2<<" per="<<per); m_recVec.push_back(obj.rect); m_scoreVec.push_back(obj.score); m_objTypeVec.push_back(obj.properties["type"]); num++; DBG("============alarmObjType:" << obj.properties["type"] << " score:" << obj.score); } } } else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) { } else if (mPolygon.containsPoint(center, Qt::OddEvenFill) || !m_bIsMask) { m_recVec.push_back(obj.rect); num++; } } switch (m_sdkRule.nSdkType) { case PerimeterSdk: //state = num > 0 ; state =( num !=mRealNum); // DBG("num="<<num<< "time="<< picDate); state = (num != mRealNum); // DBG("num="<<num<< "time="<< picDate); INFO("SDK Type: PerimeterSdk"); break; case CrowdSdk: state = num > m_sdkRule.nAlarmNumLowerLimit && num !=mRealNum; state = num > m_sdkRule.nAlarmNumLowerLimit && num != mRealNum; INFO("SDK Type: CrowdSdk"); break; case PerHubSdk: state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num !=mRealNum; state = num > m_sdkRule.nAlarmNumLowerLimit && num < m_sdkRule.nAlarmNumUpperLimit && num != mRealNum; INFO("SDK Type: PerHubSdk"); // if(m_sdkRule.nAlarmNumLowerLimit>=0) @@ -166,24 +169,32 @@ default: break; } INFO("State:"<<state<<" Num:"<<num<<" mRealNum:"<<mRealNum<<" LowerLimit :"<<m_sdkRule.nAlarmNumLowerLimit<<" HightLimit: "<<m_sdkRule.nAlarmNumUpperLimit); INFO("State:" << state << " Num:" << num << " mRealNum:" << mRealNum << " LowerLimit :" << m_sdkRule.nAlarmNumLowerLimit << " HightLimit: " << m_sdkRule.nAlarmNumUpperLimit << " m_triggerElement.getTriggerState() :" << m_triggerElement.getTriggerState()); m_triggerElement.setState(state); m_triggerElement.triggerOnce(); if (m_triggerElement.getTriggerState()) { if(num > 0) { if(pointArray!=nullptr) { const cv::Point2i* ppt[1] = { pointArray }; DBG("m_triggerElement.getTriggerState():" << m_triggerElement.getTriggerState()); if (m_triggerElement.getTriggerState()) { if (num > 0) { if (pointArray != nullptr) { const cv::Point2i *ppt[1] = {pointArray}; int npt[]={npts}; int npt[] = {npts}; cv::polylines(image, ppt,npt, 1, true,cv::Scalar(255,255,0), 2); cv::polylines(image, ppt, npt, 1, true, cv::Scalar(255, 255, 0), 2); } for(auto rect:m_recVec) { cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2); // for(auto rect:m_recVec) // { // cv::rectangle(image, rect, cv::Scalar(0, 0, 255), 2); // } for (int i = 0; i < m_recVec.size(); i++) { cv::rectangle(image, m_recVec[i], cv::Scalar(0, 0, 255), 2); cv::putText(image, to_string(m_scoreVec[i]), cv::Point(m_recVec[i].x, m_recVec[i].y + 12), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5, cv::Scalar(255, 255, 0)); cv::putText(image, m_objTypeVec[i], cv::Point(m_recVec[i].x, m_recVec[i].y + 24), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5, cv::Scalar(255, 255, 0)); } // cv::Mat t_image = image(CutMask()).clone(); // if(t_image.empty()) @@ -192,7 +203,7 @@ // return; // } std::string imgUrl = uploadImgToFdfs(image); saveInfoToEs(imgUrl, picDate,imgKey); saveInfoToEs(imgUrl, picDate, imgKey); } DBG("num=" << num << " lastnum=" << mRealNum); mRealNum = num; @@ -262,31 +273,28 @@ void PerimeterElement::setMask(std::string mask) { QJsonArray arrayAreas = getJsonArrayFromQString(QString::fromStdString(mask)); if (arrayAreas.isEmpty() && m_sdkRule.nSdkType != PerimeterSdk) { m_bIsMask=false; m_bIsMask = false; return;//do not detect } int size = arrayAreas.size(); npts = size; float sizeW=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"width")/480; float sizeH=(float)appPref.getIntData(m_sdkRule.strCamId.toStdString()+"height")/270; pointArray=new cv::Point2i[npts]; float sizeW = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "width") / 480; float sizeH = (float) appPref.getIntData(m_sdkRule.strCamId.toStdString() + "height") / 270; pointArray = new cv::Point2i[npts]; for (int i = 0; i < size; ++i) { QJsonValue jsonValue = arrayAreas[i]; QJsonObject obj = jsonValue.toObject(); int x = obj.value("x").toDouble() *sizeW; int y = obj.value("y").toDouble() *sizeH; pointArray[i]={x,y}; if(m_sdkRule.nSdkType == PerimeterSdk) { poly1.push_back(Point(x,y)); int x = obj.value("x").toDouble() * sizeW; int y = obj.value("y").toDouble() * sizeH; pointArray[i] = {x, y}; if (m_sdkRule.nSdkType == PerimeterSdk) { poly1.push_back(Point(x, y)); } else { mPolygon << (QPoint(x, y)); } else { mPolygon << (QPoint(x, y)); } DBG("width="<<sizeW); DBG("height="<<sizeH); DBG("width=" << sizeW); DBG("height=" << sizeH); } @@ -307,10 +315,9 @@ // 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; } } @@ -327,7 +334,7 @@ CvUtil::cvMat2Buffer(image, buffer); std::string strImgUrlTmp = ""; fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); // strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); strImgUrl.clear(); strImgUrl = strImgUrlTmp; // strImgUrl.append("/").append(strImgUrlTmp); @@ -336,7 +343,7 @@ return strImgUrl; } bool PerimeterElement::saveInfoToEs(const std::string &imgUrl, const std::string &time,const std::string& imgKey) { bool PerimeterElement::saveInfoToEs(const std::string &imgUrl, const std::string &time, const std::string &imgKey) { string str_uuid; uuid_t t_uuid; @@ -361,13 +368,13 @@ t_json["ChannlId"] = getProperty("ch_id"); // 通道id t_json["likeDate"] = AppUtil::getTimeSecString(); // 比对时间 t_json["picAddress"] = m_sdkRule.strAddr.toStdString();// 抓拍地址 DBG("picAddress="<<m_sdkRule.strAddr.toStdString()); DBG("picAddress=" << m_sdkRule.strAddr.toStdString()); t_json["picMaxUrl"] = ""; // 大图路径 // t_json["Age"] ="wait todo"; t_json["picDate"] = time; // 抓拍时间,必须有 DBG("picDate="<<time); DBG("picDate=" << time); t_json["picLocalUrl"] = ""; // 本地路径 t_json["isDelete"] = "1";//默认1 ,0无效 1有效 @@ -389,20 +396,18 @@ t_json["imgKey"] = imgKey; try { auto server = m_rpcClient.getServer(); if (!server) { if (!server) { ERR("server is null"); //return false; } INFO("Record Video "<<imgKey); INFO("Record Video " << imgKey); server->recordVideo(imgKey); } catch (std::exception &e) { ERR("Record Video Err: "<<imgKey <<" Message: "<<e.what()); catch (std::exception &e) { ERR("Record Video Err: " << imgKey << " Message: " << e.what()); //return false; } INFO("SaveImgKeyToES: "<<imgKey); INFO("SaveImgKeyToES: " << imgKey); bool retface = false; if (pManagerEsDB) retface = pManagerEsDB->insertData("personaction", "perVideoAction", t_json.toStyledString(), str_uuid); QiaoJiaSystem/StructureApp/PerimeterElement.h
@@ -85,7 +85,12 @@ int npts; std::vector<cv::Rect> m_recVec; std::vector<cv::Rect> m_recVec; //todo debug std::vector<float> m_scoreVec; std::vector<std::string> m_objTypeVec; bool m_bIsMask; std::vector<Point> poly1; QiaoJiaSystem/StructureApp/VptRpcElement.cpp
@@ -10,6 +10,7 @@ appPref.getStringData("vpt.ip"), appPref.getIntData("vpt.port"), "tcp"), m_sharedMemory(nullptr), m_trackingTrigger(nullptr) { init(); } @@ -63,9 +64,9 @@ } for (auto &obj: m_objs) { //#todo 人/人骑车/车 if (obj.sdkDetectType != 0) continue; // //#todo 人/人骑车/车 // if (obj.sdkDetectType != 0) // continue; ScoredRect scoredRect; @@ -80,24 +81,25 @@ m_trackingTrigger->getLastRect().properties["time"] = getProperty("time"); m_trackingTrigger->getLastRect().properties["imgKey"] = getProperty("imgKey"); m_triggerScoredRects.push_back(m_trackingTrigger->getLastRect()); switch (obj.sdkDetectType) { case 0 : m_HPScoredRects.push_back(m_trackingTrigger->getLastRect()); break; case 1: case 2 : m_HCPScoredRects.push_back(m_trackingTrigger->getLastRect()); break; case 4 : case 5 : case 6 : case 8 : m_CarScoredRects.push_back(m_trackingTrigger->getLastRect()); break; } } } m_trackingTrigger->triggerLine(); auto res_ = m_trackingTrigger->getLastScoreRects(); for (auto &obj: res_) { if(obj.properties["type"] == "person") { m_HPScoredRects.push_back(obj); DBG("person:" << obj.score); }else if((obj.properties["type"] == "bike") || (obj.properties["type"] == "motor")){ m_HCPScoredRects.push_back(obj); DBG("bike or moto:" << obj.score); }else{ m_CarScoredRects.push_back(obj); DBG("car:" << obj.score); } } fireConnectors(); } @@ -113,9 +115,9 @@ try { auto server = m_rpcClient.getServer(); m_HpResStr = server->getStr(0); // 检测种类 case 0 m_HcpResStr = server->getStr(1); // 检测种类 case 1 m_TypeStr = server->getStr(2)[0]; // 检测种类 case 2 m_HpResStr = server->getStr(0); // 行人二次属性 case 0 m_HcpResStr = server->getStr(1); // 人骑车二次属性 case 1 m_TypeStr = server->getStr(2)[0]; // VPT检测种类 case 2 m_colorLabelStr = server->getStr(3)[0]; // 车牌颜色 case 3 } catch (std::exception &e) { QiaoJiaSystem/StructureApp/main.cpp
@@ -21,13 +21,18 @@ appPref.setIntData("gpu.index", 0); appPref.setIntData("show.image", 0); //yolo server appPref.setStringData("yolo.proxy", "yoloServer"); //#todo appPref.setStringData("yolo.ip", ""); appPref.setIntData("yolo.port", 10003); // rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"), // //yolo server // appPref.setStringData("yolo.proxy", "yoloServer"); // //#todo // appPref.setStringData("yolo.ip", ""); // appPref.setIntData("yolo.port", 10003); //// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"), //vpt server appPref.setStringData("vpt.proxy", "VptServer"); //#todo appPref.setStringData("vpt.ip", ""); appPref.setIntData("vpt.port", appPref.getIntData("RpcVptPort")); //face detect server appPref.setStringData("faceDete.proxy", "faceServer"); QiaoJiaSystem/VideoAnalysFromHC/RtspAnalysElement.cpp
@@ -254,14 +254,16 @@ 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; // if (rule.second.nSdkType == PerStaticSdk || rule.second.nSdkType == PerimeterSdk // || rule.second.nSdkType == KeepRightSdk || rule.second.nSdkType == KeepRightSdk) { float temp = (float)1 - (float) (rule.second.nThreshold) / 100; rule.second.fSensitivity = (temp * 75 + 25) / 100; // rule.second.fSensitivity = (temp * 25 + 75) / 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 = (float)1 - (float) (rule.second.nThreshold) / 100; // rule.second.fSensitivity = (temp * 90 + 5) / 100; // } DBG("fSensitivity" << rule.second.fSensitivity); } appPref.setStringData(t_camIdex + "rtsp", rtsp_url); QiaoJiaSystem/VideoAnalysFromHC/main.cpp
@@ -86,7 +86,7 @@ appPref.setIntData("gpu.index", atoi(argv[2])); appPref.setIntData("CamStartNO", atoi(argv[3])); appPref.setIntData("CamEndNO", atoi(argv[4])); appPref.setIntData("RpcYOLOPort", atoi(argv[5])); appPref.setIntData("RpcVptPort", atoi(argv[5])); appPref.setIntData("RpcFDPort", atoi(argv[6])); appPref.setIntData("RpcFEPort", atoi(argv[7])); appPref.setIntData("RpcFSPort", atoi(argv[8])); @@ -102,12 +102,17 @@ appPref.setIntData("ipPort", appConfig.getIntProperty("ES_PORT")); //yolo server appPref.setStringData("yolo.proxy", "yoloServer"); //#todo appPref.setStringData("yolo.ip", ""); appPref.setIntData("yolo.port", appPref.getIntData("RpcYOLOPort")); // rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"), // appPref.setStringData("yolo.proxy", "yoloServer"); // //#todo // appPref.setStringData("yolo.ip", ""); // appPref.setIntData("yolo.port", appPref.getIntData("RpcYOLOPort")); //// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"), //vpt server appPref.setStringData("vpt.proxy", "vptServer"); //#todo appPref.setStringData("vpt.ip", ""); appPref.setIntData("vpt.port", appPref.getIntData("RpcVptPort")); //face detect server appPref.setStringData("faceDete.proxy", "faceServer"); QiaoJiaSystem/VideoServer/QiaoJia/DB/DBStruct.h
@@ -299,6 +299,7 @@ strExAreas = ""; strLine = ""; strAddr = ""; strPerimeterObjType = ""; } int nSdkType; @@ -318,6 +319,7 @@ int nAlarmNumUpperLimit; //报警人数(人员拥挤) int nAlarmNumLowerLimit; int nIsRun; QString strPerimeterObjType;//入侵类型 std::vector<LActRuleWeekRecord> weekRuleVec; }; QiaoJiaSystem/VideoServer/QiaoJia/DB/LDBTool.cpp
@@ -2688,6 +2688,7 @@ rec.setValue("is_run", sdkRule.nIsRun); rec.setValue("img_threshold", sdkRule.nThreshold); rec.setValue("img_quality", sdkRule.nQuality); rec.setValue("perimeter_obj_type", sdkRule.strPerimeterObjType); int rowCount = pModel.rowCount(); if (rowCount == 0) { @@ -2734,6 +2735,7 @@ rule.nAlarmNumUpperLimit = rec.value("alarm_num_upper").toInt(); rule.nAlarmNumLowerLimit = rec.value("alarm_num_lower").toInt(); rule.strBroadcast = rec.value("broadcast_area").toString(); rule.strPerimeterObjType = rec.value("perimeter_obj_type").toString(); rule.nIsRun = rec.value("is_run").toInt(); rule.nSdkType = rec.value("sdk_type").toInt(); ruleMap[rule.nSdkType] = rule; QiaoJiaSystem/VideoToImageMulth/RtspAnalysManager.cpp
@@ -443,7 +443,7 @@ //录取视频的RPC的接口函数 ::std::string RtspAnalysManager::recordVideo(const ::std::string &name, const ::Ice::Current &) { INFO("Record Video For: " << name); // INFO("Record Video For: " << name); ImageName_s_t nameSt = ImageName_s_t::fromString(name); if (nameSt.Valid()) { if (m_GB28181_Enable) { QiaoJiaSystem/VptServer/CMakeLists.txt
@@ -36,6 +36,9 @@ VptServerI.cpp VptDetectWrapper.cpp ./rpc/VptServer.cpp ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp # GlobalSignalWaitLock.hpp ) QiaoJiaSystem/VptServer/VptDetectWrapper.cpp
@@ -4,6 +4,7 @@ #include <basic/debug/Debug.h> #include "VptDetectWrapper.h" #include <basic/timer_counter/Clocktimer.h> VptDetectWrapper::VptDetectWrapper() { init(); @@ -43,6 +44,7 @@ } list<VptDetectResults> VptDetectWrapper::process_image(cv::Mat &_img) { ClockTimer ct("VptDetectWrapper::process_image"); m_results.clear(); sy_img img; @@ -61,6 +63,7 @@ int colorIndex = result.info[i].obj_index; if (colorIndex < 0 || colorIndex >= 9)continue; if(colorIndex==4) DBG("detect a car, score =" << result.info[i].obj_score); // sprintf(str_i, "%s:%.2f", type[colorIndex].c_str(), result.info[i].obj_score); // rectangle(process_image, @@ -100,7 +103,7 @@ delete[] result.info; result.info = NULL; } DBG(m_results.size()); // DBG(m_results.size()); return m_results; } @@ -146,61 +149,66 @@ auto &carRes = vptDetectResults.vptDetectRes.carDetectRes; // 车颜色 carRes.colorLabel = static_cast<ColorLabel>(cur_res->vc_res.res_index); carRes.colorLabelProb = cur_res->vc_res.res_prob; if(m_param.vehicle_color_config == SY_CONFIG_OPEN) { carRes.colorLabel = static_cast<ColorLabel>(cur_res->vc_res.res_index); carRes.colorLabelProb = cur_res->vc_res.res_prob; } // 车型识别 if (cur_res->vr_res.vehicle_brand != NULL) { cout << " 车辆品牌 - " << cur_res->vr_res.vehicle_brand << endl; carRes.vehicle_brand = cur_res->vr_res.vehicle_brand; if(m_param.vehicle_recg_config == SY_CONFIG_OPEN) { if (cur_res->vr_res.vehicle_brand != NULL) { cout << " 车辆品牌 - " << cur_res->vr_res.vehicle_brand << endl; carRes.vehicle_brand = cur_res->vr_res.vehicle_brand; // carRes.vehicle_brand = string(cur_res->vr_res.vehicle_brand); // carRes.vehicle_brand = "发"; delete[] cur_res->vr_res.vehicle_brand; cur_res->vr_res.vehicle_brand = NULL; } if (cur_res->vr_res.vehicle_subbrand != NULL) { cout << " 车辆子品牌 - " << cur_res->vr_res.vehicle_subbrand << endl; carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand; // carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand; delete[] cur_res->vr_res.vehicle_subbrand; cur_res->vr_res.vehicle_subbrand = NULL; } if (cur_res->vr_res.vehicle_issue_year != NULL) { cout << " 车辆年款 - " << cur_res->vr_res.vehicle_issue_year << endl; carRes.vehicle_issue_year = cur_res->vr_res.vehicle_issue_year; delete[] cur_res->vr_res.vehicle_issue_year; cur_res->vr_res.vehicle_issue_year = NULL; } if (cur_res->vr_res.vehicle_type != NULL) { cout << " 车辆类型 - " << cur_res->vr_res.vehicle_type << endl; carRes.vehicle_type = cur_res->vr_res.vehicle_type; delete[] cur_res->vr_res.vehicle_type; cur_res->vr_res.vehicle_type = NULL; } if (cur_res->vr_res.freight_ton != NULL) { cout << " 货车吨级 - " << cur_res->vr_res.freight_ton << endl; carRes.freight_ton = cur_res->vr_res.freight_ton; delete[] cur_res->vr_res.freight_ton; cur_res->vr_res.freight_ton = NULL; } // cout << " " << cur_res->vr_res.name_score << endl; carRes.vehicle_score = cur_res->vr_res.name_score; // 车牌 if (cur_res->vp_res.rect.height_ != 0 && cur_res->vp_res.rect.width_ != 0) { cout << "车牌位置: " << cur_res->vp_res.rect.left_ << " " << cur_res->vp_res.rect.top_ << " " << cur_res->vp_res.rect.width_ << " " << cur_res->vp_res.rect.height_ << endl; carRes.carPlateRect.setRect(cur_res->vp_res.rect.left_, cur_res->vp_res.rect.top_, cur_res->vp_res.rect.width_, cur_res->vp_res.rect.height_); carRes.carPlateRectScore = cur_res->vp_res.detectScore; std::string _carPlate; for (int m = 0; m < 7; m++) { printf("%s", cur_res->vp_res.recg[m].character); _carPlate.append(cur_res->vp_res.recg[m].character); delete[] cur_res->vr_res.vehicle_brand; cur_res->vr_res.vehicle_brand = NULL; } carRes.carPlate = const_cast<char *>(_carPlate.c_str()); carRes.carPlateRectScore = cur_res->vp_res.numScore; carRes.carPlatetype = cur_res->vp_res.type; if (cur_res->vr_res.vehicle_subbrand != NULL) { cout << " 车辆子品牌 - " << cur_res->vr_res.vehicle_subbrand << endl; carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand; // carRes.vehicle_subbrand = cur_res->vr_res.vehicle_subbrand; delete[] cur_res->vr_res.vehicle_subbrand; cur_res->vr_res.vehicle_subbrand = NULL; } if (cur_res->vr_res.vehicle_issue_year != NULL) { cout << " 车辆年款 - " << cur_res->vr_res.vehicle_issue_year << endl; carRes.vehicle_issue_year = cur_res->vr_res.vehicle_issue_year; delete[] cur_res->vr_res.vehicle_issue_year; cur_res->vr_res.vehicle_issue_year = NULL; } if (cur_res->vr_res.vehicle_type != NULL) { cout << " 车辆类型 - " << cur_res->vr_res.vehicle_type << endl; carRes.vehicle_type = cur_res->vr_res.vehicle_type; delete[] cur_res->vr_res.vehicle_type; cur_res->vr_res.vehicle_type = NULL; } if (cur_res->vr_res.freight_ton != NULL) { cout << " 货车吨级 - " << cur_res->vr_res.freight_ton << endl; carRes.freight_ton = cur_res->vr_res.freight_ton; delete[] cur_res->vr_res.freight_ton; cur_res->vr_res.freight_ton = NULL; } // cout << " " << cur_res->vr_res.name_score << endl; carRes.vehicle_score = cur_res->vr_res.name_score; } if(m_param.vehicle_pendant_det_recg_config == SY_CONFIG_OPEN) { // 车牌 if (cur_res->vp_res.rect.height_ != 0 && cur_res->vp_res.rect.width_ != 0) { cout << "车牌位置: " << cur_res->vp_res.rect.left_ << " " << cur_res->vp_res.rect.top_ << " " << cur_res->vp_res.rect.width_ << " " << cur_res->vp_res.rect.height_ << endl; carRes.carPlateRect.setRect(cur_res->vp_res.rect.left_, cur_res->vp_res.rect.top_, cur_res->vp_res.rect.width_, cur_res->vp_res.rect.height_); carRes.carPlateRectScore = cur_res->vp_res.detectScore; std::string _carPlate; for (int m = 0; m < 7; m++) { printf("%s", cur_res->vp_res.recg[m].character); _carPlate.append(cur_res->vp_res.recg[m].character); } carRes.carPlate = const_cast<char *>(_carPlate.c_str()); carRes.carPlateRectScore = cur_res->vp_res.numScore; carRes.carPlatetype = cur_res->vp_res.type; // printf(" numScore = %.2f, detectScore = %.2f\n", cur_res->vp_res.numScore, cur_res->vp_res.detectScore); } };