From d3b7bbe7102cd089680a828f5d8f6402c8cf6342 Mon Sep 17 00:00:00 2001 From: pansen <pansen626@sina.com> Date: 星期四, 07 三月 2019 14:43:28 +0800 Subject: [PATCH] GB28181集成完成,集成推流模块 --- QiaoJiaSystem/StructureApp/YoloRpcElement.cpp | 207 +++++++++++++++++---------------------------------- 1 files changed, 68 insertions(+), 139 deletions(-) diff --git a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp index 0a47849..e3ccd11 100644 --- a/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp +++ b/QiaoJiaSystem/StructureApp/YoloRpcElement.cpp @@ -6,24 +6,20 @@ #include <basic/util/opencv/CvUtil.h> -#include <basic/db/Elasticsearch/EsDBTool.h> -#include <uuid/uuid.h> -#include <jsoncpp/json/json.h> - -#include <QtCore/QJsonDocument> -#include <QtCore/QJsonObject> - -YoloRpcElement::YoloRpcElement(string shareMemoryName) : +YoloRpcElement::YoloRpcElement(std::string shareMemoryName) : rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), - appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr), - m_triggerElement(0, 50), trackingTrigger(nullptr) { + appPref.getIntData("yolo.port"), "tcp"), + sharedMemory(nullptr), + trackingTrigger(nullptr) +{ + trackingTrigger = new TrackingTrigger(0.5); sharedMemory = new QSharedMemory(QString(shareMemoryName.c_str())); // DBG(shareMemoryName); //1520 x 2688 1080 x 1920 //2560 * 1440 * 4 if (!sharedMemory->create(4608 * 2592 * 4)) { sharedMemory->attach(); } - trackingTrigger = new TrackingTrigger(0.5); + try { auto server = rpcClient.getServer(); cocoData = server->getCocoData(); @@ -37,39 +33,65 @@ if (sharedMemory) { delete sharedMemory; } - if (trackingTrigger) { + if(trackingTrigger) + { delete trackingTrigger; + trackingTrigger=nullptr; } } +void YoloRpcElement::setImage(const cv::Mat &value) +{ + if (value.size != image.size) + { + image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); + } + value.copyTo(image); +} +::YoloDetect::ObjInfos YoloRpcElement::getObjects() const +{ + return objs; +} -void YoloRpcElement::threadFunc() { -// ClockTimer ct("YoloRpcElement::threadFunc");. - triggerMats.clear(); + +std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const { + return trackingTrigger->getLastScoreRects(); +} + + cv::Mat YoloRpcElement::getImage() const +{ + return image; +} + +void YoloRpcElement::threadFunc() +{ + // ClockTimer ct("YoloRpcElement::threadFunc"); + triggerScoredRects.clear(); try { - auto server = rpcClient.getServer(); - if (!server) { - ERR("server is null"); - return; + auto server = rpcClient.getServer(); + if (!server) + { + ERR("server is null"); + return; + } + objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO } - objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO - if (objs.size() <= 0) { - m_triggerElement.setState(false); - m_triggerElement.triggerOnce(false); - trackingTrigger->triggerLine(); - return; - } else { - m_triggerElement.setState(true); + catch (std::exception &e) + { + ERR(e.what()) } - string t_camIdex = getProperty("dev_id") + getProperty("ch_id"); - float t_det_sc = - appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det"); +// int size=objs.size(); +// if(size>30) +// { - for (auto &obj: objs) { +// DBG("size="<<size); +// return; +// } + + for (auto &obj: objs) + { if (obj.type != 0) continue; - if (obj.prob < t_det_sc) { - continue; - } + ScoredRect scoredRect; int x = obj.rcObj.left * image.cols; @@ -77,122 +99,29 @@ int w = (obj.rcObj.right - obj.rcObj.left) * image.cols; int h = (obj.rcObj.bottom - obj.rcObj.top) * image.rows; scoredRect.rect = cv::Rect(x, y, w, h); - scoredRect.score = scoredRect.rect.area() > 0 ? obj.prob : 0; - if (trackingTrigger->triggerOnce(scoredRect)) { + scoredRect.properties["time"] = getProperty("time"); + scoredRect.properties["imgKey"]=getProperty("imgKey"); + if (trackingTrigger->triggerOnce(scoredRect)) + { trackingTrigger->getLastRect().properties["id"] = to_string(scoredRect.id); trackingTrigger->getLastRect().properties["type"] = cocoData[obj.type]; - auto t_image = image(scoredRect.rect & cv::Rect(0, 0, image.cols, image.rows)).clone(); - triggerMats.push_back(t_image); - - std::string strImgUrl = "http://"; - if (fdfsClient != nullptr && fdfsClient->fastFds != nullptr) { - fdfsClient->rwLock.rdlock(); - std::vector<unsigned char> buffer; - CvUtil::cvMat2Buffer(t_image, buffer); - std::string strImgUrlTmp = ""; - fdfsClient->fastFds->uploadFile(buffer, strImgUrlTmp, "jpg"); - strImgUrl.append(fdfsClient->fastFds->getIp() + "/" + strImgUrlTmp); - strImgUrl.clear(); - strImgUrl = strImgUrlTmp; -// strImgUrl.append("/").append(strImgUrlTmp); - fdfsClient->rwLock.unlock(); - } - - //浣跨敤鐨勬椂鍊欏皢false鏀逛负ture - { - //#todo - EsDBTool pManagerEsDB(appPref.getStringData("ipAdd"), appPref.getIntData("ipPort")); - - string str_uuid; - uuid_t t_uuid; - char str[36]; - uuid_generate(t_uuid); - uuid_unparse(t_uuid, str); - str_uuid = str; - -// jsonyolo.insert("HardCamId","");//纭洏鎽勫儚鏈篿d 锛燂紵锛熸嬁涓嶅埌 -// jsonyolo.insert("ChannlId","");//閫氶亾id 锛燂紵锛� 鎷夸笉鍒� -// jsonyolo.insert("Time","");//鏃堕棿 鍙互鑾峰彇褰撳墠鏃堕棿 鏄庣‘鏃堕棿鏄幏鍙栧綋鍓嶇殑杩樻槸浼犺繃鏉ョ殑 锛燂紵锛� 鎷夸笉鍒� -// jsonyolo.insert("ImgUrl","");//鍥惧儚img璺緞 锛燂紵锛� 鎷夸笉鍒� -// jsonyolo.insert("Image","");//蹇収 锛燂紵锛� 鎷夸笉鍒� -// jsonyolo.insert("DataType",obj.type);//妫�娴嬬殑绫诲瀷 -// jsonyolo.insert("Score",obj.prob);//妫�娴嬬殑寰楀垎 - - Json::Value t_json; - t_json["Id"] = str_uuid; //涓婚敭 -//#todo - - t_json["picName"] = "wait todo"; - t_json["DataType"] = cocoData[obj.type]; - t_json["Score"] = obj.prob; - - t_json["personPicUrl"] = "wait todo";//浜哄憳鍥剧墖 store - t_json["likeDate"] = AppUtil::getTimeSecString();//姣旇緝鏃堕棿 - t_json["picAddress"] = getProperty("str_addr");//鎶撴媿鍦板潃 - t_json["picMaxUrl"] = "wait todo";//澶у浘璺緞 - t_json["picLocalUrl"] = "wait todo";//鏈湴璺緞 - t_json["picSmUrl"] = strImgUrl;//浜哄憳鎶撳皬鍥� - -// faceRpcElement.setProperty("frame_number", frame_number); - t_json["picDate"] = getProperty("time"); - t_json["content"] = "wait todo"; - t_json["viType"] = "2";//鍙湁4绉嶇被鍨� 1:personface 2:personbody 3:car 4:bicycle 5:none 鏈煡绫诲瀷 - t_json["personIsHub"] = "4";//1: 鎶ヨ 2: 鍙枒 3: 瀹夊叏 4: 鏈煡 - t_json["videoIp"] = getProperty("local_ip");//褰撳墠鏈嶅姟鍣↖P鍦板潃 - - - t_json["videoNum"] = getProperty("path");//Vide缂栧彿 澶栭敭 - t_json["videoReqNum"] = getProperty("dev_id");//Video璁惧缂栧彿 - t_json["ChannlId"] = getProperty("ch_id");//閫氶亾id - t_json["isDelete"] = "1";//榛樿1 ,0鏃犳晥 1鏈夋晥 - - t_json["indeviceid"] = appPref.getStringData("fxDevID"); - t_json["indevicename"] = appPref.getStringData("fxDevNAME"); - - DBG(t_json.toStyledString()); - bool retface = false; - retface = pManagerEsDB.insertData("yolodet", "info", t_json.toStyledString(), str_uuid); - if (retface) { - INFO("facedb success"); - } else { - ERR("facedb fail"); - } - } + trackingTrigger->getLastRect().properties["time"] = getProperty("time"); + trackingTrigger->getLastRect().properties["imgKey"]=getProperty("imgKey"); + // DBG("time)"<<getProperty("time")); + triggerScoredRects.push_back(trackingTrigger->getLastRect()); } } trackingTrigger->triggerLine(); - m_triggerElement.triggerOnce(false); - if (triggerMats.size() > 0)fireConnectors("YoloTrigger"); +// if(trackingTrigger->getLastScoreRects().size()>20) +// { +// DBG(""); +// } fireConnectors(); - } catch (std::exception &e) { - ERR(e.what()) - } } -::YoloDetect::ObjInfos YoloRpcElement::getObjects() const { - return objs; -} -bool YoloRpcElement::getTrigger() const { - return (objs.size() > 0 ? true : false); -} -std::vector<cv::Mat> YoloRpcElement::getTriggerMats() { - return triggerMats; -} -std::vector<ScoredRect> YoloRpcElement::getLastScoreRects() const { - return trackingTrigger->getLastScoreRects(); -} -void YoloRpcElement::setImage(const cv::Mat &value) { - if (value.size != image.size) { - image = cv::Mat(value.rows, value.cols, CV_8UC3, sharedMemory->data()); - } - value.copyTo(image); -} -bool YoloRpcElement::getTriggerState() const { - return m_triggerElement.getTriggerState(); -} -- Gitblit v1.8.0