Blame view

src/demo/demo.cpp 11.1 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>
1fa39585   Hu Chunming   输出结果优化
9
10
  #include <fstream>
  #include <string>
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
11
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
12
13
14
15
16
17
  #include "opencv2/opencv.hpp"
  #include "opencv2/imgcodecs/legacy/constants_c.h"
  #include "opencv2/imgproc/types_c.h"
  
  #include "demo_util.hpp"
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
18
  using namespace std;
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
19
  using namespace cv;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
20
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
21
22
23
24
25
26
27
  
  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   代码调通,结果正常输出
28
29
  string get_ipc_url(int gi){
    string ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
30
31
    switch(gi){
      case 0:
881ac79d   Hu Chunming   代码调通,结果正常输出
32
        ipc_url = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
33
34
        break;
      case 1:
881ac79d   Hu Chunming   代码调通,结果正常输出
35
        ipc_url = "rtsp://122.97.218.170:8604/openUrl/V5nXRHa?params=eyJwcm90b2NhbCI6InJ0c3AiLCJjbGllbnRUeXBlIjoib3Blbl9hcGkiLCJleHByaWVUaW1lIjotMSwicHJvdG9jb2wiOiJydHNwIiwiZXhwaXJlVGltZSI6MzAwLCJlbmFibGVNR0MiOnRydWUsImV4cGFuZCI6InN0YW5kYXJkPXJ0c3Amc3RyZWFtZm9ybT1ydHAiLCJhIjoiMTBjZjM4N2JjY2Y5NDg3YzhjNWYzNjE2M2ViMWUyNTJ8MXwwfDEiLCJ0IjoxfQ==";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
36
37
        break;
      case 2:
881ac79d   Hu Chunming   代码调通,结果正常输出
38
        ipc_url = "rtsp://admin:ad123456@192.168.10.166:554/cam/realmonitor?channel=1&subtype=0";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
39
40
        break;
      case 3:
881ac79d   Hu Chunming   代码调通,结果正常输出
41
42
        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   初次提交,代码大体完成编写,完善中
43
44
        break;
      case 4:
881ac79d   Hu Chunming   代码调通,结果正常输出
45
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
46
47
        break;
      case 5:
881ac79d   Hu Chunming   代码调通,结果正常输出
48
        ipc_url = "/data/share/data/公安局老桥头_CVR15F89410_1465819864_1B.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
49
50
        break;
      case 6:
881ac79d   Hu Chunming   代码调通,结果正常输出
51
        ipc_url = "/data/share/data/不带头盔2.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
52
53
        break;
      case 7:
881ac79d   Hu Chunming   代码调通,结果正常输出
54
        ipc_url = "/data/share/data/hczr1.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
55
56
        break;
      case 8:
881ac79d   Hu Chunming   代码调通,结果正常输出
57
        ipc_url = "/data/share/data/燕高路口高点_CVR_2015-12-30_09-00-00_2015-12-30.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
58
59
        break;
      case 9:
881ac79d   Hu Chunming   代码调通,结果正常输出
60
61
        // ipc_url = "/opt/share/data/1-00000002d55_h265.mp4";
        ipc_url = "/data/share/data/duan1.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
62
63
        break;
      case 10:
881ac79d   Hu Chunming   代码调通,结果正常输出
64
        ipc_url = "/data/share/data/gs1-00000001.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
65
66
        break;
      case 11:
881ac79d   Hu Chunming   代码调通,结果正常输出
67
        ipc_url = "/data/share/data/98.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
68
69
        break;
      case 12:
881ac79d   Hu Chunming   代码调通,结果正常输出
70
        ipc_url = "/data/share/data/AV_12345_1_20230108110849847_D_1673147329847729.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
71
72
        break;
      case 13:
881ac79d   Hu Chunming   代码调通,结果正常输出
73
        ipc_url = "/data/share/data/nx_1-00000002.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
74
75
        break;
      case 14:
881ac79d   Hu Chunming   代码调通,结果正常输出
76
        ipc_url = "/data/share/data/nx1-0000001.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
77
78
        break;
      case 15:
881ac79d   Hu Chunming   代码调通,结果正常输出
79
        ipc_url = "/data/share/data/nx1-00000002.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
80
81
        break;
      case 16:
881ac79d   Hu Chunming   代码调通,结果正常输出
82
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
83
84
        break;
      case 17:
881ac79d   Hu Chunming   代码调通,结果正常输出
85
        ipc_url = "/data/share/data/xiancun.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
86
87
        break;
      case 18:
881ac79d   Hu Chunming   代码调通,结果正常输出
88
        ipc_url = "rtsp://192.168.60.146:8554/w_1_out";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
89
90
        break;
      case 19:
881ac79d   Hu Chunming   代码调通,结果正常输出
91
        ipc_url = "/data/share/data/42_44.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
92
93
        break;
      case 20:
881ac79d   Hu Chunming   代码调通,结果正常输出
94
        ipc_url = "/data/share/data/37_70.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
95
96
        break;
      case 21:
881ac79d   Hu Chunming   代码调通,结果正常输出
97
        ipc_url = "/data/share/data/192_25.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
98
99
        break;
      case 22:
881ac79d   Hu Chunming   代码调通,结果正常输出
100
        ipc_url = "/data/share/data/31_4.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
101
102
        break;
      case 23:
881ac79d   Hu Chunming   代码调通,结果正常输出
103
        ipc_url = "/data/share/data/146_192.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
104
105
        break;
      case 24:
881ac79d   Hu Chunming   代码调通,结果正常输出
106
        ipc_url = "/data/share/data/146_187.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
107
108
109
        break;
      case 25:
        // 公安内网
881ac79d   Hu Chunming   代码调通,结果正常输出
110
        ipc_url = "rtsp://192.168.51.200:8554/320202202308231001001002";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
111
112
113
        break;
      case 26:
        // FFmpeg生成的解码错误数据流
881ac79d   Hu Chunming   代码调通,结果正常输出
114
        ipc_url = "rtsp://192.168.10.4:8554/street";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
115
116
        break;
      case 27:
881ac79d   Hu Chunming   代码调通,结果正常输出
117
        ipc_url = "/data/share/data/Street_4k_265.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
118
119
        break;
      case 28:
881ac79d   Hu Chunming   代码调通,结果正常输出
120
        ipc_url = "http://192.168.60.179:10016/公安局老桥头_CVR15F89410_1465819864_1B.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
121
122
        break;
      case 29:
881ac79d   Hu Chunming   代码调通,结果正常输出
123
        ipc_url = "http://192.168.60.179:10016/不带头盔2.mp4";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
124
125
        break;
      case 30:
881ac79d   Hu Chunming   代码调通,结果正常输出
126
        ipc_url = "/data/share/data/149_45.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
127
128
        break;
      case 31:
881ac79d   Hu Chunming   代码调通,结果正常输出
129
        ipc_url = "/data/share/data/146_88.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
130
131
        break;
      case 32:
881ac79d   Hu Chunming   代码调通,结果正常输出
132
        ipc_url = "/data/share/data/141_74.avi";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
133
134
        break;
      default:
881ac79d   Hu Chunming   代码调通,结果正常输出
135
        ipc_url = "/data/share/data/Street.uvf";
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
136
137
        break;
    }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
138
  
881ac79d   Hu Chunming   代码调通,结果正常输出
139
    return ipc_url;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
140
141
  }
  
