Blame view

src/demo/demo.cpp 8.89 KB
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
1
2
3
4
5
6
7
  #include "../ai_platform/stl_aiplatform.h"
  #include <chrono>
  #include <thread>
  #include <stdio.h>
  #include <string.h>
  #include <stdlib.h>
  #include <unistd.h>
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
8
  #include <iostream>
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
9
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
10
11
12
13
14
15
  #include "opencv2/opencv.hpp"
  #include "opencv2/imgcodecs/legacy/constants_c.h"
  #include "opencv2/imgproc/types_c.h"
  
  #include "demo_util.hpp"
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
16
  using namespace std;
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
17
  using namespace cv;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
18
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
19
20
21
22
23
24
25
  
  static long long get_cur_time(){
      chrono::time_point<chrono::system_clock, chrono::milliseconds> tpMicro
          = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now());
      return tpMicro.time_since_epoch().count();
  }
  
881ac79d   Hu Chunming   代码调通,结果正常输出
26
27
  string get_ipc_url(int gi){
    string ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
28
29
    switch(gi){
      case 0:
881ac79d   Hu Chunming   代码调通,结果正常输出
30
        ipc_url = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
31
32
        break;
      case 1:
881ac79d   Hu Chunming   代码调通,结果正常输出
33
        ipc_url = "rtsp://122.97.218.170:8604/openUrl/V5nXRHa?params=eyJwcm90b2NhbCI6InJ0c3AiLCJjbGllbnRUeXBlIjoib3Blbl9hcGkiLCJleHByaWVUaW1lIjotMSwicHJvdG9jb2wiOiJydHNwIiwiZXhwaXJlVGltZSI6MzAwLCJlbmFibGVNR0MiOnRydWUsImV4cGFuZCI6InN0YW5kYXJkPXJ0c3Amc3RyZWFtZm9ybT1ydHAiLCJhIjoiMTBjZjM4N2JjY2Y5NDg3YzhjNWYzNjE2M2ViMWUyNTJ8MXwwfDEiLCJ0IjoxfQ==";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
34
35
        break;
      case 2:
881ac79d   Hu Chunming   代码调通,结果正常输出
36
        ipc_url = "rtsp://admin:ad123456@192.168.10.166:554/cam/realmonitor?channel=1&subtype=0";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
37
38
        break;
      case 3:
881ac79d   Hu Chunming   代码调通,结果正常输出
39
40
        ipc_url = "rtsp://122.97.218.170:8604/openUrl/LBBYTra?params=eyJwcm90b2NhbCI6InJ0c3AiLCJjbGllbnRUeXBlIjoib3Blbl9hcGkiLCJleHByaWVUaW1lIjotMSwicHJvdG9jb2wiOiJydHNwIiwiZXhwaXJlVGltZSI6MzAwLCJlbmFibGVNR0MiOnRydWUsImV4cGFuZCI6InN0YW5kYXJkPXJ0c3Amc3RyZWFtZm9ybT1ydHAiLCJhIjoiOTgzYjRjMmUxMThlNGU1OTlkYThmMTI3NTkyMGViODV8MXwwfDEiLCJ0IjoxfQ==";
        // ipc_url = "rtsp://122.97.218.170:8604/openUrl/V5nXRHa?params=eyJwcm90b2NhbCI6InJ0c3AiLCJjbGllbnRUeXBlIjoib3Blbl9hcGkiLCJleHByaWVUaW1lIjotMSwicHJvdG9jb2wiOiJydHNwIiwiZXhwaXJlVGltZSI6MzAwLCJlbmFibGVNR0MiOnRydWUsImV4cGFuZCI6InN0YW5kYXJkPXJ0c3Amc3RyZWFtZm9ybT1ydHAiLCJhIjoiMTBjZjM4N2JjY2Y5NDg3YzhjNWYzNjE2M2ViMWUyNTJ8MXwwfDEiLCJ0IjoxfQ==";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
41
42
        break;
      case 4:
881ac79d   Hu Chunming   代码调通,结果正常输出
43
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
44
45
        break;
      case 5:
881ac79d   Hu Chunming   代码调通,结果正常输出
46
        ipc_url = "/data/share/data/公安局老桥头_CVR15F89410_1465819864_1B.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
47
48
        break;
      case 6:
881ac79d   Hu Chunming   代码调通,结果正常输出
49
        ipc_url = "/data/share/data/不带头盔2.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
50
51
        break;
      case 7:
881ac79d   Hu Chunming   代码调通,结果正常输出
52
        ipc_url = "/data/share/data/hczr1.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
53
54
        break;
      case 8:
881ac79d   Hu Chunming   代码调通,结果正常输出
55
        ipc_url = "/data/share/data/燕高路口高点_CVR_2015-12-30_09-00-00_2015-12-30.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
56
57
        break;
      case 9:
881ac79d   Hu Chunming   代码调通,结果正常输出
58
59
        // ipc_url = "/opt/share/data/1-00000002d55_h265.mp4";
        ipc_url = "/data/share/data/duan1.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
60
61
        break;
      case 10:
881ac79d   Hu Chunming   代码调通,结果正常输出
62
        ipc_url = "/data/share/data/gs1-00000001.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
63
64
        break;
      case 11:
881ac79d   Hu Chunming   代码调通,结果正常输出
65
        ipc_url = "/data/share/data/98.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
66
67
        break;
      case 12:
881ac79d   Hu Chunming   代码调通,结果正常输出
68
        ipc_url = "/data/share/data/AV_12345_1_20230108110849847_D_1673147329847729.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
69
70
        break;
      case 13:
881ac79d   Hu Chunming   代码调通,结果正常输出
71
        ipc_url = "/data/share/data/nx_1-00000002.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
72
73
        break;
      case 14:
881ac79d   Hu Chunming   代码调通,结果正常输出
74
        ipc_url = "/data/share/data/nx1-0000001.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
75
76
        break;
      case 15:
881ac79d   Hu Chunming   代码调通,结果正常输出
77
        ipc_url = "/data/share/data/nx1-00000002.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
78
79
        break;
      case 16:
881ac79d   Hu Chunming   代码调通,结果正常输出
80
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
81
82
        break;
      case 17:
881ac79d   Hu Chunming   代码调通,结果正常输出
83
        ipc_url = "/data/share/data/xiancun.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
84
85
        break;
      case 18:
881ac79d   Hu Chunming   代码调通,结果正常输出
86
        ipc_url = "rtsp://192.168.60.146:8554/w_1_out";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
87
88
        break;
      case 19:
881ac79d   Hu Chunming   代码调通,结果正常输出
89
        ipc_url = "/data/share/data/42_44.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
90
91
        break;
      case 20:
881ac79d   Hu Chunming   代码调通,结果正常输出
92
        ipc_url = "/data/share/data/37_70.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
93
94
        break;
      case 21:
881ac79d   Hu Chunming   代码调通,结果正常输出
95
        ipc_url = "/data/share/data/192_25.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
96
97
        break;
      case 22:
881ac79d   Hu Chunming   代码调通,结果正常输出
98
        ipc_url = "/data/share/data/31_4.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
99
100
        break;
      case 23:
881ac79d   Hu Chunming   代码调通,结果正常输出
101
        ipc_url = "/data/share/data/146_192.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
102
103
        break;
      case 24:
881ac79d   Hu Chunming   代码调通,结果正常输出
104
        ipc_url = "/data/share/data/146_187.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
105
106
107
        break;
      case 25:
        // 公安内网
881ac79d   Hu Chunming   代码调通,结果正常输出
108
        ipc_url = "rtsp://192.168.51.200:8554/320202202308231001001002";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
109
110
111
        break;
      case 26:
        // FFmpeg生成的解码错误数据流
881ac79d   Hu Chunming   代码调通,结果正常输出
112
        ipc_url = "rtsp://192.168.10.4:8554/street";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
113
114
        break;
      case 27:
881ac79d   Hu Chunming   代码调通,结果正常输出
115
        ipc_url = "/data/share/data/Street_4k_265.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
116
117
        break;
      case 28:
881ac79d   Hu Chunming   代码调通,结果正常输出
118
        ipc_url = "http://192.168.60.179:10016/公安局老桥头_CVR15F89410_1465819864_1B.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
119
120
        break;
      case 29:
881ac79d   Hu Chunming   代码调通,结果正常输出
121
        ipc_url = "http://192.168.60.179:10016/不带头盔2.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
122
123
        break;
      case 30:
881ac79d   Hu Chunming   代码调通,结果正常输出
124
        ipc_url = "/data/share/data/149_45.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
125
126
        break;
      case 31:
881ac79d   Hu Chunming   代码调通,结果正常输出
127
        ipc_url = "/data/share/data/146_88.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
128
129
        break;
      case 32:
881ac79d   Hu Chunming   代码调通,结果正常输出
130
        ipc_url = "/data/share/data/141_74.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
131
132
        break;
      default:
881ac79d   Hu Chunming   代码调通,结果正常输出
133
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
134
135
        break;
    }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
136
  
881ac79d   Hu Chunming   代码调通,结果正常输出
137
    return ipc_url;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
138
139
  }
  
