Commit e57d1d04225a175330f962aaed29cdb0f1eb7ecd

Authored by Hu Chunming
1 parent d9483d64

代码优化

vehicle_structure_platform.git0708-3080-trt-face/src/VPT/MutliSourceVideoProcess.cpp
@@ -13,15 +13,8 @@ @@ -13,15 +13,8 @@
13 13
14 #include "../FFNvDecoder/logger.hpp" 14 #include "../FFNvDecoder/logger.hpp"
15 15
16 -#include "face_detect.h"  
17 #include "CropImg.h" 16 #include "CropImg.h"
18 -//#include <strsafe.h>  
19 -//#include <shlwapi.h>  
20 -//#include <DbgHelp.h>  
21 -//#pragma comment(lib, "DbgHelp.Lib")  
22 -//#pragma comment(lib, "ShLwApi.lib")  
23 -//********************************************************//  
24 -//1.Ϊʲô��ʱ�򷵻ص�index=2��ȴδ�����ﳵ�ķ�������Ϊindex�ں�����Ϊ��2�����Ǵ�ʱ�Ŀ��ղ�������֮ǰ�Ŀ��գ����Կ���δ���£�����ͼ���С����Ϊ112*224 17 +
25 18
26 // #define AUTHORIZATION 19 // #define AUTHORIZATION
27 //#define DQ_AUTHORIZATION 20 //#define DQ_AUTHORIZATION
@@ -46,83 +39,11 @@ @@ -46,83 +39,11 @@
46 #endif 39 #endif
47 #endif 40 #endif
48 41
49 -//#define LOG_INFO //�Ƿ������ٴ�ӡ  
50 -// #define SKIP_FRMAE 5 //��֡֡��  
51 -#define EXTIME 500  
52 42
53 #define AUTH_LICENSE "sy_va_sub_sdk_2023" 43 #define AUTH_LICENSE "sy_va_sub_sdk_2023"
54 44
55 static int TaskID = 0; 45 static int TaskID = 0;
56 46
57 -auto show_gpu_syimage_ = [](sy_img& cur_frame) {  
58 -  
59 - unsigned char* cpu_data = new unsigned char[3 * cur_frame.w_ * cur_frame.h_];  
60 - cudaMemcpy(cpu_data, cur_frame.data_, 3 * cur_frame.w_ * cur_frame.h_ * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
61 - cv::Mat img(cur_frame.h_, cur_frame.w_, CV_8UC3, cpu_data);  
62 -  
63 - cv::imshow("img", img);  
64 - cv::waitKey(0);  
65 - delete[] cpu_data;  
66 -};  
67 -  
68 -auto show_gpu_image_ = [](DxGPUFrame& cur_frame) {  
69 -  
70 - unsigned char* cpu_data = new unsigned char[3 * cur_frame.width * cur_frame.height];  
71 - cudaMemcpy(cpu_data, cur_frame.frame, 3 * cur_frame.width * cur_frame.height * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
72 - cv::Mat img(cur_frame.height, cur_frame.width, CV_8UC3, cpu_data);  
73 -  
74 - cv::imshow("img2", img);  
75 - cv::waitKey(0);  
76 - delete[] cpu_data;  
77 -};  
78 -  
79 -auto show_gpu_image_withrect_ = [](DxGPUFrame& cur_frame, sy_rect &rect) {  
80 -  
81 - unsigned char* cpu_data = new unsigned char[3 * cur_frame.width * cur_frame.height];  
82 - cudaMemcpy(cpu_data, cur_frame.frame, 3 * cur_frame.width * cur_frame.height * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
83 - cv::Mat img(cur_frame.height, cur_frame.width, CV_8UC3, cpu_data);  
84 - cv::rectangle(img, cv::Rect(rect.left_, rect.top_, rect.width_, rect.height_), cv::Scalar(25, 25, 250), 2, 8, 0);  
85 - cv::imshow("ori", img);  
86 - cv::waitKey(0);  
87 - delete[] cpu_data;  
88 -};  
89 -  
90 -auto show_gpu_image_withfdinfo_ = [](DxGPUFrame& cur_frame, fd_info &face_info) {  
91 -  
92 - unsigned char* cpu_data = new unsigned char[3 * cur_frame.width * cur_frame.height];  
93 - cudaMemcpy(cpu_data, cur_frame.frame, 3 * cur_frame.width * cur_frame.height * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
94 - cv::Mat img(cur_frame.height, cur_frame.width, CV_8UC3, cpu_data);  
95 -  
96 - printf("%d %d\n", cur_frame.width , cur_frame.height);  
97 - for (int ii = 0; ii < 25; ii++)  
98 - {  
99 - printf("(%d %d) ", face_info.facial_fea_point[ii].x_, face_info.facial_fea_point[ii].y_);  
100 - cv::circle(img, cv::Point(face_info.facial_fea_point[ii].x_, face_info.facial_fea_point[ii].y_), 1, cv::Scalar(0, 255, 0));  
101 -  
102 - }  
103 - //cv::rectangle(img, cv::Rect(face_info.face_position.left_, face_info.face_position.top_, face_info.face_position.width_, face_info.face_position.height_), cv::Scalar(25, 25, 250), 2, 8, 0);  
104 -  
105 - cv::Mat big_img;  
106 - cv::resize(img, big_img, cv::Size(400, 400));  
107 -  
108 -  
109 - cv::imshow("ori33", img);  
110 - cv::imshow("ori44", big_img);  
111 - cv::waitKey(0);  
112 - delete[] cpu_data;  
113 -};  
114 -  
115 -auto show_gpu_image_with2rect_ = [](DxGPUFrame& cur_frame, sy_rect &rect, sy_rect &rect2) {  
116 -  
117 - unsigned char* cpu_data = new unsigned char[3 * cur_frame.width * cur_frame.height];  
118 - cudaMemcpy(cpu_data, cur_frame.frame, 3 * cur_frame.width * cur_frame.height * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
119 - cv::Mat img(cur_frame.height, cur_frame.width, CV_8UC3, cpu_data);  
120 - cv::rectangle(img, cv::Rect(rect.left_, rect.top_, rect.width_, rect.height_), cv::Scalar(25, 25, 250), 1, 8, 0);  
121 - cv::rectangle(img, cv::Rect(rect2.left_, rect2.top_, rect2.width_, rect2.height_), cv::Scalar(25, 250, 25), 1, 8, 0);  
122 - cv::imshow("ori2", img);  
123 - cv::waitKey(0);  
124 - delete[] cpu_data;  
125 -};  
126 47
127 static long long get_cur_time_ms(){ 48 static long long get_cur_time_ms(){
128 chrono::time_point<chrono::system_clock, chrono::milliseconds> tpMicro 49 chrono::time_point<chrono::system_clock, chrono::milliseconds> tpMicro
@@ -131,7 +52,6 @@ static long long get_cur_time_ms(){ @@ -131,7 +52,6 @@ static long long get_cur_time_ms(){
131 return tpMicro.time_since_epoch().count(); 52 return tpMicro.time_since_epoch().count();
132 } 53 }
133 54
134 -std::function<void(DxGPUFrame&)> show_gpu_img_func = show_gpu_image_;  
135 55
136 void check_thread(void* handle); 56 void check_thread(void* handle);
137 57
@@ -168,8 +88,7 @@ int CMutliSourceVideoProcess::FinishProcessThread() @@ -168,8 +88,7 @@ int CMutliSourceVideoProcess::FinishProcessThread()
168 m_bProcessExit = true; 88 m_bProcessExit = true;
169 ProcessThread.join(); //waiting thread finish 89 ProcessThread.join(); //waiting thread finish
170 90
171 - VPT_Release(VPT_Handle);  
172 - 91 + m_vptProcess.release();
173 m_snaphot_helper.snapshot_helper_release(); 92 m_snaphot_helper.snapshot_helper_release();
174 93
175 return 1; 94 return 1;
@@ -248,19 +167,8 @@ int CMutliSourceVideoProcess::InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_IN @@ -248,19 +167,8 @@ int CMutliSourceVideoProcess::InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_IN
248 skip_frame_ = vptParam.skip_frame; 167 skip_frame_ = vptParam.skip_frame;
249 } 168 }
250 169
251 - VPTProcess_PARAM param{};  
252 - //param.c = 3;  
253 - param.mode = DEVICE_GPU;  
254 - param.gpuid = vptParam.gpuid;  
255 - //param.threshold = 0.6;  
256 - param.threshold = 0.5;  
257 - param.engine = ENGINE_TENSORRT;  
258 - param.max_batch = section_batch_size;  
259 - param.serialize_file = "./serialize_file/VPT";  
260 - param.auth_license = vptParam.auth_license;  
261 mgpuid = vptParam.gpuid; 170 mgpuid = vptParam.gpuid;
262 - VPT_Handle = NULL;  
263 - ret = VPT_Init(VPT_Handle, param); 171 + ret = m_vptProcess.init(mgpuid, section_batch_size);
264 if (0 != ret) 172 if (0 != ret)
265 return ret; 173 return ret;
266 174
@@ -364,7 +272,7 @@ void CMutliSourceVideoProcess::FinishTask(const int taskID) @@ -364,7 +272,7 @@ void CMutliSourceVideoProcess::FinishTask(const int taskID)
364 272
365 tasks[i].frameImage.release(); 273 tasks[i].frameImage.release();
366 274
367 - FinishTaskTracker(VPT_Handle, taskID); 275 + m_vptProcess.FinishTaskTracker(taskID);
368 276
369 if (viewTaskID == taskID) viewTaskID = -1; 277 if (viewTaskID == taskID) viewTaskID = -1;
370 278
@@ -382,7 +290,7 @@ void CMutliSourceVideoProcess::PauseTask(const int taskID) @@ -382,7 +290,7 @@ void CMutliSourceVideoProcess::PauseTask(const int taskID)
382 { 290 {
383 if (tasks[i].taskState == PLAY) TaskinPlay--; 291 if (tasks[i].taskState == PLAY) TaskinPlay--;
384 tasks[i].taskState = PAUSE; 292 tasks[i].taskState = PAUSE;
385 - PauseTaskTracker(VPT_Handle, taskID); 293 + m_vptProcess.PauseTaskTracker(taskID);
386 tasks[i].taskTcuvid->PauseDecoder(); 294 tasks[i].taskTcuvid->PauseDecoder();
387 if (viewTaskID == taskID) viewTaskID = -1; 295 if (viewTaskID == taskID) viewTaskID = -1;
388 printf("-----------------------pasue task: %d-----------------------\n", taskID); 296 printf("-----------------------pasue task: %d-----------------------\n", taskID);
@@ -399,7 +307,7 @@ void CMutliSourceVideoProcess::RestartTask(const int taskID) @@ -399,7 +307,7 @@ void CMutliSourceVideoProcess::RestartTask(const int taskID)
399 { 307 {
400 tasks[i].taskState = PLAY; 308 tasks[i].taskState = PLAY;
401 TaskinPlay++; 309 TaskinPlay++;
402 - RestartTaskTraker(VPT_Handle, taskID); 310 + m_vptProcess.RestartTaskTraker(taskID);
403 tasks[i].taskTcuvid->ResumeDecoder(); 311 tasks[i].taskTcuvid->ResumeDecoder();
404 printf("-----------------------restart task: %d-----------------------\n", taskID); 312 printf("-----------------------restart task: %d-----------------------\n", taskID);
405 break; 313 break;
@@ -559,7 +467,7 @@ bool CMutliSourceVideoProcess::AddTask(task_param tparam) //debug by zsh @@ -559,7 +467,7 @@ bool CMutliSourceVideoProcess::AddTask(task_param tparam) //debug by zsh
559 TaskinPlay++; 467 TaskinPlay++;
560 tasks.push_back(new_task); 468 tasks.push_back(new_task);
561 469
562 - AddTaskTracker(VPT_Handle, new_task.taskID, width, height); 470 + m_vptProcess.AddTaskTracker(new_task.taskID, width, height);
563 471
564 AddTaskSucFlag = 1; 472 AddTaskSucFlag = 1;
565 473
@@ -850,7 +758,7 @@ void CMutliSourceVideoProcess::algorthim_process() @@ -850,7 +758,7 @@ void CMutliSourceVideoProcess::algorthim_process()
850 { 758 {
851 tasks[i].taskState = DECODEERROR; 759 tasks[i].taskState = DECODEERROR;
852 curPlayTaskCount--; 760 curPlayTaskCount--;
853 - FinishTaskTracker(VPT_Handle, tasks[i].taskID); 761 + m_vptProcess.FinishTaskTracker(tasks[i].taskID);
854 } 762 }
855 } 763 }
856 764
@@ -923,7 +831,7 @@ void CMutliSourceVideoProcess::algorthim_process() @@ -923,7 +831,7 @@ void CMutliSourceVideoProcess::algorthim_process()
923 831
924 vector<vector<int>> tempDeleteObjectID; 832 vector<vector<int>> tempDeleteObjectID;
925 tempDeleteObjectID.resize(batchsize); 833 tempDeleteObjectID.resize(batchsize);
926 - int flag = VPT_Process_GPU(GetVPT_Handle(), batch_img, startbatch, batchsize, vec_frameIndex, VPTResult, tempDeleteObjectID, unUsedResult); 834 + int flag = m_vptProcess.process(batch_img, startbatch, batchsize, vec_frameIndex, VPTResult, tempDeleteObjectID, unUsedResult);
927 process_times++ ; 835 process_times++ ;
928 836
929 for (auto iter : tempDeleteObjectID) 837 for (auto iter : tempDeleteObjectID)
@@ -1076,7 +984,7 @@ void CMutliSourceVideoProcess::algorthim_process() @@ -1076,7 +984,7 @@ void CMutliSourceVideoProcess::algorthim_process()
1076 //实时查看 绘制目标轨迹 回调函数返回 984 //实时查看 绘制目标轨迹 回调函数返回
1077 if (view) 985 if (view)
1078 { 986 {
1079 - DrawTracker(VPT_Handle, *iter, &task.frameImage); 987 + m_vptProcess.DrawTracker(*iter, &task.frameImage);
1080 if (task.taskRealTimeCallbackFunc != nullptr) 988 if (task.taskRealTimeCallbackFunc != nullptr)
1081 task.taskRealTimeCallbackFunc(task.frameImage.data, task.frameImage.rows, task.frameImage.cols); 989 task.taskRealTimeCallbackFunc(task.frameImage.data, task.frameImage.rows, task.frameImage.cols);
1082 } 990 }
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/MutliSourceVideoProcess.h
@@ -20,7 +20,6 @@ @@ -20,7 +20,6 @@
20 #include "snapshot_helper.h" 20 #include "snapshot_helper.h"
21 21
22 #include <atomic> 22 #include <atomic>
23 -//#include "DxLogInterface.h"  
24 23
25 #ifdef _MSC_VER 24 #ifdef _MSC_VER
26 #ifdef _DEBUG 25 #ifdef _DEBUG
@@ -60,9 +59,6 @@ using namespace std; @@ -60,9 +59,6 @@ using namespace std;
60 #define MAXLENGTH 416 59 #define MAXLENGTH 416
61 #define MINLENGTH 224 60 #define MINLENGTH 224
62 61
63 -//#define PROCESSHEIGHT 224  
64 -//#define PROCESSWIDTH 416  
65 -//#define DATASIZE PROCESSWIDTH * PROCESSHEIGHT * 3  
66 #define THREAD_COUNT 30 62 #define THREAD_COUNT 30
67 #define SNAPSHOTFRAME 15 63 #define SNAPSHOTFRAME 15
68 #define LOSTMAXFRAMECCOUNT 4 64 #define LOSTMAXFRAMECCOUNT 4
@@ -113,7 +109,7 @@ public: @@ -113,7 +109,7 @@ public:
113 ~CMutliSourceVideoProcess(); 109 ~CMutliSourceVideoProcess();
114 110
115 int InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_INFO_CALLBACK tObjInfoCallbackFunc, VIDEO_FINISH_CALLBACK tFinishCallbackFunc); 111 int InitAlgorthim(mvpt_param vptParam, VIDEO_OBJECT_INFO_CALLBACK tObjInfoCallbackFunc, VIDEO_FINISH_CALLBACK tFinishCallbackFunc);
116 - void* GetVPT_Handle(){ return VPT_Handle; }; 112 +
117 int get_task_progress(int taskid, double & progress); 113 int get_task_progress(int taskid, double & progress);
118 void OperatorTask(); 114 void OperatorTask();
119 bool HasNewTask() { 115 bool HasNewTask() {
@@ -179,9 +175,11 @@ public: /*��������Ӧ����public�� ������ï @@ -179,9 +175,11 @@ public: /*��������Ӧ����public�� ������ï
179 sy_command m_face_det_config; //�Ƿ���������� 175 sy_command m_face_det_config; //�Ƿ����������
180 snapshot_helper m_snaphot_helper; 176 snapshot_helper m_snaphot_helper;
181 177
  178 +private:
182 bool m_bExit{false}; 179 bool m_bExit{false};
183 bool m_bProcessExit{false}; 180 bool m_bProcessExit{false};
  181 +
  182 + VPTProcess m_vptProcess;
184 }; 183 };
185 184
186 -static CMutliSourceVideoProcess mainProcess;  
187 #endif 185 #endif
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/ObjCls.h deleted
1 -#include "VPTProcess.h"// detector  
2 -#include "utools.h"  
3 -#include "proto.h"  
4 -#include <queue>  
5 -  
6 -#include "sort/Sort.h" //tracker  
7 -#include "MD5/mID.h"  
8 -//#define MULTICHANNEL 20 //֧�ֵ����·��  
9 -#define THRESHOLD 0.5  
10 -  
11 -//struct objDetector{  
12 -// void* detector;  
13 -// //Sort tracker[MULTICHANNEL];  
14 -// VPTProcess_PARAM param;  
15 -// int channels;//ֵΪopencv��CV_8UC1 ���� CV_8UC3  
16 -//};  
17 -  
18 -struct TaskTracker  
19 -{  
20 - int TaskID;  
21 - double ratioWidth;  
22 - double ratioHeight;  
23 - Sort tracker;  
24 - unsigned int lastFrameIndex;  
25 -};  
26 -vector<TaskTracker> taskTrackers;  
27 -  
28 -  
29 -class CMemoryRecord  
30 -{  
31 - public:  
32 - unsigned char * ptr;  
33 - CMemoryRecord(int w,int h)  
34 - {  
35 - cudaMalloc((void **) & ptr, w*h*3*sizeof(unsigned char));  
36 - }  
37 - virtual ~CMemoryRecord(){  
38 - cudaFree(ptr);  
39 - ptr=NULL;  
40 - }  
41 -  
42 -};  
43 -#if 0  
44 -class CMemoryPool  
45 -{  
46 - public:  
47 - int m_w,m_h;  
48 - std::queue<CMemoryRecord*> filled_records;  
49 - std::queue<CMemoryRecord*> unfilled_records;  
50 - CMemoryPool(int w,int h,int num)  
51 - {  
52 - m_w = w;m_h=h;  
53 - for(int i=0;i<num;i++)  
54 - {  
55 - CMemoryRecord * ptr= new CMemoryRecord(w,h);  
56 - unfilled_records.push_back(ptr);  
57 - }  
58 - }  
59 -  
60 - sy_img GetSyImg()  
61 - {  
62 - sy_img record;  
63 - CMemoryRecord * ptr = unfilled_records.front();  
64 - record.set_data(w,h, ptr->ptr);  
65 - unfilled_records.pop();  
66 - filled_records.push(ptr);  
67 - return record;  
68 - }  
69 -  
70 -  
71 - virtual ~CMemoryPool()  
72 - {  
73 - for(int i=0;i<filled_records.size();i++)  
74 - {  
75 - CMemoryRecord * ptr=filled_records[i ];  
76 - delete [] ptr;  
77 - std::queue<CMemoryRecord*>().swap( filled_records );  
78 -  
79 - }  
80 - for(int i=0;i<filled_records.size();i++)  
81 - {  
82 - CMemoryRecord * ptr=filled_records[i ];  
83 - delete [] ptr;  
84 - std::queue<CMemoryRecord*>().swap( filled_records );  
85 - }  
86 - }  
87 -};  
88 -#endif  
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/VPTProcess.cpp
1 #include "VPTProcess.h" 1 #include "VPTProcess.h"
2 -#include "MutliSourceVideoProcess.h"  
3 -  
4 -#ifndef _MSC_VER  
5 -#include <sys/time.h>  
6 -#endif  
7 2
8 #include <stdlib.h> 3 #include <stdlib.h>
9 #include <cuda_runtime.h> 4 #include <cuda_runtime.h>
10 -#include "ObjCls.h"  
11 -#include <time.h>  
12 #include "ErrorInfo.h" 5 #include "ErrorInfo.h"
13 -#include "fstream"  
14 6
  7 +#include "../FFNvDecoder/logger.hpp"
15 8
  9 +#define THRESHOLD 0.5
16 10
17 #define USE_YOLOV5 11 #define USE_YOLOV5
18 12
@@ -32,24 +26,6 @@ @@ -32,24 +26,6 @@
32 26
33 27
34 28
35 -typedef struct objDetector {  
36 -  
37 - void* det_handle;  
38 - float threshold;  
39 - int engine_type;  
40 - // VPT_FPNPluginFactory tensorrt_plugin_factory;  
41 -  
42 - int licence_status = -1;  
43 - int thrd_status = -1;  
44 - vector<TaskTracker> taskTrackers;  
45 - objDetector()  
46 - {  
47 - det_handle = NULL;  
48 - threshold = 0.6;  
49 - }  
50 -}objDetector;  
51 -  
52 -  
53 static long long get_cur_time_ms(){ 29 static long long get_cur_time_ms(){
54 chrono::time_point<chrono::system_clock, chrono::milliseconds> tpMicro 30 chrono::time_point<chrono::system_clock, chrono::milliseconds> tpMicro
55 = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now()); 31 = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now());
@@ -57,7 +33,15 @@ static long long get_cur_time_ms(){ @@ -57,7 +33,15 @@ static long long get_cur_time_ms(){
57 return tpMicro.time_since_epoch().count(); 33 return tpMicro.time_since_epoch().count();
58 } 34 }
59 35
60 -void config_fpn_param(ctools_init_params& param, int batch_size) { 36 +VPTProcess::VPTProcess(/* args */)
  37 +{
  38 +}
  39 +
  40 +VPTProcess::~VPTProcess()
  41 +{
  42 +}
  43 +
  44 +void VPTProcess::config_fpn_param(ctools_init_params& param, int batch_size) {
61 // param.model_type_ = MODEL_FPN; 45 // param.model_type_ = MODEL_FPN;
62 46
63 // param.weight_file_ = NULL; 47 // param.weight_file_ = NULL;
@@ -103,11 +87,11 @@ void config_fpn_param(ctools_init_params&amp; param, int batch_size) { @@ -103,11 +87,11 @@ void config_fpn_param(ctools_init_params&amp; param, int batch_size) {
103 // param.tensorrt_calibrator_array_len_ = ga_trt_fpn_vpt_calibrator_len;// "trt_fpn_vpt_calibrator"; 87 // param.tensorrt_calibrator_array_len_ = ga_trt_fpn_vpt_calibrator_len;// "trt_fpn_vpt_calibrator";
104 // param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_fpn_vpt_calibrator;// "trt_fpn_vpt_calibrator"; 88 // param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_fpn_vpt_calibrator;// "trt_fpn_vpt_calibrator";
105 89
106 - // param.tensorrt_plugin_factory_ptr_ = &(tools->tensorrt_plugin_factory); 90 + // param.tensorrt_plugin_factory_ptr_ = &(tensorrt_plugin_factory);
107 // } 91 // }
108 } 92 }
109 93
110 -void config_yolo_param(ctools_init_params& param, int batch_size) { 94 +void VPTProcess::config_yolo_param(ctools_init_params& param, int batch_size) {
111 95
112 param.model_type_ = MODEL_YOLOV5; // debug by zsh 96 param.model_type_ = MODEL_YOLOV5; // debug by zsh
113 97
@@ -154,157 +138,37 @@ void config_yolo_param(ctools_init_params&amp; param, int batch_size) { @@ -154,157 +138,37 @@ void config_yolo_param(ctools_init_params&amp; param, int batch_size) {
154 param.tensorrt_calibrator_array_len_ = ga_trt_yolo_vpt_calibrator_len;// 138 param.tensorrt_calibrator_array_len_ = ga_trt_yolo_vpt_calibrator_len;//
155 param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_yolo_vpt_calibrator;// debug by zsh 139 param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_yolo_vpt_calibrator;// debug by zsh
156 140
157 - // param.tensorrt_plugin_factory_ptr_ = &(tools->tensorrt_plugin_factory); 141 + // param.tensorrt_plugin_factory_ptr_ = &(tensorrt_plugin_factory);
158 } 142 }
159 } 143 }
160 144
161 -int VPT_Init(void *&handle, VPTProcess_PARAM vparam) 145 +int VPTProcess::init(int gpuid, int max_batch_size)
162 { 146 {
163 - objDetector *tools = new objDetector;  
164 -  
165 ctools_init_params param; 147 ctools_init_params param;
166 - param.thres_ = vparam.threshold; 148 + param.thres_ = 0.5;
167 param.log_level_ = 0; 149 param.log_level_ = 0;
168 - param.device_type_ = vparam.mode;  
169 - param.device_id_ = vparam.gpuid;  
170 - param.engine_type_ = vparam.engine; 150 + param.device_type_ = DEVICE_GPU;
  151 + param.device_id_ = gpuid;
  152 + param.engine_type_ = ENGINE_TENSORRT;
  153 + param.trt_serialize_file_ = "./serialize_file/VPT";
171 154
172 - param.trt_serialize_file_ = vparam.serialize_file; 155 + m_max_batch_size = max_batch_size;
173 156
174 #ifdef USE_YOLOV5 157 #ifdef USE_YOLOV5
175 - config_yolo_param(param, vparam.max_batch); 158 + config_yolo_param(param, m_max_batch_size);
176 #else 159 #else
177 - config_fpn_param(param, vparam.max_batch); 160 + config_fpn_param(param, m_max_batch_size);
178 #endif 161 #endif
179 162
180 - tools->threshold = vparam.threshold;  
181 - tools->engine_type = vparam.engine; // debug by zsh  
182 - int flag = ctools_init(&(tools->det_handle), &param); 163 + int flag = ctools_init(&det_handle, &param);
183 if (SUCCESS != flag) { 164 if (SUCCESS != flag) {
184 - if (tools) {  
185 - delete tools;  
186 - tools = NULL;  
187 - }  
188 - } else {  
189 - handle = tools; 165 + LOG_ERROR("VPTProcess init failed!");
190 } 166 }
191 167
192 return flag; 168 return flag;
193 } 169 }
194 170
195 -// int VPT_Init(void *&handle, VPTProcess_PARAM vparam)  
196 -// {  
197 -// objDetector *tools = new objDetector;  
198 -  
199 -// ctools_init_params param;  
200 -// param.thres_ = vparam.threshold;  
201 -// param.log_level_ = 0;  
202 -// param.device_type_ = vparam.mode;  
203 -// param.device_id_ = vparam.gpuid;  
204 -// param.engine_type_ = vparam.engine;  
205 -  
206 -// param.trt_serialize_file_ = vparam.serialize_file;  
207 -  
208 -  
209 -// param.model_type_ = MODEL_FPN;  
210 -// // param.model_type_ = MODEL_YOLOV5; // debug by zsh  
211 -  
212 -// param.weight_file_ = NULL;  
213 -// param.net_file_ = NULL;  
214 -  
215 -// param.data_process_str_ =  
216 -// //"CopyData_CPU2GPU_U8;"  
217 -// "TypeConvert_U8_F32;"  
218 -// "ResizeMaxPad_F32_F32,test_size,720,test_max_size,1280,max_height,736,max_width,1280,"  
219 -// "submean_b,103.94,submean_g,116.78,submean_r,123.68,"  
220 -// "variance_rev_b,0.017,variance_rev_g,0.017,variance_rev_r,0.017;"  
221 -// "NHWC2NCHW_F32"  
222 -// ;  
223 -// param.need_im_info_ = 1; // true  
224 -  
225 -// // param.data_process_str_ =  
226 -// // //"CopyData_CPU2GPU_U8;"  
227 -// // "TypeConvert_U8_F32;"  
228 -// // "ResizeMaxMidPad_F32_F32,test_size,640,test_max_size,640,max_height,640,max_width,640,"  
229 -// // "submean_b,0,submean_g,0,submean_r,0,"  
230 -// // "variance_rev_b,0.00392,variance_rev_g,0.00392,variance_rev_r,0.00392;"  
231 -// // "BGR2RGB_F32_F32;"  
232 -// // "NHWC2NCHW_F32"  
233 -// // ;  
234 -// // param.need_im_info_ = 0;  
235 -  
236 -  
237 -// if (param.engine_type_ == ENGINE_MCAFFE2)  
238 -// {  
239 -// /*param.weight_array_ = (unsigned char*)ga_vpt_init_net_caffe2;  
240 -// param.weight_array_len_ = ga_vpt_init_net_len_caffe2;  
241 -// param.net_array_ = (unsigned char*)ga_vpt_predict_net_caffe2;  
242 -// param.net_array_len_ = ga_vpt_predict_net_len_caffe2;*/  
243 -// }  
244 -// else if (param.engine_type_ == ENGINE_TENSORRT)  
245 -// {  
246 -// param.weight_array_ = (uint8_t*)ga_vpt_init_net;  
247 -// param.weight_array_len_ = ga_vpt_init_net_len;  
248 -// param.net_array_ = (uint8_t*)ga_vpt_predict_net;  
249 -// param.net_array_len_ = ga_vpt_predict_net_len;  
250 -  
251 -// // param.net_array_ = (uint8_t*)ga_vpt_det_yolo_640x640;  
252 -// // param.net_array_len_ = ga_vpt_det_yolo_640x640_len; //debug by zsh  
253 -  
254 -// param.trt_serialize_file_ = vparam.serialize_file;  
255 -  
256 -// memset(param.tensorrt_param_str_, 0, sizeof(param.tensorrt_param_str_));  
257 -  
258 -// int batch_size = vparam.max_batch;  
259 -// std::string g_data_mode = "FP32";  
260 -// bool g_is_create_calibrator = false;  
261 -  
262 -// // int g_is_onnx_model = 1;  
263 -// // sprintf(param.tensorrt_param_str_, "max_batchsize %d,"  
264 -// // "data_mode %s,"  
265 -// // "is_create_calibrator %d,"  
266 -// // "is_onnx_model %d,"  
267 -// // "input_names images,"  
268 -// // "output_names output",  
269 -// // batch_size, g_data_mode.c_str(), g_is_create_calibrator, g_is_onnx_model);  
270 -  
271 -// sprintf(param.tensorrt_param_str_, "max_batchsize %d,"  
272 -// "data_mode %s,"  
273 -// "is_create_calibrator %d,"  
274 -// "input_names data im_info,"  
275 -// "output_names cls_prob bbox_pred_final rois_count_each_img",  
276 -// batch_size, g_data_mode.c_str(), g_is_create_calibrator);  
277 -  
278 -// param.tensorrt_calibrator_file_ = NULL;// "trt_fpn_vpt_calibrator";  
279 -// param.tensorrt_calibrator_array_len_ = ga_trt_fpn_vpt_calibrator_len;// "trt_fpn_vpt_calibrator";  
280 -// param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_fpn_vpt_calibrator;// "trt_fpn_vpt_calibrator";  
281 -// // param.tensorrt_calibrator_array_len_ = ga_trt_yolo_vpt_calibrator_len;//  
282 -// // param.tensorrt_calibrator_array_ = (unsigned char*)ga_trt_yolo_vpt_calibrator;// debug by zsh  
283 -  
284 -  
285 -// param.tensorrt_plugin_factory_ptr_ = &(tools->tensorrt_plugin_factory);  
286 -// }  
287 -  
288 -// tools->threshold = vparam.threshold;  
289 -// tools->engine_type = vparam.engine; // debug by zsh  
290 -// int flag = ctools_init(&(tools->det_handle), &param);  
291 -  
292 -// if (SUCCESS != flag)  
293 -// {  
294 -// if (tools)  
295 -// {  
296 -// delete tools;  
297 -// tools = NULL;  
298 -// }  
299 -// }  
300 -// else  
301 -// {  
302 -// handle = tools;  
303 -// }  
304 -// return flag;  
305 -// }  
306 -  
307 -void check_VPT_Result(VPT_Result & vResult) { 171 +void VPTProcess::check_VPT_Result(VPT_Result & vResult) {
308 int index = 0; 172 int index = 0;
309 for (int i = 0; i < vResult.objCount; i++) { 173 for (int i = 0; i < vResult.objCount; i++) {
310 if ((vResult.obj[i].right - vResult.obj[i].left) > 10 && (vResult.obj[i].bottom - vResult.obj[i].top) > 10) 174 if ((vResult.obj[i].right - vResult.obj[i].left) > 10 && (vResult.obj[i].bottom - vResult.obj[i].top) > 10)
@@ -331,34 +195,19 @@ void check_VPT_Result(VPT_Result &amp; vResult) { @@ -331,34 +195,19 @@ void check_VPT_Result(VPT_Result &amp; vResult) {
331 vResult.objCount = index; 195 vResult.objCount = index;
332 } 196 }
333 197
334 -int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batchsize, vector<unsigned long long> vec_frameIndex, vector<VPT_Result>& result, vector<vector<int>>& deleteObjectID, vector<vector<VPT_Result>>& unUsedResult) 198 +int VPTProcess::process(sy_img * batch_img, int startBatch, int batchsize, vector<unsigned long long> vec_frameIndex, vector<VPT_Result>& result, vector<vector<int>>& deleteObjectID, vector<vector<VPT_Result>>& unUsedResult)
335 { 199 {
336 - objDetector *tools = (objDetector*)handle; 200 + if(nullptr == det_handle){
  201 + return FAILED;
  202 + }
337 203
338 bool isUseDet = true; 204 bool isUseDet = true;
339 int channels = 3; 205 int channels = 3;
340 206
341 - // if(batchsize == 5) {  
342 - // for (int i = 0; i < batchsize; i++) {  
343 - // // test  
344 - // printf("k值: %d \n", i);  
345 - // int height = batch_img[i].h_;  
346 - // int width = batch_img[i].w_;  
347 - // int rgb_size = 3 * width * height;  
348 - // unsigned char *cpu_data = new unsigned char[rgb_size];  
349 - // cudaError_t cudaStatus = cudaMemcpy(cpu_data, batch_img[i].data_, rgb_size * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
350 - // cv::Mat img(height, width, CV_8UC3, cpu_data);  
351 - // string filename = "test" + to_string(i) + ".jpg";  
352 - // cv::imwrite(filename.c_str(), img);  
353 - // delete[] cpu_data;  
354 - // cpu_data = nullptr;  
355 - // }  
356 - // }  
357 -  
358 long long t1 = get_cur_time_ms(); 207 long long t1 = get_cur_time_ms();
359 208
360 ctools_result *detresult; 209 ctools_result *detresult;
361 - int res_status = ctools_process(tools->det_handle, batch_img, batchsize, &detresult); 210 + int res_status = ctools_process(det_handle, batch_img, batchsize, &detresult);
362 211
363 #ifdef LOG_INFO2 212 #ifdef LOG_INFO2
364 long long t2 = get_cur_time_ms(); 213 long long t2 = get_cur_time_ms();
@@ -400,9 +249,9 @@ int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batch @@ -400,9 +249,9 @@ int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batch
400 int resIndex = startBatch; 249 int resIndex = startBatch;
401 int detectIndex = 0; 250 int detectIndex = 0;
402 251
403 - for (int i = startBatch; i < tools->taskTrackers.size(); i++) 252 + for (int i = startBatch; i < taskTrackers.size(); i++)
404 { 253 {
405 - TaskTracker task_tracker = tools->taskTrackers[i]; 254 + TaskTracker task_tracker = taskTrackers[i];
406 if (!task_tracker.tracker.GetState()) { 255 if (!task_tracker.tracker.GetState()) {
407 continue; 256 continue;
408 } 257 }
@@ -463,225 +312,70 @@ int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batch @@ -463,225 +312,70 @@ int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batch
463 return SUCCESS; 312 return SUCCESS;
464 } 313 }
465 314
466 -  
467 -  
468 -void VPT_Release(void * handle)  
469 -{  
470 - objDetector *tools = (objDetector*)handle;  
471 -  
472 - if (tools)  
473 - {  
474 - if (tools->det_handle)  
475 - {  
476 - ctools_release(&tools->det_handle);  
477 - tools->det_handle = NULL;  
478 - }  
479 -  
480 - vector<TaskTracker>().swap(tools->taskTrackers);  
481 -  
482 - delete tools;  
483 - tools = NULL; 315 +void VPTProcess::release() {
  316 + if (det_handle) {
  317 + ctools_release(&det_handle);
  318 + det_handle = NULL;
484 } 319 }
  320 +
  321 + vector<TaskTracker>().swap(taskTrackers);
485 } 322 }
486 323
487 -void AddTaskTracker(void * handle, const int taskID, const double rWidth, const double rHeight) 324 +void VPTProcess::AddTaskTracker(const int taskID, const double rWidth, const double rHeight)
488 { 325 {
489 - objDetector *tools = (objDetector*)handle;  
490 TaskTracker t; 326 TaskTracker t;
491 t.TaskID = taskID; 327 t.TaskID = taskID;
492 t.ratioWidth = rWidth; 328 t.ratioWidth = rWidth;
493 t.ratioHeight = rHeight; 329 t.ratioHeight = rHeight;
494 t.lastFrameIndex = 0; 330 t.lastFrameIndex = 0;
495 t.tracker.setYOLOv5(true); // YOLOv5 要设为true, fpn 要设为false 331 t.tracker.setYOLOv5(true); // YOLOv5 要设为true, fpn 要设为false
496 - tools->taskTrackers.push_back(t); 332 + taskTrackers.push_back(t);
497 } 333 }
498 334
499 -void FinishTaskTracker(void * handle, const int taskID) 335 +void VPTProcess::FinishTaskTracker(const int taskID)
500 { 336 {
501 - objDetector *tools = (objDetector*)handle;  
502 - for (int i = 0; i < tools->taskTrackers.size(); i++) 337 + for (int i = 0; i < taskTrackers.size(); i++)
503 { 338 {
504 - if (tools->taskTrackers[i].TaskID == taskID) 339 + if (taskTrackers[i].TaskID == taskID)
505 { 340 {
506 - tools->taskTrackers.erase(tools->taskTrackers.begin() + i); 341 + taskTrackers.erase(taskTrackers.begin() + i);
507 break; 342 break;
508 } 343 }
509 } 344 }
510 } 345 }
511 346
512 -void PauseTaskTracker(void * handle, const int taskID) 347 +void VPTProcess::PauseTaskTracker(const int taskID)
513 { 348 {
514 - objDetector *tools = (objDetector*)handle;  
515 - for (int i = 0; i < tools->taskTrackers.size(); i++) 349 + for (int i = 0; i < taskTrackers.size(); i++)
516 { 350 {
517 - if (tools->taskTrackers[i].TaskID == taskID) 351 + if (taskTrackers[i].TaskID == taskID)
518 { 352 {
519 - tools->taskTrackers[i].tracker.Pause(); 353 + taskTrackers[i].tracker.Pause();
520 break; 354 break;
521 } 355 }
522 } 356 }
523 } 357 }
524 358
525 -void RestartTaskTraker(void * handle, const int taskID) 359 +void VPTProcess::RestartTaskTraker(const int taskID)
526 { 360 {
527 - objDetector *tools = (objDetector*)handle;  
528 - for (int i = 0; i < tools->taskTrackers.size(); i++) 361 + for (int i = 0; i < taskTrackers.size(); i++)
529 { 362 {
530 - if (tools->taskTrackers[i].TaskID == taskID) 363 + if (taskTrackers[i].TaskID == taskID)
531 { 364 {
532 - tools->taskTrackers[i].tracker.ReSet(); 365 + taskTrackers[i].tracker.ReSet();
533 break; 366 break;
534 } 367 }
535 } 368 }
536 } 369 }
537 370
538 -void DrawTracker(void * handle, const int taskID, cv::Mat *img) 371 +void VPTProcess::DrawTracker(const int taskID, cv::Mat *img)
539 { 372 {
540 - objDetector *tools = (objDetector*)handle;  
541 - for (int i = 0; i < tools->taskTrackers.size(); i++) 373 + for (int i = 0; i < taskTrackers.size(); i++)
542 { 374 {
543 - if (tools->taskTrackers[i].TaskID == taskID) 375 + if (taskTrackers[i].TaskID == taskID)
544 { 376 {
545 - tools->taskTrackers[i].tracker.addTracker(img); 377 + taskTrackers[i].tracker.addTracker(img);
546 break; 378 break;
547 } 379 }
548 } 380 }
549 -}  
550 -  
551 -  
552 -  
553 -int VPT_Process(void * handle, unsigned char ** bgr, int batchsize, VPT_Result *result)  
554 -{  
555 - // isUseDet = false;  
556 - // }  
557 -  
558 - // }  
559 - // resIndex++;  
560 - // if (resIndex == batchsize) break;  
561 - //}  
562 - //vector <vector< vector <float>>>().swap(detectResult);  
563 - //vector<vector<float>>().swap(ssdResult);  
564 - ///*detectResult.clear();  
565 - //ssdResult.clear();*/  
566 -  
567 - return SUCCESS;  
568 -}  
569 -  
570 -//#include <windows.h>  
571 -  
572 -  
573 -  
574 -  
575 -void permute(float * image, int testWidth, int testHeight)  
576 -{  
577 - //cv::Mat host_image;  
578 - float * host_image;  
579 - //host_image.create(testHeight, testWidth, CV_32FC3);  
580 -  
581 - host_image = (float *)malloc(testHeight*testWidth * 3 * sizeof(float));;  
582 -  
583 - float *Host_img = new float[3 * testWidth * testHeight]{};//?????ڴ?  
584 -  
585 - float* image_data_original = image;  
586 - //NPP_CHECK_CUDA(cudaMemcpy(Host_img, image_data_original, testWidth*testHeight * 3 * sizeof(float), cudaMemcpyDeviceToHost));//?????Կ???????ͼ????????  
587 - cudaMemcpy(Host_img, image_data_original, testWidth*testHeight * 3 * sizeof(float), cudaMemcpyDeviceToHost);//?????Կ???????ͼ????????  
588 -  
589 - for (int j = 0; j < testHeight; j++)  
590 - {  
591 - float *pts = host_image + j * testWidth * 3;  
592 - for (int i = 0; i < testWidth; i++)  
593 - {  
594 - //pts[3 * i] = cv::saturate_cast<uchar>(Host_img[3 * (j*host_image.cols + i) + 0]); //b  
595 - //pts[3 * i + 1] = cv::saturate_cast<uchar>(Host_img[3 * (j*host_image.cols + i) + 1]); //g  
596 - //pts[3 * i + 2] = cv::saturate_cast<uchar>(Host_img[3 * (j*host_image.cols + i) + 2]); //r  
597 -  
598 - pts[3 * i] = (Host_img[j * testWidth + i]); //b  
599 - pts[3 * i + 1] = (Host_img[testWidth * testHeight + j * testWidth + i]); //g  
600 - pts[3 * i + 2] = (Host_img[2 * testWidth * testHeight + j * testWidth + i]); //r  
601 - }  
602 - }  
603 -  
604 - cudaMemcpy(image_data_original, host_image, testWidth*testHeight * 3 * sizeof(float), cudaMemcpyHostToDevice);  
605 - free(host_image);  
606 - //cv::Mat showImg;  
607 - //cv::resize(host_image, showImg, cv::Size(640, 480));  
608 - //cv::imshow("image", showImg);  
609 - //cv::waitKey(0);  
610 -}  
611 -  
612 -cv::Mat GpuMat2OpencvMat(unsigned char* image, int width, int height)  
613 -{  
614 - int testWidth = width;  
615 - int testHeight = height;  
616 - cv::Mat host_image;  
617 - host_image.create(testHeight, testWidth, CV_8UC3);  
618 - unsigned char *Host_img = new unsigned char[3 * testWidth * testHeight]{};//?????ڴ?  
619 - unsigned char* image_data_original = image;  
620 -  
621 - cudaError_t code = cudaMemcpy(Host_img, image_data_original, testWidth*testHeight * 3 * sizeof(unsigned char), cudaMemcpyDeviceToHost);//?????Կ???????ͼ????????  
622 - if (code != 0)  
623 - {  
624 - printf("==========================================================error");  
625 - }  
626 - std::ofstream outfile("decode.bin", ios::out | ios::binary);  
627 - outfile.write((char*)Host_img, int(sizeof(char) * 1080 * 1920 * 3));  
628 - outfile.close();  
629 -  
630 - cudaMemcpy(host_image.data, image_data_original, 1920 * testHeight * 3 * sizeof(unsigned char), cudaMemcpyDeviceToHost);  
631 - cv::imwrite("input3.jpg", host_image);  
632 - return host_image;  
633 -}  
634 -  
635 -  
636 -int VPT_ProcessImage(void * handle, unsigned char ** bgr, int batchsize, VPT_Result * result)  
637 -{  
638 - //objDetector* tools = (objDetector*)handle;  
639 - //if (bgr == NULL) //ͼ?????ݴ???  
640 - // return IMG_DATA_ERROR;  
641 -  
642 - //vector <Mat> imgs;  
643 - ////int datasize = tools->param.w * tools->param.h * tools->param.c;  
644 - //for (int i = 0; i < batchsize; i++)  
645 - //{  
646 - // Mat img(tools->param.h, tools->param.w, tools->param.c, bgr[i]);  
647 - // imgs.push_back(img);  
648 - //}  
649 -  
650 - //vector<vector<float>> ssdResult;  
651 - ////clock_t begin = clock();  
652 - //ssdResult = SSD_Detect(tools->detector, batchsize, imgs); //  
653 - //vector <vector< vector <float>>> detectResult(batchsize); //ת??Ϊ????????Ҫ??????  
654 - //for (int i = 0; i < ssdResult.size(); ++i)  
655 - //{  
656 - // const vector<float>& d = ssdResult[i];// Detection format: [image_id, label, score, xmin, ymin, xmax, ymax)  
657 - // const float score = d[2];  
658 - // int imgid = d[0];  
659 - // if (score >= THRESHOLD) //????Ϊleft top right bottom score id  
660 - // {  
661 - // vector <float> obj;  
662 - // obj.push_back(d[3] * imgs[d[0]].cols);  
663 - // obj.push_back(d[4] * imgs[d[0]].rows);  
664 - // obj.push_back(d[5] * imgs[d[0]].cols);  
665 - // obj.push_back(d[6] * imgs[d[0]].rows);  
666 - // obj.push_back(d[2]);  
667 - // obj.push_back(d[1]);  
668 - // detectResult[imgid].push_back(obj);  
669 - // }  
670 - //}  
671 - //for (int i = 0; i < batchsize; i++)  
672 - //{  
673 - // for (int j = 0; j < detectResult[i].size(); j++)//left top right bottom score id  
674 - // {  
675 - // result[i].obj[j].id = 0;  
676 - // result[i].obj[j].left = detectResult[i][j][0];  
677 - // result[i].obj[j].top = detectResult[i][j][1];  
678 - // result[i].obj[j].right = detectResult[i][j][2];  
679 - // result[i].obj[j].bottom = detectResult[i][j][3];  
680 - // result[i].obj[j].confidence = detectResult[i][j][4];  
681 - // result[i].obj[j].index = detectResult[i][j][5] - 1;  
682 - // }  
683 - //  
684 - //}  
685 -  
686 - return SUCCESS;  
687 } 381 }
688 \ No newline at end of file 382 \ No newline at end of file
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/VPTProcess.h
@@ -11,95 +11,77 @@ @@ -11,95 +11,77 @@
11 #include <vector> 11 #include <vector>
12 #include "common.h" 12 #include "common.h"
13 13
  14 +#include "./sort/Sort.h" //tracker
  15 +
14 using namespace std; 16 using namespace std;
15 -#define VTTYPECOUNT 10 //֧�ֵ���������  
16 17
17 18
18 -typedef struct VPTProcess_PARAM 19 +struct TaskTracker
  20 +{
  21 + int TaskID;
  22 + double ratioWidth;
  23 + double ratioHeight;
  24 + Sort tracker;
  25 + unsigned int lastFrameIndex;
  26 +};
  27 +
  28 +
  29 +class VPTProcess
19 { 30 {
20 - int mode; //����ģʽ(DEVICE_GPU / DEVICE_CPU)  
21 - int gpuid; //ָ���Կ�id  
22 - float threshold;  
23 - int max_batch;  
24 - int engine; //ָ����������(ENGINE_MCAFFE2 / ENGINE_TENSORRT)  
25 - char* preprocess_param;  
26 - char* serialize_file;  
27 - char* auth_license;  
28 - VPTProcess_PARAM() :mode(DEVICE_GPU), gpuid(0), threshold(0.6), max_batch(20) {};  
29 -}VPTProcess_PARAM; 31 +public:
  32 + VPTProcess(/* args */);
  33 + ~VPTProcess();
30 34
  35 + /*************************************************************************
  36 + * PURPOSE: 初始化
  37 + * PARAM:
  38 + [in] vparam 参数
  39 + * RETURN: handle
  40 + * NOTES:
  41 + *************************************************************************/
  42 + int init(int gpuid, int max_batch_size);
31 43
32 -/*************************************************************************  
33 -* FUNCTION: VPT_Init  
34 -* PURPOSE: ��ʼ��  
35 -* PARAM:  
36 -[in] vparam ����  
37 -* RETURN: handle  
38 -* NOTES:  
39 -*************************************************************************/  
40 -int VPT_Init(void *&handle, VPTProcess_PARAM vparam); 44 + /*************************************************************************
  45 + * PURPOSE: 人车物检测跟踪
  46 + * PARAM:
  47 + [in] handle - 处理句柄
  48 + [in] rgb - 图片数据(3通道BGR数据 cv::Mat格式)
  49 + [in] width - 图片宽度
  50 + [in] height - 图片高度
  51 + [in] result - 搜索结果,在外部申请足够内存
  52 + [in] deleteObjectID - 删除的轨迹ID号
  53 + [out] traffic - 交通流量结果结构体 内存在外部申请,大小与初始化时流量监测线个数相同,设置为NULL时不返回
  54 + * RETURN: -1:图像错误; 其他:检测到的个数
  55 + * NOTES:
  56 + *************************************************************************/
  57 + //startBatch 多batch为了减少显存,串行处理 - add by lm
  58 + int process(sy_img * batch_img, int startBatch, int batchsize, vector<unsigned long long> vec_frameIndex, vector<VPT_Result>& result, vector<vector<int>>& deleteObjectID, vector<vector<VPT_Result>>& unUsedResult);
41 59
42 -/*************************************************************************  
43 -* FUNCTION: VPT_Process  
44 -* PURPOSE: �˳��������  
45 -* PARAM:  
46 -[in] handle - �������  
47 -[in] rgb - ͼƬ���ݣ�3ͨ��BGR���� cv::Mat��ʽ��  
48 -[in] width - ͼƬ����  
49 -[in] height - ͼƬ�߶�  
50 -[in] result - ������������ⲿ�����㹻�ڴ�  
51 -[out] traffic - ��ͨ��������ṹ�� �ڴ����ⲿ���룬��С���ʼ��ʱ��������߸�����ͬ������ΪNULLʱ������  
52 -* RETURN: -1��ͼ����� ��������⵽�ĸ���  
53 -* NOTES:  
54 -*************************************************************************/  
55 -int VPT_Process(void * handle, unsigned char ** bgr, int batchsize, VPT_Result * result); 60 + /*************************************************************************
  61 + * PURPOSE: 资源释放
  62 + * PARAM:
  63 + [in] handle - 处理句柄
  64 + * RETURN: NULL
  65 + * NOTES:
  66 + *************************************************************************/
  67 + void release();
56 68
57 -/*************************************************************************  
58 -* FUNCTION: VPT_Process  
59 -* PURPOSE: �˳��������  
60 -* PARAM:  
61 -[in] handle - �������  
62 -[in] rgb - ͼƬ���ݣ�3ͨ��BGR���� cv::Mat��ʽ��  
63 -[in] width - ͼƬ����  
64 -[in] height - ͼƬ�߶�  
65 -[in] result - ������������ⲿ�����㹻�ڴ�  
66 -[in] deleteObjectID - ɾ���Ĺ켣ID��  
67 -[out] traffic - ��ͨ��������ṹ�� �ڴ����ⲿ���룬��С���ʼ��ʱ��������߸�����ͬ������ΪNULLʱ������  
68 -* RETURN: -1��ͼ����� ��������⵽�ĸ���  
69 -* NOTES:  
70 -*************************************************************************/  
71 -//startBatch ��batchΪ�˼����Դ棬���д��� - add by lm  
72 -//int VPT_Process_GPU(void * handle, float * bgr, int width, int height, int startBatch, int batchsize, VPT_Result * result, vector<vector<int>>& deleteObjectID);  
73 -int VPT_Process_GPU(void * handle, sy_img * batch_img, int startBatch, int batchsize, vector<unsigned long long> vec_frameIndex, vector<VPT_Result>& result, vector<vector<int>>& deleteObjectID, vector<vector<VPT_Result>>& unUsedResult);  
74 69
75 -/*************************************************************************  
76 -* FUNCTION: VPT_ProcessImage  
77 -* PURPOSE: �˳�����-ͼƬ  
78 -* PARAM:  
79 -[in] handle - �������  
80 -[in] rgb - ͼƬ���ݣ�3ͨ��BGR���� cv::Mat��ʽ��  
81 -[in] width - ͼƬ����  
82 -[in] height - ͼƬ�߶�  
83 -[in] result - ������������ⲿ�����㹻�ڴ�  
84 -* RETURN: -1��ͼ����� ��������⵽�ĸ���  
85 -* NOTES:  
86 -*************************************************************************/  
87 -int VPT_ProcessImage(void * handle, unsigned char ** bgr, int batchsize, VPT_Result * result);  
88 70
89 -/*************************************************************************  
90 -* FUNCTION: VPT_Release  
91 -* PURPOSE: ��Դ�ͷ�  
92 -* PARAM:  
93 -[in] handle - �������  
94 -* RETURN: NULL  
95 -* NOTES:  
96 -*************************************************************************/  
97 -void VPT_Release(void * handle); 71 + void AddTaskTracker(const int taskID, const double rWidth, const double rHeight);
  72 + void FinishTaskTracker(const int taskID);
  73 + void PauseTaskTracker(const int taskID);
  74 + void RestartTaskTraker(const int taskID);
  75 + void DrawTracker(const int taskID, cv::Mat *img);
98 76
  77 +private:
  78 + void config_fpn_param(ctools_init_params& param, int batch_size);
  79 + void config_yolo_param(ctools_init_params& param, int batch_size);
  80 + void check_VPT_Result(VPT_Result & vResult);
99 81
  82 +private:
  83 + int m_max_batch_size {20};
100 84
101 -void AddTaskTracker(void * handle, const int taskID, const double rWidth, const double rHeight);  
102 -void FinishTaskTracker(void * handle, const int taskID);  
103 -void PauseTaskTracker(void * handle, const int taskID);  
104 -void RestartTaskTraker(void * handle, const int taskID);  
105 -void DrawTracker(void * handle, const int taskID, cv::Mat *img); 85 + void* det_handle {nullptr};
  86 + vector<TaskTracker> taskTrackers;
  87 +};
vehicle_structure_platform.git0708-3080-trt-face/src/VPT/sort/Sort.h
@@ -9,8 +9,8 @@ @@ -9,8 +9,8 @@
9 #include <stdio.h> 9 #include <stdio.h>
10 #include <math.h> 10 #include <math.h>
11 #include<vector> 11 #include<vector>
12 -#include "../VPTProcess.h"  
13 12
  13 +#include "../common.h"
14 14
15 using namespace std; 15 using namespace std;
16 16