From 59408e43480b48b6acd6e76641ff1a97811e7ab5 Mon Sep 17 00:00:00 2001
From: pansen <pansen626@sina.com>
Date: 星期四, 10 一月 2019 18:19:49 +0800
Subject: [PATCH] 修改yoloServer 优化多线程?
---
.gitignore | 4
QiaoJiaSystem/YoloServer/YoloDetectServerI.h | 36 +
QiaoJiaSystem/YoloServer/DnDetect.h | 89 ++++-
QiaoJiaSystem/YoloServer/ImageDrawElement.cpp | 55 ++-
QiaoJiaSystem/YoloServer/YoloRpcElement.cpp | 126 +++++++
QiaoJiaSystem/VideoAnalysFromHC/main.cpp | 5
QiaoJiaSystem/StructureApp/FaceRpcElement.cpp | 1
QiaoJiaSystem/YoloServer/DnDetect.cpp | 164 ++++++----
QiaoJiaSystem/YoloServer/main.cpp | 21 +
QiaoJiaSystem/YoloServer/ImageDrawElement.h | 30 +
QiaoJiaSystem/YoloServer/YoloRpcElement.h | 52 +++
QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp | 160 +++-------
QiaoJiaSystem/YoloServer/CMakeLists.txt | 108 ++++-
QiaoJiaSystem/CMakeLists.txt | 2
QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp | 98 +++--
15 files changed, 645 insertions(+), 306 deletions(-)
diff --git a/.gitignore b/.gitignore
index ccb23fd..6435583 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,7 @@
build-QiaoJiaSystem-unknown-Default/
QiaoJiaSystem/build/glog_dump\.log
+
+\.idea/
+
+QiaoJiaSystem/VideoAnalysFromHC/cmake-build-debug/
diff --git a/QiaoJiaSystem/CMakeLists.txt b/QiaoJiaSystem/CMakeLists.txt
index 2da842a..400e343 100644
--- a/QiaoJiaSystem/CMakeLists.txt
+++ b/QiaoJiaSystem/CMakeLists.txt
@@ -16,7 +16,7 @@
add_subdirectory(StructureApp)
add_subdirectory(FaceDetectServer)
-#add_subdirectory(YoloServer)
+add_subdirectory(YoloServer)
add_subdirectory(FaceSearchServer)
add_subdirectory(VideoAnalysFromHC)
add_subdirectory(RapidStructureApp)
diff --git a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
index 6f2cdd1..d661aa0 100644
--- a/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
+++ b/QiaoJiaSystem/StructureApp/FaceRpcElement.cpp
@@ -107,6 +107,7 @@
trackingTrigger->getLastRect().properties["smile"] = to_string(property.smile_level);
trackingTrigger->getLastRect().properties["race"] = to_string(property.race);
trackingTrigger->getLastRect().properties["time"] = getProperty("time");
+ trackingTrigger->getLastRect().properties["detectscore"] = scoredRect.score;
triggerFaces.push_back(face);
triggerMats.push_back(image(
diff --git a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
index cfb0eba..2b01d43 100644
--- a/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
+++ b/QiaoJiaSystem/VideoAnalysFromHC/main.cpp
@@ -66,7 +66,10 @@
int main(int argc, char **argv) {
SAVE_APP_ARGS
- ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+
+#ifdef GLOG
+ ENABLEGLOG(GET_STR_CONFIG("logPath").c_str());
+#endif
appPref.setLongData("gpu.index", 0);
appPref.setIntData("show.image", 0);
diff --git a/QiaoJiaSystem/YoloServer/CMakeLists.txt b/QiaoJiaSystem/YoloServer/CMakeLists.txt
index ff8a39e..646fbf1 100644
--- a/QiaoJiaSystem/YoloServer/CMakeLists.txt
+++ b/QiaoJiaSystem/YoloServer/CMakeLists.txt
@@ -59,11 +59,16 @@
../../../BasicPlatForm/libs/Ice-3.7.0/include
../../../BasicPlatForm/libs/DarkNet/lib
../../../BasicPlatForm/libs/ffmpeg/lib
+ ../../../BasicPlatForm/libs/FastDFS/lib
+ ../../../BasicPlatForm/libs/crul/lib
+ ../../../BasicPlatForm/libs/jsoncpp/lib
+ ../../../BasicPlatForm/libs/libuuid/lib
)
add_executable(${PROJECT_NAME}
main.cpp
YoloDetectServerI.cpp
+ DnDetect.cpp
rpc/YoloServer.cpp
)
@@ -71,33 +76,76 @@
${LIBS}
)
-#add_executable(YoloDetectClientTest
-# ../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
-# ../../BasicPlatForm/basic/util/opencv/CvUtil.h
-# ../../BasicPlatForm/basic/pipe/PipeConnector.cpp
-# ../../BasicPlatForm/basic/pipe/PipeConnector.h
-# ../../BasicPlatForm/basic/pipe/PipeController.cpp
-# ../../BasicPlatForm/basic/pipe/PipeController.h
-# ../../BasicPlatForm/basic/pipe/PipeElement.cpp
-# ../../BasicPlatForm/basic/pipe/PipeElement.h
-#
-# ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
-# ../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.h
-# ../../BasicPlatForm/basic/pipe_element/ImageShowElement.cpp
-# ../../BasicPlatForm/basic/pipe_element/ImageShowElement.h
-# ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.cpp
-# ../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.h
-# rpc/YoloServer.cpp
-# YoloDetectClientTest.cpp
-# YoloRpcElement.cpp
-# YoloRpcElement.h
-# ImageDrawElement.cpp
-# )
-#
-#target_link_libraries(YoloDetectClientTest
-# Ice
-# Qt5Core
-# avformat avcodec avutil avfilter swscale swresample
-# opencv_world
-# pthread
-# )
+add_executable(YoloDetectClientTest
+ ../../../BasicPlatForm/basic/util/opencv/CvUtil.cpp
+ ../../../BasicPlatForm/basic/util/opencv/CvUtil.h
+ ../../../BasicPlatForm/basic/pipe/PipeConnector.cpp
+ ../../../BasicPlatForm/basic/pipe/PipeConnector.h
+ ../../../BasicPlatForm/basic/pipe/PipeController.cpp
+ ../../../BasicPlatForm/basic/pipe/PipeController.h
+ ../../../BasicPlatForm/basic/pipe/PipeElement.cpp
+ ../../../BasicPlatForm/basic/pipe/PipeElement.h
+ ../../../BasicPlatForm/basic/timer_counter/Clocktimer.h
+ ../../../BasicPlatForm/basic/timer_counter/Clocktimer.cpp
+
+ ../../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.cpp
+ ../../../BasicPlatForm/basic/pipe_element/ImageFactoryElement.h
+ ../../../BasicPlatForm/basic/pipe_element/ImageShowElement.cpp
+ ../../../BasicPlatForm/basic/pipe_element/ImageShowElement.h
+ ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.cpp
+ ../../../BasicPlatForm/basic/pipe_element/ffmpeg/VideoCaptureElement.h
+ ../../../BasicPlatForm/basic/util/fastdfs/FastdfsClient.cpp
+ ../../../BasicPlatForm/basic/pipe/TimerElement.cpp
+ ../RapidStructureApp/TriggerElement.cpp
+ ../../../BasicPlatForm/basic/db/Elasticsearch/EsDBTool.cpp
+ ../../../BasicPlatForm/basic/util/curl/HttpRequestWithCrul.hpp
+ rpc/YoloServer.cpp
+ YoloDetectClientTest.cpp
+ ./YoloRpcElement.cpp
+ ./YoloRpcElement.h
+ ImageDrawElement.cpp
+ )
+
+link_directories(
+
+ ../../../BasicPlatForm/libs/FastDFS/lib
+ ../../../BasicPlatForm/libs/crul/lib
+ ../../../BasicPlatForm/libs/libuuid/lib
+)
+include_directories(
+ ./rpc
+ ../StructureApp
+ ../RapidStructureApp/
+ ../../../BasicPlatForm
+ ../../../BasicPlatForm/libs/opencv/include
+ ../../../BasicPlatForm/libs/jsoncpp/include
+ ../../../BasicPlatForm/libs/Ice-3.7.0/include
+ ../../../BasicPlatForm/libs/ffmpeg/include
+ ../../../BasicPlatForm/libs/DarkNet/include
+ /usr/local/cuda/include/
+ /usr/include/x86_64-linux-gnu/qt5
+ ../../../BasicPlatForm/basic/util/fastdfs/
+ ../../../BasicPlatForm/libs/FastDFS/include
+ ../../../BasicPlatForm/libs/FastDFS/include/fastdfs
+ ../../../BasicPlatForm/libs/FastDFS/include/fastcommon
+ ../../../BasicPlatForm/basic/pipe/
+ ../../../BasicPlatForm/libs/crul/include
+ ../../../BasicPlatForm/basic/util/curl/
+ ../../../BasicPlatForm/libs/libuuid/include
+
+ #glog
+ ../../../BasicPlatForm/libs/glog/include
+)
+target_link_libraries(YoloDetectClientTest
+ Ice
+ Qt5Core
+ avformat avcodec avutil avfilter swscale swresample
+ opencv_world
+ curl
+ uuid
+ jsoncpp
+ fastcommon
+ fdfsclient
+ glog
+ pthread
+ )
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.cpp b/QiaoJiaSystem/YoloServer/DnDetect.cpp
index 498ba0f..61ad8b0 100644
--- a/QiaoJiaSystem/YoloServer/DnDetect.cpp
+++ b/QiaoJiaSystem/YoloServer/DnDetect.cpp
@@ -1,90 +1,92 @@
+#include <basic/util/app/AppPreference.hpp>
#include "DnDetect.h"
-DnDetect::DnDetect(const int gpuIndex):m_net(nullptr),m_thresh(0.5),m_hier_thresh(0.5),m_nms(0.45),names(nullptr),alphabet(nullptr)
-{
- cuda_set_device(gpuIndex);
-
- char *datacfg = "cfg/coco.data";
- char *cfgfile = "cfg/yolov3.cfg";
- char *weightfile = "./yolov3.weights";
-
- double loadtime = what_time_is_it_now();
- list *options = read_data_cfg(datacfg);
- char *name_list = option_find_str(options, "names", "data/names.list");
- names = get_labels(name_list);
-
- alphabet = load_alphabet();
- m_net = load_network(cfgfile, weightfile, 0);
- set_batch_network(m_net, 1);
- printf("load mod use %f seconds.\n", what_time_is_it_now()-loadtime);
-
- srand(2222222);
- double attime;
- float nms=.45;
-}
-
-DnDetect::~DnDetect()
-{
+DnDetect::DnDetect::DnDetect(const int gpuIndex) : m_net(nullptr), m_thresh(0.5), m_hier_thresh(0.5), m_nms(0.45),
+ names(nullptr), alphabet(nullptr), m_thdInit(init, this),
+ m_bInitThd(false) {
}
-std::vector<cv::Rect2f> DnDetect::detect(cv::Mat & img)
-{
+DnDetect::DnDetect::~DnDetect() {
- double bttime=what_time_is_it_now();
+}
+
+std::vector<DnDetect::YoloObjInfo> DnDetect::DnDetect::detect(cv::Mat &img) {
+ std::lock_guard<std::mutex> dataGuard(dataMtx);
+
+ ClockTimer cl("DnDetect::DnDetect");
+ std::vector<YoloObjInfo> objInfos;
+ if (!m_bInitThd) return objInfos;
+ double bttime = what_time_is_it_now();
image im = matToImg(img);
+// DBG("matToImg : "<<what_time_is_it_now()-bttime);
+// printf("matToImg %f seconds.\n", what_time_is_it_now()-bttime);
image sized = letterbox_image(im, m_net->w, m_net->h);
- layer l = m_net->layers[m_net->n-1];
+ layer l = m_net->layers[m_net->n - 1];
float *X = sized.data;
- //attime=what_time_is_it_now();
+ //attime=what_time_is_it_now();p->
network_predict(m_net, X);
//printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
int nboxes = 0;
- detection *dets = get_network_boxes(m_net, im.w, im.h, 0.5f, 0.1f, 0, 1, &nboxes);
- if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
- // draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
- std::vector<cv::Rect2f> rects;
- for(int i=0;i<nboxes;i++)
+
+ detection *dets;
+
{
+// std::lock_guard<std::mutex> dataGuard(dataMtx);
+// dataMtx.lock();
+ dets = get_network_boxes(m_net, im.w, im.h, m_thresh, m_hier_thresh, 0, 1, &nboxes);
+ if (nboxes > 100) {
+// dataMtx.unlock();
+ return objInfos;
+ }
+ if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
+// dataMtx.unlock();
+ }
+
+ // draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
+ for (int i = 0; i < nboxes; i++) {
+ YoloObjInfo objInfo;
std::vector<float> vec(80);
- memcpy(&vec[0],dets[i].prob,sizeof(float)*80);
+ memcpy(&vec[0], dets[i].prob, sizeof(float) * 80);
int type = -1;
- for(int j = 0; j < l.classes; ++j){
- if(j != 0){
+ for (int j = 0; j < l.classes; ++j) {
+//#todo new func in list out bool
+ if (j != 0) {
continue;
}
- if (dets[i].prob[j] > m_thresh){
+//#todo get score
+ if (dets[i].prob[j] > 0.0f) {
if (type < 0) {
type = j;
+ objInfo.prob = dets[i].prob[j];
} else {
}
- } else{
+ } else {
}
}
- if(type >= 0){
- if(type != 0){
- continue;
- }
- float left = (dets[i].bbox.x-dets[i].bbox.w/2.);
- float top = (dets[i].bbox.y-dets[i].bbox.h/2.);
- cv::Rect2f rect(left,top,dets[i].bbox.w,dets[i].bbox.h);
- std::cout<<"rect.x : "<<left<<" rect.y : "<<top<<" rect.w : "<<rect.width<<" rect.h : "<<rect.height<<std::endl;
- rects.push_back(rect);
+ if (type >= 0) {
+// if(type != 0){
+// continue;
+// }
+ objInfo.type = type;
+ objInfo.rcObj.left = (dets[i].bbox.x - dets[i].bbox.w / 2.);
+ objInfo.rcObj.top = (dets[i].bbox.y - dets[i].bbox.h / 2.);
+ objInfo.rcObj.right = (dets[i].bbox.x + dets[i].bbox.w / 2.);
+ objInfo.rcObj.bottom = (dets[i].bbox.y + dets[i].bbox.h / 2.);
+ objInfos.push_back(objInfo);
}
-
-
}
free_detections(dets, nboxes);
// show_image(im, "Video");
// cv::waitKey(10);
free_image(im);
free_image(sized);
- printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
- return rects;
+ //printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
+ return objInfos;
}
-image DnDetect::matToImg(cv::Mat& RefImg) {
+image DnDetect::DnDetect::matToImg(cv::Mat &RefImg) {
CV_Assert(RefImg.depth() == CV_8U);
int h = RefImg.rows;
@@ -92,23 +94,28 @@
int channels = RefImg.channels();
image im = make_image(w, h, 3);
int count = 0;
- switch(channels){
- case 1:{
+ switch (channels) {
+ case 1: {
cv::MatIterator_<unsigned char> it, end;
- for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it){
- im.data[count] = im.data[w*h + count] = im.data[w*h*2 + count] = (float)(*it)/255.0;
-
+ for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it) {
+ im.data[count] = im.data[w * h + count] = im.data[w * h * 2 + count] = (float) (*it) / 255.0;
++count;
}
break;
}
- case 3:{
- cv::MatIterator_<cv::Vec3b> it, end;
- for (it = RefImg.begin<cv::Vec3b>(), end = RefImg.end<cv::Vec3b>(); it != end; ++it){
- im.data[count] = (float)(*it)[2]/255.0;
- im.data[w*h + count] = (float)(*it)[1]/255.0;
- im.data[w*h*2 + count] = (float)(*it)[0]/255.0;
- ++count;
+ case 3: {
+ float *desData = im.data;
+ uchar *srcData = RefImg.data;
+
+ int size = w * h;
+ int size2 = size * 2;
+ for (int i = 0; i < size; i++) {
+ *(desData) = *(srcData + 2) / 255.0f;
+ *(desData + size) = *(srcData + 1) / 255.0f;
+ *(desData + size2) = *(srcData) / 255.0f;
+
+ desData++;
+ srcData += 3;
}
break;
}
@@ -119,3 +126,28 @@
}
return im;
}
+
+int DnDetect::DnDetect::init(void *arg) {
+ DnDetect *p = (DnDetect *) arg;
+
+ p->m_thresh = appPref.getFloatData("thresh.detect");
+ cuda_set_device(appPref.getIntData("gpu.index"));
+
+ char *datacfg = "cfg/coco.data";
+ char *cfgfile = "cfg/yolov3.cfg";
+ char *weightfile = "./yolov3.weights";
+
+ double loadtime = what_time_is_it_now();
+ list *options = read_data_cfg(datacfg);
+ char *name_list = option_find_str(options, "names", "data/names.list");
+ p->names = get_labels(name_list);
+
+ p->alphabet = load_alphabet();
+ p->m_net = load_network(cfgfile, weightfile, 0);
+ set_batch_network(p->m_net, 1);
+ printf("load mod use %f seconds.\n", what_time_is_it_now() - loadtime);
+
+ srand(2222222);
+ p->m_bInitThd = true;
+ return 0;
+}
diff --git a/QiaoJiaSystem/YoloServer/DnDetect.h b/QiaoJiaSystem/YoloServer/DnDetect.h
index 3718aed..fc1a37c 100644
--- a/QiaoJiaSystem/YoloServer/DnDetect.h
+++ b/QiaoJiaSystem/YoloServer/DnDetect.h
@@ -1,26 +1,83 @@
#ifndef DNDETECT_H
#define DNDETECT_H
#define GPU
+
#include <darknet.h>
#include <opencv2/opencv.hpp>
-class DnDetect
-{
-public:
- DnDetect(const int gpuIndex);
- virtual ~DnDetect();
+#include <thread>
- std::vector<cv::Rect2f> detect(cv::Mat&);
-private:
- image matToImg(cv::Mat& RefImg);
+namespace DnDetect {
-private:
- network *m_net;
- float m_thresh;
- float m_hier_thresh;
- float m_nms;
- char **names;
+ class ClockTimer {
+ public:
+ ClockTimer(const std::string &flag, int nMscTimeout = 0) {
+ timeval time;
+ gettimeofday(&time, nullptr);
+ m_start = time.tv_sec * 1000000 + time.tv_usec;
+ m_flag = flag;
+ m_nMscTimeout = nMscTimeout;
+ }
- image **alphabet;
-};
+ ~ClockTimer() {
+ timeval time1;
+ gettimeofday(&time1, nullptr);
+ double end = time1.tv_sec * 1000000 + time1.tv_usec;
+ int n = (end - m_start) / 1000;
+ if (0 >= m_nMscTimeout) {
+// std::cout << m_flag << ">> Time elapsed: " << n << "ms" << std::endl;
+ INFO(m_flag << ">> Time elapsed: " << n << "ms");
+ } else if (n >= m_nMscTimeout) {
+// std::cout << m_flag << ">> Time out: " << n << "ms" << std::endl;
+ INFO(m_flag << ">> Time out: " << n << "ms");
+ }
+ }
+
+ private:
+ double m_start;
+ std::string m_flag;
+ int m_nMscTimeout;
+ };
+
+ struct Rect {
+ float left;
+ float top;
+ float right;
+ float bottom;
+ };
+
+ struct YoloObjInfo {
+ int type;
+ float prob;
+ Rect rcObj;
+ };
+
+ class DnDetect {
+ public:
+ DnDetect(const int gpuIndex);
+
+ virtual ~DnDetect();
+
+ std::vector<YoloObjInfo> detect(cv::Mat &);
+
+ private:
+ image matToImg(cv::Mat &RefImg);
+
+ static int init(void *arg);
+
+ private:
+ network *m_net;
+ float m_thresh;
+ float m_hier_thresh;
+ float m_nms;
+ char **names;
+ image **alphabet;
+
+ std::mutex dataMtx;
+
+ bool m_bInitThd;
+ std::thread m_thdInit;
+ };
+}
+
#endif
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
index 0084b09..528bc12 100644
--- a/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.cpp
@@ -1,30 +1,43 @@
#include "ImageDrawElement.h"
+#include <basic/util/opencv/CvUtil.h>
+ImageDrawElement::ImageDrawElement() {
-ImageDrawElement::ImageDrawElement()
-{
}
-void ImageDrawElement::setRects(const std::vector<cv::Rect2f> &value)
-{
- rectsMtx.lock();
- rectsBuffer = value;
- rectsUpdated = true;
- rectsMtx.unlock();
+void ImageDrawElement::darwProperty(cv::Mat &image, string key, string value, int x, int y) {
+ cv::putText(image, key + ": " + value, cv::Point(x, y), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1.5,
+ cv::Scalar(255, 255, 0), 2);
}
-void ImageDrawElement::processImage(cv::Mat &image)
-{
- if(rectsUpdated){
- rectsMtx.lock();
- rects = rectsBuffer;
- rectsUpdated = false;
- rectsMtx.unlock();
+void ImageDrawElement::processImage(cv::Mat &image) {
+// auto faceData = faces.getData();
+ auto yoloObjectsData = yoloObjects.getData();
+
+// for (auto face: faceData) {
+// auto rect = CvUtil::zoomRect(face.rect, 1.2, 1.2);
+// cv::rectangle(image, rect, face.id >= 0 ? cv::Scalar(0, 255, 0) : cv::Scalar(0, 255, 255), 2);
+// int i = 0;
+// for (auto &property:face.properties) {
+// darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+// }
+// }
+
+// DBG("yoloObjectsData size is " << yoloObjectsData.size());
+ for (auto yoloObj: yoloObjectsData) {
+ auto rect = CvUtil::zoomRect(yoloObj.rect, 1, 1);
+ cv::rectangle(image, rect, yoloObj.id >= 0 ? cv::Scalar(255, 0, 0) : cv::Scalar(0, 255, 255), 2);
+ int i = 0;
+ for (auto &property:yoloObj.properties) {
+ darwProperty(image, property.first, property.second, rect.x + rect.width, rect.y + 40 * i++);
+ }
}
- for(size_t i = 0;i<rects.size();i++){
- cv::Rect2f& rectf = rects[i];
- cv::Rect rect(rectf.x*image.cols,rectf.y*image.rows,rectf.width*image.cols,rectf.height*image.rows);
- cv::rectangle(image, rect,cv::Scalar(0,0,255),4);
- }
- fireConnectors();
+}
+
+//void ImageDrawElement::setFaces(std::vector<ScoredRect> value) {
+// faces = value;
+//}
+
+void ImageDrawElement::setYoloObjects(std::vector<ScoredRect> value) {
+ yoloObjects = value;
}
diff --git a/QiaoJiaSystem/YoloServer/ImageDrawElement.h b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
index 03fd9df..21d6012 100644
--- a/QiaoJiaSystem/YoloServer/ImageDrawElement.h
+++ b/QiaoJiaSystem/YoloServer/ImageDrawElement.h
@@ -1,20 +1,30 @@
#ifndef IMAGEDRAWELEMENT_H
#define IMAGEDRAWELEMENT_H
-#include <basic/pipe_element/ImageFactoryElement.h>
-#include <mutex>
-class ImageDrawElement : public ImageFactoryElement
-{
+#include <YoloServer.h>
+//#include <FaceServer.h>
+#include <basic/pipe_element/ImageFactoryElement.h>
+#include <basic/core/DoubleBufferedData.h>
+#include "TrackingTrigger.h"
+
+class ImageDrawElement : public ImageFactoryElement {
public:
ImageDrawElement();
- void setRects(const std::vector<cv::Rect2f> &value);
+
+ // ImageFactoryElement interface
+// void setFaces(std::vector<ScoredRect> value);
+
+ void setYoloObjects(std::vector<ScoredRect> value);
private:
- std::mutex rectsMtx;
- std::vector<cv::Rect2f> rects;
- std::vector<cv::Rect2f> rectsBuffer;
- bool rectsUpdated;
- virtual void processImage(cv::Mat& image);
+ virtual void processImage(cv::Mat &) override;
+
+ void darwProperty(cv::Mat &image, string key, string value, int x, int y);
+
+private:
+// DoubleBufferedData<std::vector<ScoredRect>> faces;
+ DoubleBufferedData<std::vector<ScoredRect>> yoloObjects;
};
+
#endif // IMAGEDRAWELEMENT_H
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
index 7d7804d..974c7cc 100644
--- a/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
+++ b/QiaoJiaSystem/YoloServer/YoloDetectClientTest.cpp
@@ -9,71 +9,95 @@
#include <basic/pipe/PipeController.h>
#include <basic/pipe_element/ffmpeg/VideoCaptureElement.h>
#include "ImageDrawElement.h"
-#include "YoloRpcElement.h"
-class Controllor : public PipeController
-{
+#include <YoloRpcElement.h>
+#include <basic/util/app/AppPreference.hpp>
+
+class Controllor : public PipeController {
public:
- Controllor(const int index,const std::string& rtsp):m_videoCaptureElement(rtsp,25,1000,0),
- m_YoloRpcElement(std::to_string(index)+"YoloRpc")
- {
+ Controllor(const int index, const std::string &rtsp) : m_videoCaptureElement(rtsp, 25, 1000, 0),
+ m_YoloRpcElement(std::to_string(index) + "YoloRpc") {
+ m_index = index;
m_rtsp = rtsp;
- m_videoCaptureElement.registerConnector([&]{
- if(!m_YoloRpcElement.isBusy()){
+ m_videoCaptureElement.registerConnector([&] {
+ if (!m_YoloRpcElement.isBusy()) {
m_YoloRpcElement.setImage(m_videoCaptureElement.getImage());
- // paElement.setImage(videoCaptureElement.getImage());
- // paNumElement.setImage(videoCaptureElement.getImage());
+ // paElement.setImage(videoCaptureElement.getImage());
+ // paNumElement.setImage(videoCaptureElement.getImage());
m_YoloRpcElement.submit();
}
- if(!m_imageDrawElement.isBusy()){
+ if (!m_imageDrawElement.isBusy()) {
m_imageDrawElement.setImage(m_videoCaptureElement.getImage());
m_imageDrawElement.submit();
}
});
- m_YoloRpcElement.registerConnector([&]{
- m_imageDrawElement.setRects(m_YoloRpcElement.getRects());
+ m_YoloRpcElement.registerConnector([&] {
+ m_imageDrawElement.setYoloObjects(m_YoloRpcElement.getLastScoreRects());
});
- m_imageDrawElement.registerConnector([&]{
- ImageShowElement::showImage(m_rtsp,*m_imageDrawElement.getImage());
+ m_imageDrawElement.registerConnector([&] {
+// ImageShowElement::showImage(std::to_string(m_index), *m_imageDrawElement.getImage());
});
- m_videoCaptureElement.setOutPutInterval(2);
+ m_videoCaptureElement.setOutPutInterval(3);
registerElement(m_videoCaptureElement);
registerElement(m_YoloRpcElement);
registerElement(m_imageDrawElement);
}
- virtual ~Controllor()
- {}
+
+ virtual ~Controllor() {}
private:
std::string m_rtsp;
ffmpeg::VideoCaptureElement m_videoCaptureElement;
YoloRpcElement m_YoloRpcElement;
ImageDrawElement m_imageDrawElement;
+ int m_index;
};
//using namespace std;
-int main(int argc, char *argv[])
-{
+int main(int argc, char *argv[]) {
SAVE_APP_ARGS
- Controllor _Controllor(0,"/home/basic/video/201804/day0416/01010002606000000-slice1.mp4");
- _Controllor.start();
- Controllor _Controllor0(1,"/home/basic/video/201804/day0416/01010002606000000-slice2.mp4");
- _Controllor0.start();
- cout << "Hello World!" << endl;
- Controllor _Controllor1(2,"/home/basic/video/201804/day0416/01010002609000000-slice.mp4");
- _Controllor1.start();
- Controllor _Controllor2(3,"/home/basic/video/201804/day0416/01010002611000000-slice.mp4");
- _Controllor2.start();
- Controllor _Controllor3(4,"/home/basic/video/201804/night0418/02000000652000100-slice.mp4");
- _Controllor3.start();
- Controllor _Controllor4(5,"/home/basic/video/201804/night0418/02000000654000100-slice.mp4");
- _Controllor4.start();
- Controllor _Controllor5(6,"/home/basic/video/201804/night0418/02000000659000100-slice.mp4");
- _Controllor5.start();
- while(true)
- {sleep(1);}
+ int num = atoi(argv[1]);
+ std::string path(argv[2]);
+ int portNum = atoi(argv[3]);
+ //yolo server
+ appPref.setStringData("yolo.proxy", "yoloServer");
+ //#todo
+ appPref.setStringData("yolo.ip", "");
+ appPref.setIntData("yolo.port", portNum);
+// rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"), appPref.getLongData("yolo.port"),"tcp"),
+
+ for (int i = 0; i < num; i++) {
+ Controllor *_Controllor = new Controllor(i, path);
+ _Controllor->start();
+ }
+
+// Controllor _Controllor(0, "/home/bsk/2.mp4");
+// _Controllor.start();
+// Controllor _Controllor1(1, "/home/bsk/2.mp4");
+// _Controllor1.start();
+// Controllor _Controllor2(2, "/home/bsk/2.mp4");
+// _Controllor2.start();
+// Controllor _Controllor3(3, "/home/bsk/2.mp4");
+// _Controllor3.start();
+// Controllor _Controllor4(4, "/home/bsk/2.mp4");
+// _Controllor4.start();
+
+// Controllor _Controllor0(1,"/home/basic/video/201804/day0416/01010002606000000-slice2.mp4");
+// _Controllor0.start();
+// cout << "Hello World!" << endl;
+// Controllor _Controllor1(2,"/home/basic/video/201804/day0416/01010002609000000-slice.mp4");
+// _Controllor1.start();
+// Controllor _Controllor2(3,"/home/basic/video/201804/day0416/01010002611000000-slice.mp4");
+// _Controllor2.start();
+// Controllor _Controllor3(4,"/home/basic/video/201804/night0418/02000000652000100-slice.mp4");
+// _Controllor3.start();
+// Controllor _Controllor4(5,"/home/basic/video/201804/night0418/02000000654000100-slice.mp4");
+// _Controllor4.start();
+// Controllor _Controllor5(6,"/home/basic/video/201804/night0418/02000000659000100-slice.mp4");
+// _Controllor5.start();
+ while (true) { sleep(10); }
return 0;
}
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
index cb0e612..02ef93f 100644
--- a/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.cpp
@@ -14,67 +14,53 @@
::YoloDetect::ObjInfos
YoloDetectServerI::YoloDetect(::Ice::Int w, ::Ice::Int h, const ::std::string &shM, const ::Ice::Current &) {
- ClockTimer ct("YoloDetectServerI::YoloDetect");
+ DnDetect::ClockTimer ct("YoloDetectServerI::YoloDetect");
+
+ std::thread::id key = std::this_thread::get_id();
+ DBG("key is " << key);
+ DnDetect::DnDetect *t_dnDetect = nullptr;
+ for (auto &item : map_dnDetRes) {
+ //鏄惁鍙戠幇pid
+ bool find_pid = false;
+
+ auto &pid_map = item.second.map_pid;
+ for (auto &pid_item : pid_map) {
+ if (pid_item.second == key) {
+// 鍙戠幇pid锛岃幏鍙栬祫婧愬彞鏌�
+ find_pid = true;
+ break;
+ }
+ }
+ int map_pid_size = item.second.map_pid.size();
+ if (!find_pid && map_pid_size < item.second.i) {
+ //娌″彂鐜板彞鏌勶紝骞朵笖map瀹归噺瓒冲鏀惧叆鏂扮殑pid
+ map_pid_size++;
+ //#todo lock ?
+ item.second.map_pid[map_pid_size] = key;
+ find_pid = true;
+ }
+ //鍙戠幇浜唒id閫�鍑哄惊鐜�
+ if (find_pid) {
+ t_dnDetect = item.second.dnDetect;
+ break;
+ }
+ }
+
::YoloDetect::ObjInfos objInfos;
- if (!m_bInitThd) return objInfos;
+ if (!m_bInitThd || t_dnDetect == nullptr) {
+ ERR("error ");
+ return objInfos;
+ }
QSharedMemory shareMemory(QString(shM.c_str()));
if (shareMemory.attach()) {
int channel = 3;
cv::Mat _mat = bufferToMat(w, h, channel, shareMemory.constData());
-
-// double bttime=what_time_is_it_now();
- image im = matToImg(_mat);
-// DBG("matToImg : "<<what_time_is_it_now()-bttime);
-// printf("matToImg %f seconds.\n", what_time_is_it_now()-bttime);
- image sized = letterbox_image(im, m_net->w, m_net->h);
- layer l = m_net->layers[m_net->n - 1];
-
- float *X = sized.data;
- //attime=what_time_is_it_now();p->
- network_predict(m_net, X);
- //printf("Predicted in %f seconds.\n", what_time_is_it_now()-attime);
- int nboxes = 0;
- detection *dets = get_network_boxes(m_net, im.w, im.h, m_thresh, m_hier_thresh, 0, 1, &nboxes);
- if (m_nms) do_nms_sort(dets, nboxes, l.classes, m_nms);
- // draw_detections(im, dets, nboxes, m_thresh, names, alphabet, l.classes);
- for (int i = 0; i < nboxes; i++) {
+ auto res = t_dnDetect->detect(_mat);
+ for (auto &item : res) {
::YoloDetect::ObjInfo objInfo;
- std::vector<float> vec(80);
- memcpy(&vec[0], dets[i].prob, sizeof(float) * 80);
- int type = -1;
- for (int j = 0; j < l.classes; ++j) {
-// if(j != 0){
-// continue;
-// }
- if (dets[i].prob[j] > 0.0f) {
- if (type < 0) {
- type = j;
- objInfo.prob = dets[i].prob[j];
- } else {
- }
- } else {
- }
- }
- if (type >= 0) {
-// if(type != 0){
-// continue;
-// }
- objInfo.type = type;
- objInfo.rcObj.left = (dets[i].bbox.x - dets[i].bbox.w / 2.);
- objInfo.rcObj.top = (dets[i].bbox.y - dets[i].bbox.h / 2.);
- objInfo.rcObj.right = (dets[i].bbox.x + dets[i].bbox.w / 2.);
- objInfo.rcObj.bottom = (dets[i].bbox.y + dets[i].bbox.h / 2.);
- objInfos.push_back(objInfo);
- }
-
-
+ memcpy(&objInfo, &item, sizeof(item));
+ objInfos.push_back(objInfo);
}
- free_detections(dets, nboxes);
- // show_image(im, "Video");
- // cv::waitKey(10);
- free_image(im);
- free_image(sized);
- //printf("all time use %f seconds.\n", what_time_is_it_now()-bttime);
}
return objInfos;
}
@@ -82,24 +68,15 @@
int YoloDetectServerI::init(void *arg) {
YoloDetectServerI *p = (YoloDetectServerI *) arg;
- p->m_thresh = appPref.getFloatData("thresh.detect");
- cuda_set_device(appPref.getIntData("gpu.index"));
+ for (int i = 0; i < 1; i++) {
+ DnDetectRes t_detectRes;
+// t_detectRes.dnDetect = new DnDetect::DnDetect(i % 2);
+ t_detectRes.dnDetect = new DnDetect::DnDetect(1);
+ int size = appPref.getIntData("poolNum");
+ t_detectRes.i = size > 0 ? size : 1;
+ p->map_dnDetRes[i] = t_detectRes;
- char *datacfg = "cfg/coco.data";
- char *cfgfile = "cfg/yolov3.cfg";
- char *weightfile = "./yolov3.weights";
-
- double loadtime = what_time_is_it_now();
- list *options = read_data_cfg(datacfg);
- char *name_list = option_find_str(options, "names", "data/names.list");
- p->names = get_labels(name_list);
-
- p->alphabet = load_alphabet();
- p->m_net = load_network(cfgfile, weightfile, 0);
- set_batch_network(p->m_net, 1);
- printf("load mod use %f seconds.\n", what_time_is_it_now() - loadtime);
-
- srand(2222222);
+ }
p->m_bInitThd = true;
return 0;
}
@@ -128,47 +105,6 @@
return mat;
}
-image YoloDetectServerI::matToImg(cv::Mat &RefImg) {
- CV_Assert(RefImg.depth() == CV_8U);
-
- int h = RefImg.rows;
- int w = RefImg.cols;
- int channels = RefImg.channels();
- image im = make_image(w, h, 3);
- int count = 0;
- switch (channels) {
- case 1: {
- cv::MatIterator_<unsigned char> it, end;
- for (it = RefImg.begin<unsigned char>(), end = RefImg.end<unsigned char>(); it != end; ++it) {
- im.data[count] = im.data[w * h + count] = im.data[w * h * 2 + count] = (float) (*it) / 255.0;
-
- ++count;
- }
- break;
- }
- case 3: {
- float *desData = im.data;
- uchar *srcData = RefImg.data;
-
- int size = w * h;
- int size2 = size * 2;
- for (int i = 0; i < size; i++) {
- *(desData) = *(srcData + 2) / 255.0f;
- *(desData + size) = *(srcData + 1) / 255.0f;
- *(desData + size2) = *(srcData) / 255.0f;
-
- desData++;
- srcData += 3;
- }
- break;
- }
-
- default:
- printf("Channel number not supported.\n");
- break;
- }
- return im;
-}
YoloDetect::stringData YoloDetectServerI::getCocoData(const Ice::Current &) {
YoloDetect::stringData retval;
diff --git a/QiaoJiaSystem/YoloServer/YoloDetectServerI.h b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
index ad18554..ed5203a 100644
--- a/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
+++ b/QiaoJiaSystem/YoloServer/YoloDetectServerI.h
@@ -1,20 +1,40 @@
#ifndef YOLODETECTSERVERI_H
#define YOLODETECTSERVERI_H
#define GPU
+
#include "YoloServer.h"
#include <thread>
#include <darknet.h>
#include <opencv2/opencv.hpp>
#include <basic/util/resource/ResourcesManager.h>
-class YoloDetectServerI : public YoloDetect::YoloDetectServer
-{
+
+#include "DnDetect.h"
+#include <atomic>
+
+struct DnDetectRes {
+public:
+ DnDetectRes() : i(3) {
+ }
+
+ DnDetect::DnDetect *dnDetect;
+// 搴忓彿鍙婄嚎绋媔d
+ std::unordered_map<int, std::thread::id> map_pid;
+// 鎺ュ彈鐨勭嚎绋嬩釜鏁�
+ int i;
+};
+
+class YoloDetectServerI : public YoloDetect::YoloDetectServer {
public:
YoloDetectServerI();
+
virtual ~YoloDetectServerI();
// FaceDetectServer interface
public:
- virtual ::YoloDetect::ObjInfos YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string&, const ::Ice::Current& = ::Ice::emptyCurrent)override;
+ virtual ::YoloDetect::ObjInfos
+ YoloDetect(::Ice::Int, ::Ice::Int, const ::std::string &, const ::Ice::Current & = ::Ice::emptyCurrent) override;
+
virtual YoloDetect::stringData getCocoData(const Ice::Current &) override;
+
private:
network *m_net;
float m_thresh;
@@ -25,13 +45,15 @@
bool m_bInitThd;
std::thread m_thdInit;
- // ResourcesManager<int> resourcesManager;
+ std::map<int, DnDetectRes> map_dnDetRes;
+
+ // ResourcesManager<int> resourcesManager;
private:
- static int init(void* arg);
- image matToImg(cv::Mat& RefImg);
- cv::Mat bufferToMat(const int w,const int h,const int channels,const void* buffer);
+ static int init(void *arg);
+
+ cv::Mat bufferToMat(const int w, const int h, const int channels, const void *buffer);
};
diff --git a/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp b/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp
new file mode 100644
index 0000000..cdecab1
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloRpcElement.cpp
@@ -0,0 +1,126 @@
+#include "YoloRpcElement.h"
+#include <basic/util/app/AppPreference.hpp>
+#include <QtCore/QSharedMemory>
+#include <QtCore/QString>
+#include <basic/timer_counter/Clocktimer.h>
+#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) :
+ rpcClient(appPref.getStringData("yolo.proxy"), appPref.getStringData("yolo.ip"),
+ appPref.getIntData("yolo.port"), "tcp"), fdfsClient(nullptr), sharedMemory(nullptr),
+ m_triggerElement(0, 50), trackingTrigger(nullptr) {
+ 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();
+ }
+ catch (std::exception &e) {
+ ERR(e.what())
+ }
+}
+
+YoloRpcElement::~YoloRpcElement() {
+ if (sharedMemory) {
+ delete sharedMemory;
+ }
+ if (trackingTrigger) {
+ delete trackingTrigger;
+ }
+}
+
+void YoloRpcElement::threadFunc() {
+ ClockTimer ct("YoloRpcElement::threadFunc");
+ triggerMats.clear();
+ try {
+ auto server = rpcClient.getServer();
+ if (!server) {
+ ERR("server is null");
+ return;
+ }
+ objs = server->YoloDetect(image.cols, image.rows, sharedMemory->key().toStdString());//TODO
+
+ DBG("objs size is " << objs.size());
+ if (objs.size() <= 0) {
+ m_triggerElement.setState(false);
+ m_triggerElement.triggerOnce(false);
+ trackingTrigger->triggerLine();
+ return;
+ } else {
+ m_triggerElement.setState(true);
+ }
+ string t_camIdex = getProperty("dev_id") + getProperty("ch_id");
+ float t_det_sc = 0.75;
+// appPref.getFloatData(t_camIdex + "yolo.det") == -1 ? 0.75 : appPref.getFloatData(t_camIdex + "yolo.det");
+
+ 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;
+ int y = obj.rcObj.top * image.rows;
+ 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)) {
+ 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);
+
+ }
+ }
+ trackingTrigger->triggerLine();
+ m_triggerElement.triggerOnce(false);
+ if (triggerMats.size() > 0)fireConnectors("YoloTrigger");
+ 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();
+}
diff --git a/QiaoJiaSystem/YoloServer/YoloRpcElement.h b/QiaoJiaSystem/YoloServer/YoloRpcElement.h
new file mode 100644
index 0000000..e31e3fa
--- /dev/null
+++ b/QiaoJiaSystem/YoloServer/YoloRpcElement.h
@@ -0,0 +1,52 @@
+#ifndef YOLORPCELEMENT_H
+#define YOLORPCELEMENT_H
+
+#include <YoloServer.h>
+#include <basic/pipe/PipeElement.h>
+#include <basic/rpc/IceRpc.hpp>
+#include <opencv2/opencv.hpp>
+#include <basic/util/fastdfs/FastFds.hpp>
+#include <TriggerElement.h>
+#include "TrackingTrigger.h"
+
+class QSharedMemory;
+
+class YoloRpcElement : public basic::PipeElement {
+public:
+ YoloRpcElement(string);
+
+ ~YoloRpcElement();
+
+ void setImage(const cv::Mat &value);
+
+ ::YoloDetect::ObjInfos getObjects() const;
+
+ std::vector<cv::Mat> getTriggerMats();
+
+ std::vector<ScoredRect> getLastScoreRects() const;
+
+ void setFdfs(FastFdsWithLock *p_fdfsClient) {
+ fdfsClient = p_fdfsClient;
+ }
+
+ bool getTriggerState() const;
+
+ bool getTrigger() const;
+
+private:
+ virtual void threadFunc() override;
+
+private:
+ IceRpcClient<YoloDetect::YoloDetectServerPrx> rpcClient;
+ cv::Mat image;
+ QSharedMemory *sharedMemory;
+ ::YoloDetect::ObjInfos objs;
+ TrackingTrigger *trackingTrigger;
+ std::vector<cv::Mat> triggerMats;
+ ::YoloDetect::stringData cocoData;
+ FastFdsWithLock *fdfsClient;
+
+ TriggerElement m_triggerElement;
+};
+
+#endif // YOLORPCELEMENT_H
diff --git a/QiaoJiaSystem/YoloServer/main.cpp b/QiaoJiaSystem/YoloServer/main.cpp
index e223edd..438ff3e 100644
--- a/QiaoJiaSystem/YoloServer/main.cpp
+++ b/QiaoJiaSystem/YoloServer/main.cpp
@@ -23,13 +23,24 @@
// adapter->add(new YoloDetectServerI(), Ice::stringToIdentity(identity));
// adapter->activate();
// ich->waitForShutdown();
- appPref.setIntData("gpu.index", 0);
- appPref.setFloatData("thresh.detect", 0.7);
- IceRpcServer<YoloDetectServerI> server("yoloServer", 10003, "tcp");
+ if (argc < 3) {
+ ERR("argc error");
+ return -1;
+ }
+
+ int gpuindex = atoi(argv[1]);
+ int poolNum = atoi(argv[2]);
+ int portNum = atoi(argv[3]);
+
+ appPref.setIntData("gpu.index", gpuindex);
+ appPref.setFloatData("thresh.detect", 0.7);
+ appPref.setIntData("poolNum", poolNum);
+
+ IceRpcServer<YoloDetectServerI> server("yoloServer", portNum, "tcp");
server.setMessageSizeMax(1024 * 1024 * 50);
- server.setPoolInitSize(5);
- server.setPoolMaxSize(5);
+ server.setPoolInitSize(poolNum);
+ server.setPoolMaxSize(poolNum);
server.runWaitShutDown();
return 0;
}
--
Gitblit v1.8.0