881ac79d   Hu Chunming   代码调通,结果正常输出
140
  static int nTaskId = 0;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
141
  
881ac79d   Hu Chunming   代码调通,结果正常输出
142
  string createTask(void *handle, int gi, bool bFlag = true){
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
143
144
    task_param tparam;
  
881ac79d   Hu Chunming   代码调通,结果正常输出
145
    tparam.ipc_url = get_ipc_url(gi);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
146
147
148
149
  
    if (bFlag){
      nTaskId = gi;
    }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
150
151
    std::string task_id_str = "test_task_id_" + std::to_string(nTaskId);
    tparam.task_id = task_id_str.c_str();
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
152
153
    nTaskId++;
  
881ac79d   Hu Chunming   代码调通,结果正常输出
154
155
    tparam.result_folder_little = "./res";         //目标快照抠图保存地址
  	tparam.result_folder = "./res";                //目标快照大图保存地址
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
156
157
158
159
160
161
  
    const int result_code = add_task(handle, tparam);
    if (result_code != 0)
      printf("[Error]: ");
    printf("--- task_id: %s result code: %d\n", tparam.task_id, result_code);
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
162
163
164
    return task_id_str;
  }
  
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
165
166
  void show_result(ObjectData obj)
  {
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
167
    printf("%s  %d \n", obj.task_id.c_str(), obj.task_frame_count);
e721ea0f   Hu Chunming   删除无用的三方库
168
169
    printf("%d %d (%d,%d,%d,%d) %lf \n", obj.index, obj.object_id, obj.left, obj.top, obj.right, obj.bottom, obj.confidence);
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
170
171
172
173
174
175
    cv::Mat image = cv::imread(obj.ori_pic_path);
  
    cv::Rect rc(obj.left, obj.top,obj.right - obj.left, obj.bottom - obj.top);
    const cv::Scalar color(0, 0, 255);
    cv::rectangle(image, rc, color);
  
e721ea0f   Hu Chunming   删除无用的三方库
176
177
    if (obj.index == 0)
    {// person
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
178
179
180
181
182
183
184
185
186
187
188
189
      for (size_t i = 0; i < HP_ATTRI_SIZE; i++)
      {
        auto hp_cls = obj.hp_cls[i];
        printf("(%d, %f)  ", hp_cls.res_index, hp_cls.res_prob);
      }
      printf("\n");
      for (size_t i = 0; i < HUMANREID_FEATURE_SIZE; i++)
      {
        auto hp_cls = obj.hp_feature[i];
        printf("%f ", obj.hp_feature[i]);
      }
      printf("\n");
e721ea0f   Hu Chunming   删除无用的三方库
190
191
192
    } 
    else if (obj.index >= 4 && obj.index <= 8)
    {// vehicle
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
      printf("vehicle color:%d  prob:%f \n", obj.vehicle_color_index, obj.vehicle_color_prob);
      for (size_t i = 0; i < obj.vec_vpd_cls.size(); i++)
      {
        auto info = obj.vec_vpd_cls[i];
        printf("%d %f (%d, %d, %d, %d) \n", info.index, info.confidence, info.left_, info.top_, info.width_, info.height_);
  
        cv::Rect rc(info.left_, info.top_, info.width_, info.height_);
        const cv::Scalar color(0, 255, 255);
        cv::rectangle(image, rc, color);
      }
  
      auto& plate_info = obj.vehicle_plate;
      printf("plate : (%d, %d, %d, %d)  %f \n", plate_info.left_, plate_info.top_, plate_info.width_, plate_info.height_, plate_info.detect_score );
      cv::Rect rc(plate_info.left_, plate_info.top_, plate_info.width_, plate_info.height_);
      const cv::Scalar color(0, 255, 0);
      cv::rectangle(image, rc, color);
      for (size_t i = 0; i < 8; i++)
      {
        printf("%s:%f  ", plate_info.recg[i].character, plate_info.recg[i].maxprob);
      }
      printf("\n");
      printf("num_score: %f \n", plate_info.num_score);
      printf("type: %d \n", plate_info.type);
      printf("state:%d  %f\n", plate_info.state, plate_info.state_score);
e721ea0f   Hu Chunming   删除无用的三方库
217
    }
8dcef6cb   Hu Chunming   修复detect_score值不对的问题
218
    printf("\n");
e721ea0f   Hu Chunming   删除无用的三方库
219
    
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
220
221
222
    string result_path = "./res/result/" +  obj.task_id + "_" + to_string(obj.object_id) + ".jpg";
    cv::imwrite(result_path, image);
    image.release();
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
223
  }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