881ac79d   Hu Chunming   代码调通,结果正常输出
142
  static int nTaskId = 0;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
143
  
881ac79d   Hu Chunming   代码调通,结果正常输出
144
  string createTask(void *handle, int gi, bool bFlag = true){
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
145
146
    task_param tparam;
  
881ac79d   Hu Chunming   代码调通,结果正常输出
147
    tparam.ipc_url = get_ipc_url(gi);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
148
149
150
151
  
    if (bFlag){
      nTaskId = gi;
    }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
152
153
    std::string task_id_str = "test_task_id_" + std::to_string(nTaskId);
    tparam.task_id = task_id_str.c_str();
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
154
155
    nTaskId++;
  
881ac79d   Hu Chunming   代码调通,结果正常输出
156
157
    tparam.result_folder_little = "./res";         //目标快照抠图保存地址
  	tparam.result_folder = "./res";                //目标快照大图保存地址
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
158
159
160
161
162
163
  
    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   初次提交,代码大体完成编写,完善中
164
165
166
    return task_id_str;
  }
  
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
167
168
  void show_result(ObjectData obj)
  {
1fa39585   Hu Chunming   输出结果优化
169
170
171
172
173
174
175
    string str_dir = "./res/result/";
    string file_name = obj.task_id + "_" + to_string(obj.object_id) + "_" + obj.str_ts_ms;
    string data_file_name =  str_dir + file_name + ".txt";
    std::ofstream res_file(data_file_name);
  
    res_file << obj.task_id << "  " << obj.task_frame_count << endl;
    res_file << obj.index << " " << obj.object_id << " " << obj.left << " " << obj.top << " " << obj.right << " " << obj.bottom << " " << obj.confidence << endl;
e721ea0f   Hu Chunming   删除无用的三方库
176
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
177
178
179
180
181
182
    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   删除无用的三方库
183
184
    if (obj.index == 0)
    {// person
1fa39585   Hu Chunming   输出结果优化
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
      res_file << "person:" << endl;
      res_file << "hair: " << hair[obj.hp_cls[0].res_index] << " " << obj.hp_cls[0].res_prob << endl;
      res_file << "hair_color: " << hair_color[obj.hp_cls[1].res_index] << " " << obj.hp_cls[1].res_prob << endl;
      res_file << "eye_glass: " << eye_glass[obj.hp_cls[2].res_index] << " " << obj.hp_cls[2].res_prob << endl;
      res_file << "mask: " << mask[obj.hp_cls[3].res_index] << " " << obj.hp_cls[3].res_prob << endl;
      res_file << "up cloth: " << up_cloth[obj.hp_cls[4].res_index] << " " << obj.hp_cls[4].res_prob << endl;
      res_file << "up_cloth_color: " << up_cloth_color[obj.hp_cls[5].res_index] << " " << obj.hp_cls[5].res_prob << endl;
      res_file << "clothing context: " << clothing_text[obj.hp_cls[6].res_index] << " " << obj.hp_cls[6].res_prob << endl;
      res_file << "down cloth: " << down_cloth[obj.hp_cls[7].res_index] << " " << obj.hp_cls[7].res_prob << endl;
      res_file << "down cloth color: " << down_cloth_color[obj.hp_cls[8].res_index] << " " << obj.hp_cls[8].res_prob << endl;
      res_file << "bag: " << bag[obj.hp_cls[9].res_index] << " " << obj.hp_cls[9].res_prob << endl;
      res_file << "sex: " << sex[obj.hp_cls[10].res_index] << " " << obj.hp_cls[10].res_prob << endl;
      res_file << "age: " << age[obj.hp_cls[11].res_index] << " " << obj.hp_cls[11].res_prob << endl;
      res_file << "viewpoint: " << viewpoint[obj.hp_cls[12].res_index] << " " << obj.hp_cls[12].res_prob << endl;
      res_file << "umbrella: " << umbrella[obj.hp_cls[13].res_index] << " " << obj.hp_cls[13].res_prob << endl;
      res_file << "hold_baby: " << hold_baby[obj.hp_cls[14].res_index] << " " << obj.hp_cls[14].res_prob << endl;
      res_file << "person state: " << personstate[obj.hp_cls[15].res_index] << " " << obj.hp_cls[15].res_prob << endl;
  
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
203
204
205
      for (size_t i = 0; i < HUMANREID_FEATURE_SIZE; i++)
      {
        auto hp_cls = obj.hp_feature[i];
1fa39585   Hu Chunming   输出结果优化
206
        res_file << obj.hp_feature[i] << " ";
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
207
      }
1fa39585   Hu Chunming   输出结果优化
208
      res_file << endl;
e721ea0f   Hu Chunming   删除无用的三方库
209
210
211
    } 
    else if (obj.index >= 4 && obj.index <= 8)
    {// vehicle
1fa39585   Hu Chunming   输出结果优化
212
213
214
215
216
217
      res_file << "vehicle:" << endl;
      if (obj.vehicle_color_index >= 0)
      {
        res_file << "color:" << vehicle_color[obj.vehicle_color_index] << " " << obj.vehicle_color_prob << endl;
      }
      
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
218
219
220
      for (size_t i = 0; i < obj.vec_vpd_cls.size(); i++)
      {
        auto info = obj.vec_vpd_cls[i];
1fa39585   Hu Chunming   输出结果优化
221
222
223
224
        if (info.index >= 0)
        {
          res_file << vechicle_pendant[info.index] << " " << info.confidence << " " << info.left_ << " " << info.top_ << " " << info.width_ << " " << info.height_ << endl;
        }
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
225
226
227
228
229
230
231
  
        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;
1fa39585   Hu Chunming   输出结果优化
232
      res_file << "plate:" << plate_info.left_ << " " << plate_info.top_ << " " << plate_info.width_ << " " << plate_info.height_ << " " << plate_info.detect_score << endl;
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
233
234
235
      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);
1fa39585   Hu Chunming   输出结果优化
236
      res_file << "plate number:" ;
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
237
238
      for (size_t i = 0; i < 8; i++)
      {
1fa39585   Hu Chunming   输出结果优化
239
        res_file << plate_info.recg[i].character << " " << plate_info.recg[i].maxprob << " ";
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
240
      }
1fa39585   Hu Chunming   输出结果优化
241
242
243
244
      res_file << endl;
      res_file << "num_score:" << plate_info.num_score << endl;
      res_file << "type:" << plate_type[plate_info.type] << endl;
      res_file << "state:" << plate_state[plate_info.state] << " " << plate_info.state_score << endl;
e721ea0f   Hu Chunming   删除无用的三方库
245
    }
1fa39585   Hu Chunming   输出结果优化
246
247
  
    res_file.close();
e721ea0f   Hu Chunming   删除无用的三方库
248
    
1fa39585   Hu Chunming   输出结果优化
249
    string result_path = str_dir + file_name + ".jpg";
1de90182   Hu Chunming   修复特征坐标跟原图坐标不相符的问题
250
251
    cv::imwrite(result_path, image);
    image.release();
ffd1e48a   Hu Chunming   实现结果回调,完成第一版
252
  }
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
253
254
255
256
  
  void test_gpu(int gpuID){
      tsl_aiplatform_param vptParam;
      vptParam.gpuid = gpuID;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
257
258
259
260
261
262
263
264
      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   实现结果回调,完成第一版
265
266
      vptParam.result_cbk = show_result;
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
267
268
269
270
271
272
273
274
275
      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   修复特征坐标跟原图坐标不相符的问题
276
277
      CreateResultFolder("./res/result", "");
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
278
279
280
281
282
283
284
285
    // 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   代码调通,结果正常输出
286
    createTask(handle, 4, false);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
287
288
289
290
291
292
  
      while (getchar() != 'q');
  
      tsl_aiplatform_release(&handle);
  }
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
  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   初次提交,代码大体完成编写,完善中
312
313
314
315
316
  
      printf("Done.\n"); 
  
      return 0;
  }