Commit ffd1e48aeaf21953e2f98a9d9a9e978522587864
1 parent
d5345ee9
实现结果回调,完成第一版
Showing
6 changed files
with
17 additions
and
182 deletions
src/ai_platform/header.h
@@ -136,6 +136,8 @@ enum ai_log_level { | @@ -136,6 +136,8 @@ enum ai_log_level { | ||
136 | }; | 136 | }; |
137 | 137 | ||
138 | 138 | ||
139 | +typedef void(*ResultData_CALLBACK)(ObjectData obj); | ||
140 | + | ||
139 | //VPT初始化参数 | 141 | //VPT初始化参数 |
140 | typedef struct tsl_aiplatform_param { | 142 | typedef struct tsl_aiplatform_param { |
141 | int gpuid; //指定显卡id | 143 | int gpuid; //指定显卡id |
@@ -145,6 +147,8 @@ typedef struct tsl_aiplatform_param { | @@ -145,6 +147,8 @@ typedef struct tsl_aiplatform_param { | ||
145 | char *log_path; //日志文件路径 | 147 | char *log_path; //日志文件路径 |
146 | int log_days; //日志保存周期 | 148 | int log_days; //日志保存周期 |
147 | double log_mem; //每个日志最大大小 | 149 | double log_mem; //每个日志最大大小 |
150 | + | ||
151 | + ResultData_CALLBACK result_cbk; | ||
148 | } tsl_aiplatform_param; | 152 | } tsl_aiplatform_param; |
149 | 153 | ||
150 | #endif // __AI_PLATFORM_HEADER__ | 154 | #endif // __AI_PLATFORM_HEADER__ |
151 | \ No newline at end of file | 155 | \ No newline at end of file |
src/ai_platform/mvpt.cpp
@@ -92,6 +92,8 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){ | @@ -92,6 +92,8 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){ | ||
92 | 92 | ||
93 | m_devId = vptParam.gpuid; | 93 | m_devId = vptParam.gpuid; |
94 | 94 | ||
95 | + m_result_cbk = vptParam.result_cbk; | ||
96 | + | ||
95 | string models_dir = vptParam.models_dir; | 97 | string models_dir = vptParam.models_dir; |
96 | 98 | ||
97 | VPTProcess_PARAM vparam; | 99 | VPTProcess_PARAM vparam; |
@@ -536,7 +538,7 @@ void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { | @@ -536,7 +538,7 @@ void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { | ||
536 | 538 | ||
537 | TaskInfo* info = m_task_manager.GetTaskInfo(obj_key.video_id); | 539 | TaskInfo* info = m_task_manager.GetTaskInfo(obj_key.video_id); |
538 | 540 | ||
539 | - string result_folder = info->result_folder + "/snapshot";//todo | 541 | + string result_folder = info->result_folder + "/snapshot"; |
540 | string result_folder_little = info->result_folder_little + "/snapshot_lite"; | 542 | string result_folder_little = info->result_folder_little + "/snapshot_lite"; |
541 | 543 | ||
542 | if (!result_folder.empty()) { | 544 | if (!result_folder.empty()) { |
@@ -578,7 +580,7 @@ void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { | @@ -578,7 +580,7 @@ void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) { | ||
578 | bool bSaved = save_obj_pic(res_obj); | 580 | bool bSaved = save_obj_pic(res_obj); |
579 | if (bSaved) | 581 | if (bSaved) |
580 | { | 582 | { |
581 | - // todo 回调函数抛出结果给上层 | 583 | + m_result_cbk(res_obj); |
582 | } | 584 | } |
583 | 585 | ||
584 | m_snapshot_reprocessing->release_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, true); | 586 | m_snapshot_reprocessing->release_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, true); |
src/ai_platform/mvpt.h
@@ -92,6 +92,8 @@ private: | @@ -92,6 +92,8 @@ private: | ||
92 | 92 | ||
93 | JpegUtil jpegUtil; | 93 | JpegUtil jpegUtil; |
94 | 94 | ||
95 | + ResultData_CALLBACK m_result_cbk; | ||
96 | + | ||
95 | void *skt_handle = nullptr;//授权 | 97 | void *skt_handle = nullptr;//授权 |
96 | atlas_licence_check_param check_param;//授权 | 98 | atlas_licence_check_param check_param;//授权 |
97 | int check_label{-1};//授权 -1=未授权 0=授权 1=授权check日已经check成功(每月一次check) | 99 | int check_label{-1};//授权 -1=未授权 0=授权 1=授权check日已经check成功(每月一次check) |
src/ai_platform/mvpt_process_assist.h
@@ -30,7 +30,6 @@ bool LegalArea(int maxArea, int lastArea, int left, int top, int right, int bott | @@ -30,7 +30,6 @@ bool LegalArea(int maxArea, int lastArea, int left, int top, int right, int bott | ||
30 | bool LegalMinArea(int width, int height, sy_rect min_box); | 30 | bool LegalMinArea(int width, int height, sy_rect min_box); |
31 | void ExpandMargin(int direction_x, int direction_y, int boundary_w, int boundary_h, | 31 | void ExpandMargin(int direction_x, int direction_y, int boundary_w, int boundary_h, |
32 | int &boundary_left, int &boundary_right, int &boundary_top, int &boundary_bottom); | 32 | int &boundary_left, int &boundary_right, int &boundary_top, int &boundary_bottom); |
33 | -void CreateResultFolder(char* resultFolder, const char* jointFolder); | ||
34 | 33 | ||
35 | bool snapshot_legal_inarea(int width, int height); | 34 | bool snapshot_legal_inarea(int width, int height); |
36 | bool snapshot_legal_inarea(sy_rect algor_area, int left, int top, int right, int bottom); | 35 | bool snapshot_legal_inarea(sy_rect algor_area, int left, int top, int right, int bottom); |
src/ai_platform/vpt_proj.cpp1 deleted
1 | -#include <iostream> | ||
2 | -#include <string> | ||
3 | -#include <queue> | ||
4 | -#include <mutex> | ||
5 | -#include <chrono> | ||
6 | -#include <thread> | ||
7 | - | ||
8 | -#include "vpt.h" | ||
9 | - | ||
10 | -#include "acl/acl.h" | ||
11 | -#include "acl/ops/acl_dvpp.h" | ||
12 | - | ||
13 | -#include "../decoder/interface/DecoderManager.h" | ||
14 | -#include "../decoder/interface/utiltools.hpp" | ||
15 | - | ||
16 | -using namespace std; | ||
17 | - | ||
18 | -#define ACL_CALL(ret, expect, errCode)\ | ||
19 | - do {\ | ||
20 | - if (ret != expect) {\ | ||
21 | - if (errCode == 0)\ | ||
22 | - return ret;\ | ||
23 | - else\ | ||
24 | - return errCode;\ | ||
25 | - }\ | ||
26 | - } while(0) | ||
27 | - | ||
28 | - | ||
29 | -string test_uri = "/home/huchunming/data/caishenkezhan.mp4"; | ||
30 | - | ||
31 | -queue<DeviceMemory*> memQueue; | ||
32 | -mutex mem_mutex; | ||
33 | - | ||
34 | -static void postDecoded(const void * userPtr, DeviceMemory* devFrame){ | ||
35 | - AbstractDecoder* decoder = (AbstractDecoder*)userPtr; | ||
36 | - if (decoder!= nullptr) | ||
37 | - { | ||
38 | - } | ||
39 | - | ||
40 | - std::lock_guard<std::mutex> l(mem_mutex); | ||
41 | - memQueue.push(devFrame); | ||
42 | - | ||
43 | - // if(devFrame){ | ||
44 | - // delete devFrame; | ||
45 | - // devFrame = nullptr; | ||
46 | - // } | ||
47 | -} | ||
48 | - | ||
49 | -static void decode_finished_cbk(const void* userPtr){ | ||
50 | - cout << "当前时间戳: " << UtilTools::get_cur_time_ms() << endl; | ||
51 | -} | ||
52 | - | ||
53 | -static void createDvppDecoder(int index, char* devId){ | ||
54 | - DecoderManager* pDecManager = DecoderManager::getInstance(); | ||
55 | - MgrDecConfig config; | ||
56 | - config.name = "dec" + to_string(index); | ||
57 | - config.cfg.uri = test_uri; | ||
58 | - config.cfg.post_decoded_cbk = postDecoded; | ||
59 | - config.cfg.decode_finished_cbk = decode_finished_cbk; | ||
60 | - config.cfg.force_tcp = true; | ||
61 | - config.dec_type = DECODER_TYPE_DVPP; | ||
62 | - | ||
63 | - config.cfg.gpuid = devId; | ||
64 | - | ||
65 | - AbstractDecoder* decoder = pDecManager->createDecoder(config); | ||
66 | - if (!decoder) | ||
67 | - { | ||
68 | - cout << "创建解码器失败" << endl; | ||
69 | - return ; | ||
70 | - } | ||
71 | - pDecManager->setPostDecArg(config.name, decoder); | ||
72 | - pDecManager->setFinishedDecArg(config.name, decoder); | ||
73 | - pDecManager->startDecodeByName(config.name); | ||
74 | -} | ||
75 | - | ||
76 | - | ||
77 | -int main(){ | ||
78 | - cout << vpt_get_version() << endl; | ||
79 | - | ||
80 | - vpt_param param; | ||
81 | - | ||
82 | - // param.modelNames = "vtp0716x.om"; | ||
83 | - param.modelNames = "../models/vpt0715_310p.om"; | ||
84 | - param.threshold = 0.4; | ||
85 | - param.devId = 0; | ||
86 | - param.isTrk = false; | ||
87 | - | ||
88 | - ACL_CALL(aclInit(nullptr), ACL_ERROR_NONE, 1); | ||
89 | - ACL_CALL(aclrtSetDevice(param.devId), ACL_ERROR_NONE, 1); | ||
90 | - aclrtContext ctx; | ||
91 | - ACL_CALL(aclrtCreateContext(&ctx, param.devId), ACL_ERROR_NONE, 1); | ||
92 | - | ||
93 | - void* handle = nullptr; | ||
94 | - int ret = vpt_init(&handle, param); | ||
95 | - if(ret != 0){ | ||
96 | - printf("init error \n"); | ||
97 | - return -1; | ||
98 | - } | ||
99 | - | ||
100 | - createDvppDecoder(0,"0"); | ||
101 | - | ||
102 | - DecoderManager* pDecManager = DecoderManager::getInstance(); | ||
103 | - const int batchsize = 1; | ||
104 | - int index = 0; | ||
105 | - while (pDecManager->isRunning("dec0")) | ||
106 | - { | ||
107 | - if(index > 30){ | ||
108 | - break; | ||
109 | - } | ||
110 | - if(memQueue.size() <= 0){ | ||
111 | - std::this_thread::sleep_for(std::chrono::milliseconds(10)); | ||
112 | - continue; | ||
113 | - } | ||
114 | - | ||
115 | - vector<DeviceMemory*> vec_mem; | ||
116 | - | ||
117 | - vector<sy_img> imgs; | ||
118 | - | ||
119 | - std::lock_guard<std::mutex> l(mem_mutex); | ||
120 | - for (int b = 0; b < batchsize; b++) { | ||
121 | - DeviceMemory* mem = memQueue.front(); | ||
122 | - sy_img img; | ||
123 | - img.w_ = mem->getWidth(); | ||
124 | - img.h_ = mem->getHeight(); | ||
125 | - img.data_ = mem->getMem(); | ||
126 | - imgs.push_back(img); | ||
127 | - vec_mem.push_back(mem); | ||
128 | - memQueue.pop(); | ||
129 | - } | ||
130 | - | ||
131 | - if(vec_mem.size() <= 0){ | ||
132 | - std::this_thread::sleep_for(std::chrono::milliseconds(3)); | ||
133 | - continue; | ||
134 | - } | ||
135 | - | ||
136 | - ACL_CALL(aclrtSetCurrentContext(ctx), ACL_ERROR_NONE, 1); | ||
137 | - vpt_result* results; | ||
138 | - int ret = vpt_batch(handle, imgs.data(), imgs.size(), &results); | ||
139 | - | ||
140 | - for(int batchIdx = 0; batchIdx < batchsize; batchIdx ++){ | ||
141 | - printf("debug det num:%d\n",results[batchIdx].obj_count_); | ||
142 | - } | ||
143 | - | ||
144 | - for(int i=0;i < vec_mem.size(); i++){ | ||
145 | - DeviceMemory* mem = vec_mem[i]; | ||
146 | - delete mem; | ||
147 | - mem = nullptr; | ||
148 | - } | ||
149 | - vec_mem.clear(); | ||
150 | - | ||
151 | - index ++; | ||
152 | - } | ||
153 | - | ||
154 | - pDecManager->closeDecoderByName("dec0"); | ||
155 | - | ||
156 | - pDecManager->closeAllDecoder(); | ||
157 | - | ||
158 | - ret = aclrtDestroyContext(ctx); | ||
159 | - if(ret != ACL_ERROR_NONE){ | ||
160 | - printf("aclrtDestroyContext failed ! \n"); | ||
161 | - } | ||
162 | - | ||
163 | - | ||
164 | - | ||
165 | - aclFinalize(); | ||
166 | -} | ||
167 | \ No newline at end of file | 0 | \ No newline at end of file |
src/demo/demo.cpp
@@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
5 | #include <string.h> | 5 | #include <string.h> |
6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
7 | #include <unistd.h> | 7 | #include <unistd.h> |
8 | +#include <iostream> | ||
8 | 9 | ||
9 | using namespace std; | 10 | using namespace std; |
10 | 11 | ||
@@ -154,19 +155,10 @@ string createTask(void *handle, int gi, bool bFlag = true){ | @@ -154,19 +155,10 @@ string createTask(void *handle, int gi, bool bFlag = true){ | ||
154 | return task_id_str; | 155 | return task_id_str; |
155 | } | 156 | } |
156 | 157 | ||
157 | - | ||
158 | -// void test_snapshot(void *handle){ | ||
159 | -// task_param tparam; | ||
160 | -// tparam.ipc_url = "rtsp://admin:ad123456@192.168.60.165:554/cam/realmonitor?channel=1&subtype=0"; | ||
161 | -// std::string task_id_str = "test_task_id_default" ; | ||
162 | -// tparam.task_id = task_id_str.c_str(); | ||
163 | - | ||
164 | - | ||
165 | -// const int result_code = screenshot_task(handle, tparam); | ||
166 | -// if (result_code != 0) | ||
167 | -// printf("[Error]: "); | ||
168 | -// printf("--- task_id: %s result code: %d\n", tparam.task_id, result_code); | ||
169 | -// } | 158 | +void show_result(ObjectData obj) |
159 | +{ | ||
160 | + cout << obj.index << endl; | ||
161 | +} | ||
170 | 162 | ||
171 | void test_gpu(int gpuID){ | 163 | void test_gpu(int gpuID){ |
172 | tsl_aiplatform_param vptParam; | 164 | tsl_aiplatform_param vptParam; |
@@ -179,6 +171,8 @@ void test_gpu(int gpuID){ | @@ -179,6 +171,8 @@ void test_gpu(int gpuID){ | ||
179 | vptParam.log_mem = 64 * 1024 * 1024; // 64MB. | 171 | vptParam.log_mem = 64 * 1024 * 1024; // 64MB. |
180 | vptParam.log_path = "logs/main.log"; | 172 | vptParam.log_path = "logs/main.log"; |
181 | 173 | ||
174 | + vptParam.result_cbk = show_result; | ||
175 | + | ||
182 | void *handle; | 176 | void *handle; |
183 | int flag = tsl_aiplatform_init(&handle, vptParam); | 177 | int flag = tsl_aiplatform_init(&handle, vptParam); |
184 | if (0 != flag) { | 178 | if (0 != flag) { |