224
225
226
227
  
  void test_gpu(int gpuID){
      tsl_aiplatform_param vptParam;
      vptParam.gpuid = gpuID;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
228
229
230
231
232
233
234
235
      vptParam.models_dir = ".";
  
      vptParam.log_days = 1;
      vptParam.log_level = AI_LOG_LEVEL_TRACE;
      // vptParam.log_level = AI_LOG_LEVEL_DEBUG;
      vptParam.log_mem = 64 * 1024 * 1024; // 64MB.
      vptParam.log_path = "logs/main.log";
  
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
236
237
      vptParam.result_cbk = show_result;
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
238
239
240
241
242
243
244
245
246
      void *handle;
      int flag = tsl_aiplatform_init(&handle, vptParam);
      if (0 != flag) {
          printf("Init Failed! Error Code: %d\n", flag);
          return;
      } else {
          printf("Init Success\n");
      }
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
247
248
      CreateResultFolder("./res/result", "");
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
249
250
251
252
253
254
255
256
    // createTask(handle, algor_vec2, 19, false);
    // createTask(handle, algor_vec2, 20, false);
    // createTask(handle, algor_vec2, 21, false);
    // createTask(handle, algor_vec2, 22, false);
    // createTask(handle, algor_vec2, 23, false);
    // createTask(handle, algor_vec2, 24, false);
    // createTask(handle, algor_vec2, 30, false);
    // createTask(handle, algor_vec2, 31, false);
881ac79d   Hu Chunming   代码调通,结果正常输出
257
    createTask(handle, 4, false);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
258
259
260
261
262
263
  
      while (getchar() != 'q');
  
      tsl_aiplatform_release(&handle);
  }
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
  int main(int argc, char *argv[]) {
      printf("new test\n");
  
      // if (argc < 4) {
      //   fprintf(stderr, "./xxx 0 2 10 1 ## [start_ai_id, end_ai_id) repeat_num gpu_id\n");
      //   return -1;
      // }
  
      // //! load params.
      // int start_id = atoi(argv[1]);
      // int end_id = atoi(argv[2]);
      // int repeat_num = atoi(argv[3]);
      // int gpuID = atoi(argv[4]);
  
      test_gpu(0);
      // test_gpu(1);
      // test_gpu(2);
      // test_gpu(3);
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
283
284
285
286
287
  
      printf("Done.\n"); 
  
      return 0;
  }