From c90d8c9cbd9175a689265af9b4036f28b9815cde Mon Sep 17 00:00:00 2001
From: miyanhui <dennismi1024@gmail.com>
Date: 星期四, 14 二月 2019 14:19:13 +0800
Subject: [PATCH] 去掉AppPipeController里面的VideoCapture的Ffmpeg代码
---
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