fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1
2
|
#include "MultiSourceProcess.h"
|
6e2b079e
Hu Chunming
编译通过
|
3
4
5
6
7
8
|
#ifdef POST_USE_RABBITMQ
#include "../helpers/gen_json.hpp"
#endif
#include "../helpers/logger.hpp"
#include "../helpers/os_helper.hpp"
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
9
10
11
|
#include "authority.h"
|
450989b5
Hu Chunming
跑通算法
|
12
13
|
#include "NvJpegEncoder.hpp"
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#ifdef AUTHORIZATION
#include <boost/thread.hpp>
#ifdef _MSC_VER
#define productSN "4ACFCBE67EF645AB8F0B4CFCDD1926F1" // WINDOWS
#else
#define productSN "4FD45501D5104F0C8C4BE530FC872F46" // LINUX
#endif
#endif
#define SKIP_FRAME 5
/**
* 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况
* */
void decoded_cbk(const void * userPtr, AVFrame * gpuFrame){
decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
if (ptr!= nullptr)
{
CMultiSourceProcess* _this = (CMultiSourceProcess*)ptr->opaque;
if(nullptr != _this){
|
78676b64
Hu Chunming
删除无用代码
|
35
|
_this->post_decode_thread(ptr, gpuFrame);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
}
}
}
void decode_finished_cbk(const void * userPtr){
decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
if (ptr!= nullptr)
{
CMultiSourceProcess* _this = (CMultiSourceProcess*)ptr->opaque;
if(nullptr != _this){
_this->decode_finished_thread(ptr->_cur_task_param);
}
}
}
|
31a1e592
Hu Chunming
完成接口匹配
|
51
52
|
CMultiSourceProcess::CMultiSourceProcess(){
m_bfinish = false;
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
53
|
m_bProcessEnd = false;
|
31a1e592
Hu Chunming
完成接口匹配
|
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
}
CMultiSourceProcess::~CMultiSourceProcess(){
}
/* 授权校验线程 */
#ifdef AUTHORIZATION
void CMultiSourceProcess::check_thread() {
int res = -1;
#ifndef _MSC_VER
char wtime[15];
memset(wtime, 0, 15);
char *time = wtime;
#endif
while (1) {
if(m_bfinish){
break;
}
#ifdef _MSC_VER
res = sy_licence(productSN);
#else
res = sy_licence(productSN, &time);
#endif
if (res < 0) {
licence_status = licence_status - 1;
} else {
if (licence_status < 0) {
licence_status = 0;
}
}
std::this_thread::sleep_for(std::chrono::seconds(300));
}
}
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
91
92
93
94
95
|
/* @InitAlgorthim
* @Description: 初始化全局参数 + 根据配置初始化算法模型
*/
int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam) {
licence_status_ = -1;
|
31a1e592
Hu Chunming
完成接口匹配
|
96
97
98
|
m_bfinish = false;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
int ret = SUCCESS;
#ifdef AUTHORIZATION
#ifdef _WIN32
if (SUCCESS == (ret = sy_licence(productSN)))
#elif __linux__
char wtime[15];
memset(wtime, 0, 15);
char *time = wtime;
if (SUCCESS == (ret = sy_licence(productSN, &time)))
#endif //
#else // ifdef AUTHORIZATION
ret = sy_time_check(2023, 2); // license_check(param.auth_license, productSN);//
if (ret == SUCCESS)
#endif // ifdef AUTHORIZATION
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
114
115
|
{
/*初始化全局参数*/
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
116
|
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
117
118
119
120
121
122
123
124
125
126
127
128
|
set_default_logger(LogLevel(vptParam.log_level), "multi_source_video_process", vptParam.log_path, vptParam.log_mem,
vptParam.log_mem);
cuInit(0);
int device_count = 0;
cuDeviceGetCount(&device_count);
if (vptParam.gpuid >= device_count) {
LOG_ERROR("gpu id ge host gpu device num ({} vs {})", vptParam.gpuid, device_count);
return GPUID_PARAM_ERROR;
}
|
78676b64
Hu Chunming
删除无用代码
|
129
130
131
132
133
134
|
// 设置gpuid
gpu_id_ = to_string(vptParam.gpuid);
cudaSetDevice(atoi(gpu_id_.c_str()));
cuda_common::setColorSpace( ITU_709, 0 );
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
135
136
137
138
139
140
141
|
CUdevice dev = 0;
size_t memSize = 0;
dev = vptParam.gpuid;
CUresult rlt = CUDA_SUCCESS;
rlt = cuDeviceTotalMem(&memSize, dev);
|
31a1e592
Hu Chunming
完成接口匹配
|
142
|
double gpu_total_memory = (float)memSize / (1024 * 1024);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
if (gpu_total_memory < 9000) // small gpu memory
section_batch_size_ = 10;
else
section_batch_size_ = 20;
/*初始化各个模块:任务管理、快照处理、快照保存、MQ*/
m_task_param_manager = task_param_manager::getInstance();
m_snapshot_reprocessing = snapshot_reprocessing::getInstance();
m_save_snapshot_reprocessing = new save_snapshot_reprocessing();
#ifdef POST_USE_RABBITMQ
mq_manager_ = new mq::Manager();
#endif
/*初始化各个算法模块*/
/* Init Model */
{
VPTProcess_PARAM param{};
{
param.gpuid = vptParam.gpuid;
// param.threshold = 0.6;
param.threshold = 0.45;
param.max_batch = section_batch_size_;
param.serialize_file = "./serialize_file/FPN_VPT";
param.auth_license = /*vptParam.auth_license*/ "sy_tsl_aiplatform_sdk_2021";
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
}
VPT_Handle_ = nullptr;
if (0 != (ret = VPT_Init(VPT_Handle_, param))) {
LOG_FATAL("Init VPT failed");
return ret;
}
#ifdef WITH_SECOND_PROCESS
if (!takeaway_member_.init(vptParam.gpuid)) {
LOG_FATAL("Init TakeAwayMember failed");
return FALSE;
}
if (!fight_fall_cls_.init(vptParam.gpuid)) {
LOG_FATAL("Init FightFellCls failed");
return FALSE;
}
if (m_human_gather_statistics.human_gather_statistics_init() != 0) {
LOG_FATAL("Init Human Gather failed");
return FALSE;
}
{
hat_callsmoke_vestuniform_det_param init_param;
{
init_param.gpuid = vptParam.gpuid;
init_param.mode = init_param.gpuid >= 0 ? DEVICE_GPU : DEVICE_CPU;
init_param.engine = ENGINE_TENSORRT;
init_param.max_batch = section_batch_size_;
init_param.auth_license = "shiyu_zhian_2021_jetson_sdk";
init_param.serialize_file = "./serialize_file/pedestrian_safety_det";
}
if (!pedestrian_safety_detector_.init(init_param)) {
LOG_FATAL("Init Pedestrian Safety failure");
return FALSE;
}
}
{
// pedestrian_vehicle_retrograde_.init()
}
#endif
#ifdef WITH_FACE_DET_SS
// 人脸检测初始化
facedet_ai_engine_param fd_param;
fd_param.sdk_param.gpuid = vptParam.gpuid;
fd_param.sdk_param.mode = DEVICE_GPU;
fd_param.sdk_param.log = SY_CONFIG_CLOSE;
fd_param.sdk_param.thresld = 0.6;
fd_param.sdk_param.facial_fea_point_config = SY_CONFIG_OPEN;
fd_param.sdk_param.pose_config = SY_CONFIG_OPEN;
fd_param.sdk_param.quality_config = SY_CONFIG_CLOSE;
fd_param.sdk_param.score_config = SY_CONFIG_OPEN;
fd_param.sdk_param.max_result_count = 50;
fd_param.sdk_param.max_batch_size_detect = section_batch_size_;
fd_param.sdk_param.max_batch_size_ldmk = section_batch_size_;
fd_param.sdk_param.max_batch_size_score = section_batch_size_;
fd_param.sdk_param.max_batch_size_pose = section_batch_size_;
fd_param.sdk_param.serialize_file = "./serialize_file/FD";
fd_param.sdk_param.auth_license = "sy_tsl_aiplatform_sdk_2021";
if (0 > m_face_det_ai_engine.init_ai_engine(fd_param)) {
LOG_FATAL("Init face detection failed");
return FALSE;
}
#endif
}
if (ret == SUCCESS) //
{
licence_status_ = 0;
#ifdef AUTHORIZATION
|
31a1e592
Hu Chunming
完成接口匹配
|
244
245
246
247
248
249
250
251
|
pthread_create(&m_authority_check_thread,0,
[](void* arg)
{
CMultiSourceProcess* a=(CMultiSourceProcess*)arg;
a->check_thread();
return (void*)0;
}
,this);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
252
|
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
|
}
} else {
return AUTHOR_ERROR;
}
#ifdef AUTHORIZATION
#ifdef __linux__
if (wtime) {
delete[] wtime;
wtime = NULL;
}
#endif // #ifdef __linux__
#endif // #ifdef AUTHORIZATION
|
450989b5
Hu Chunming
跑通算法
|
267
268
269
|
// 启动算法处理线程
startProcessByGpuid();
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
270
271
272
|
return ret;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
273
|
bool CMultiSourceProcess::AddTask(task_param _cur_task_param){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
274
275
276
|
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
|
78676b64
Hu Chunming
删除无用代码
|
277
278
|
const char* task_id = _cur_task_param.task_id;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
279
|
MgrDecConfig config;
|
78676b64
Hu Chunming
删除无用代码
|
280
|
config.name = task_id;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
281
282
283
284
|
config.cfg.uri = _cur_task_param.ipc_url;
config.cfg.post_decoded_cbk = decoded_cbk;
config.cfg.decode_finished_cbk = decode_finished_cbk;
config.cfg.force_tcp = true; // rtsp用tcp
|
31a1e592
Hu Chunming
完成接口匹配
|
285
|
config.cfg.gpuid = gpu_id_;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
286
287
288
289
290
291
292
293
294
|
FFNvDecoder* dec = pDecManager->createDecoder(config);
if (!dec)
{
return false;
}
decode_cbk_userdata* userPtr = new decode_cbk_userdata;
userPtr->_cur_task_param = _cur_task_param;
userPtr->opaque = this;
|
78676b64
Hu Chunming
删除无用代码
|
295
|
userPtr->opaque1 = dec;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
296
297
|
pDecManager->setUserPtr(config.name, userPtr);
// pDecManager->setDecKeyframe(config.name, true); // 只对关键帧解码
|
78676b64
Hu Chunming
删除无用代码
|
298
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
299
300
301
302
|
// 保存新添加任务的配置参数
m_task_param_manager->add_task_param(task_id, _cur_task_param);
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
303
304
|
int input_image_width = 0;
int input_image_height = 0;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
305
|
pDecManager->getResolution(config.name, input_image_width, input_image_height);
|
78676b64
Hu Chunming
删除无用代码
|
306
|
cout << "task_id: " << task_id << " width: " << input_image_width << " height: " << input_image_height << endl;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
307
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
308
309
310
|
#ifdef WITH_SECOND_PROCESS
/* 如果开启了行人 机动车非法闯入功能 生成闯入区域mask */
auto new_task_algor_param = m_task_param_manager->get_task_other_param(task_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
311
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
312
313
314
315
|
if (new_task_algor_param->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != new_task_algor_param->end()) {
pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region(
task_id, algorithm_type_t::PEDESTRIAN_TRESPASS, input_image_width, input_image_height);
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
316
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
317
318
319
320
321
322
323
|
if (new_task_algor_param->find(algorithm_type_t::VEHICLE_TRESPASS) != new_task_algor_param->end()) {
pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region(
task_id, algorithm_type_t::VEHICLE_TRESPASS, input_image_width, input_image_height);
}
#endif
((save_snapshot_reprocessing *)m_save_snapshot_reprocessing)->add_newtask(task_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
324
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
325
326
327
|
// 人车物跟踪
if (task_has_vpt_algor(task_id))
AddTaskTracker(VPT_Handle_, task_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
328
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
329
330
331
332
333
|
// 人脸跟踪
#ifdef WITH_FACE_DET_SS
if (task_has_face_algor(task_id))
m_face_det_ai_engine.operator_tracker(task_id, ADDTASK, SKIP_FRAME); // 跳帧数暂时写死
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
334
|
|
78676b64
Hu Chunming
删除无用代码
|
335
336
337
|
// 所有参数都准备好之后再启动解码
pDecManager->startDecodeByName(config.name);
cout << "started task: " << config.name << endl;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
338
339
|
}
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
340
|
// 启动算法处理线程
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
341
342
343
344
345
346
347
348
349
|
void CMultiSourceProcess::startProcessByGpuid(){
pthread_create(&m_gpuProcessthread,0,
[](void* arg)
{
CMultiSourceProcess* process = (CMultiSourceProcess*)arg ;
process->algorthim_process_thread();
return (void*)0;
}
,this);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
350
351
|
}
|
78676b64
Hu Chunming
删除无用代码
|
352
|
void CMultiSourceProcess::post_decode_thread(decode_cbk_userdata* userPtr, AVFrame * gpuFrame){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
353
|
|
78676b64
Hu Chunming
删除无用代码
|
354
355
356
357
358
|
decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
FFNvDecoder* dec = (FFNvDecoder*)ptr->opaque1;
if (gpuFrame->format == AV_PIX_FMT_CUDA && dec != nullptr){
|
450989b5
Hu Chunming
跑通算法
|
359
|
// cout << "decode task: " << dec->getName() << " gpuid: " << gpu_id_ << endl;
|
78676b64
Hu Chunming
删除无用代码
|
360
|
GpuRgbMemory* gpuMem = new GpuRgbMemory(3, gpuFrame->width, gpuFrame->height, dec->getName(), gpu_id_ , true);
|
450989b5
Hu Chunming
跑通算法
|
361
362
363
364
365
366
|
if (gpuMem->getMem() == nullptr){
cout << "new GpuRgbMemory failed !!!" << endl;
return;
}
|
78676b64
Hu Chunming
删除无用代码
|
367
368
369
370
371
372
373
374
375
376
377
378
|
// cudaSetDevice(atoi(gpu_id_.c_str()));
// cuda_common::setColorSpace( ITU_709, 0 );
cudaError_t cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], gpuMem->getMem(), gpuFrame->width, gpuFrame->height);
cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
cout << "CUDAToBGR failed !!!" << endl;
return;
}
do{
if(m_bfinish){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
379
|
break;
|
78676b64
Hu Chunming
删除无用代码
|
380
381
382
383
384
385
386
387
388
389
390
391
|
}
// TODO 本循环需要一个可以手动终止的开关
m_QueueMtx.lock();
if(m_RgbDataList.size() >= 40){
m_QueueMtx.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(1));
continue;
}
m_RgbDataList.push_back(gpuMem);
m_QueueMtx.unlock();
break;
}while (true);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
392
393
394
|
}
}
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
395
|
// 解码线程退出的最后回调的实际任务函数
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
396
|
void CMultiSourceProcess::decode_finished_thread(task_param t_param){
|
31a1e592
Hu Chunming
完成接口匹配
|
397
|
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
|
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
while(true){
if(m_bfinish){
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(5));
std::lock_guard<std::mutex> l(m_QueueMtx);
// 确保 m_RgbDataList 中没有任务数据
for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ++ iter){
GpuRgbMemory* gpuMem = *iter;
if(gpuMem->getId() == t_param.task_id){
continue;
}
}
// 确保 对应解码器中没有缓存的数据
if (pDecManager->getCachedQueueLength(t_param.task_id) > 0){
continue;
}
// 确保对应任务没有正在执行算法的数据
if (m_bProcessEnd){
// 任务结束,关闭跟踪
if (!FinishTaskTracker(VPT_Handle_, t_param.task_id))
LOG_ERROR("Finish VPT Tracker failed, task_id: {}", t_param.task_id);
finish_task(t_param.task_id,false);
break;
}
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
|
}
bool CMultiSourceProcess::task_has_vpt_algor(const std::string &task_id){
//! TODO: create enum iterator.
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
if (algor_map == nullptr)
return false;
return (algor_map->find(algorithm_type_t::HUMAN_GATHER) != algor_map->end() ||
algor_map->find(algorithm_type_t::HUMAN_SNAPSHOT) != algor_map->end() ||
algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT) != algor_map->end() ||
algor_map->find(algorithm_type_t::SMOKING_DET) != algor_map->end() ||
algor_map->find(algorithm_type_t::NO_REFLECTIVE_CLOTHING) != algor_map->end() ||
algor_map->find(algorithm_type_t::NO_SAFETY_HELMET) != algor_map->end() ||
algor_map->find(algorithm_type_t::CALL_PHONE_DET) != algor_map->end() ||
algor_map->find(algorithm_type_t::VEHICLE_SNAPSHOT) != algor_map->end() ||
algor_map->find(algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION) != algor_map->end() ||
algor_map->find(algorithm_type_t::PEDESTRIAN_FALL) != algor_map->end() ||
algor_map->find(algorithm_type_t::PEDESTRIAN_FIGHT) != algor_map->end() ||
algor_map->find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != algor_map->end() ||
algor_map->find(algorithm_type_t::VEHICLE_RETROGRADE) != algor_map->end() ||
algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end() ||
algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end());
}
bool CMultiSourceProcess::task_has_face_algor(const std::string &task_id){
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
return algor_map->find(algorithm_type_t::FACE_SNAPSHOT) != algor_map->end();
}
void CMultiSourceProcess::cuda_free_wrap(sy_img &img) {
CHECK(cudaFree(img.data_)) {
img.c_ = 0;
img.h_ = 0;
img.w_ = 0;
img.data_ = nullptr;
}
}
// 算法处理函数,由算法线程调用
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
474
|
void CMultiSourceProcess::algorthim_process_thread(){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
475
|
|
450989b5
Hu Chunming
跑通算法
|
476
477
|
cudaSetDevice(atoi(gpu_id_.c_str()));
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
478
|
map<string, int> task_id_to_n_frame;
|
450989b5
Hu Chunming
跑通算法
|
479
480
|
int sum = 0;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
481
|
while(true){
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
482
|
m_bProcessEnd = true;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
483
484
485
486
487
488
|
/* step1. 授权check */
if (licence_status_ <= -3) {
LOG_FATAL("authority failed!");
break;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
489
490
491
492
|
if(m_bfinish){
break;
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
493
494
|
/* step5. 凑齐的解码数据 拼batch */
m_QueueMtx.lock();
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
495
|
m_bProcessEnd = false;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
496
|
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
497
|
vector<GpuRgbMemory*> vec_gpuMem;
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
498
|
for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ++ iter){
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
499
|
GpuRgbMemory* gpuMem = *iter;
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
500
501
502
503
|
vec_gpuMem.push_back(gpuMem);
iter = m_RgbDataList.erase(iter);
if(vec_gpuMem.size() >= 20){
break;
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
504
|
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
505
|
}
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
506
507
|
int batch_size = vec_gpuMem.size();
|
78676b64
Hu Chunming
删除无用代码
|
508
509
510
511
512
|
if (batch_size <= 0){
m_QueueMtx.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(1));
continue;
}
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
513
|
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
514
515
|
vector<string> task_list;
sy_img *batch_img = new sy_img[batch_size];
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
516
|
for (size_t i = 0; i < batch_size; i++){
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
517
|
GpuRgbMemory* gpuMem = vec_gpuMem[i];
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
518
519
520
|
batch_img[i].set_data(gpuMem->getWidth(), gpuMem->getHeight(), gpuMem->getChannel(), gpuMem->getMem());
task_list.push_back(gpuMem->getId());
++task_id_to_n_frame[gpuMem->getId()];
|
450989b5
Hu Chunming
跑通算法
|
521
522
523
524
|
// string path = "/home/cmhu/data2/test/" + gpuMem->getId() + "_" + to_string(sum) + ".jpg";
// saveJpeg(path.c_str(), gpuMem->getMem(), gpuMem->getWidth(), gpuMem->getHeight(), nullptr); // 验证 CUDAToRGB
// sum ++;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
|
}
m_QueueMtx.unlock();
// VPT 检测
algorthim_vpt(task_list, batch_img);
#ifdef WITH_FACE_DET_SS
algorthim_face_detect(task_list, batch_img);
#endif
// 清理显存
for (size_t i = 0; i < vec_gpuMem.size(); i++){
GpuRgbMemory* gpuMem = vec_gpuMem[i];
delete gpuMem;
gpuMem = nullptr;
}
vec_gpuMem.clear();
if (batch_img != nullptr) {
delete[] batch_img;
batch_img = nullptr;
}
}
#ifdef WITH_SECOND_PROCESS
{
std::string msg("taskId to n_frame pair has");
for (auto &iter : task_id_to_n_frame)
msg.append(fmt::format("({}: {})", iter.first.c_str(), iter.second));
for (auto &iter : task_id_to_n_frame) {
auto &task_id = iter.first;
pedestrian_safety_detector_.force_release_result(task_id);
pedestrian_vehicle_retrograde_.force_release_result(task_id);
takeaway_member_.force_release_result(task_id);
}
LOG_DEBUG("{}", msg);
}
#endif
|
450989b5
Hu Chunming
跑通算法
|
566
|
|
682bbe39
Hu Chunming
修正任务自然退出死锁的问题
|
567
|
m_bProcessEnd = true;
|
450989b5
Hu Chunming
跑通算法
|
568
|
cout << "algorthim_process_thread end. " << endl;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
569
570
571
572
573
574
575
576
577
578
579
580
581
582
|
}
// VPT 检测
void CMultiSourceProcess::algorthim_vpt(vector<string>& task_list, sy_img *batch_img){
vector<string> vpt_interest_task_id;
std::vector<sy_img> vpt_interest_imgs(0);
for (size_t i = 0; i < task_list.size(); i++){
string task_id = task_list[i];
if (!task_has_vpt_algor(task_id))
continue;
vpt_interest_task_id.push_back(task_id);
|
6e2b079e
Hu Chunming
编译通过
|
583
|
vpt_interest_imgs.emplace_back(batch_img[i]);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
|
}
/* 待检测的图片不为空 开始检测 */
if (!vpt_interest_imgs.empty()) {
vector<vector<int>> deleteObjectID;
deleteObjectID.resize(vpt_interest_task_id.size());
vector<vector<onelevel_det_result>> unUsedResult;
vector<onelevel_det_result> vptResult(0);
/* 一级检测器,内部已完成跟踪操作 */
VPT_Process_GPU2(VPT_Handle_, vpt_interest_imgs.data(), vpt_interest_task_id, vptResult, deleteObjectID, unUsedResult); // do det & track.
/* 每帧都需要进行的操作函数(如人数统计功能) */
everyframe_process(vpt_interest_task_id, vpt_interest_imgs.data(), vptResult); // modified by zsh
/* 根据任务的配置 对目标进行筛选 */
m_snapshot_reprocessing->screen_effective_snapshot2(vpt_interest_task_id, vptResult); //
#ifdef MTASK_DEBUG_
int idx_tmp = 0;
for (auto task_id : vpt_interest_task_id)
LOG_DEBUG("after screen_effective_snapshot task_id {} obj count {}", task_id, vptResult[idx_tmp++].obj_count);
#endif
/* 快照优选(内部可实现不同的快照优选策略) */
m_snapshot_reprocessing->update_bestsnapshot2(vpt_interest_task_id, vpt_interest_imgs.data(),
vptResult, deleteObjectID);
#ifdef WITH_SECOND_PROCESS
/* for pedestrian safety det. 行人安全分析算法模块 */
algorthim_pedestrian_safety(vpt_interest_task_id, vpt_interest_imgs,vptResult);
/* for retrograde & trespass algor 逆行&非法闯入算法模块 */
algorthim_retrograde_trespass(vpt_interest_task_id, vpt_interest_imgs,vptResult,deleteObjectID);
#endif
/* for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)*/
algorithm_snapshot(vpt_interest_task_id, deleteObjectID);
#ifdef WITH_SECOND_PROCESS
/* for fight fall cls. sync code. 打架跌倒算法模块 */
algorithm_fight_fall(vpt_interest_task_id, vpt_interest_imgs, vptResult);
/* for takeaway member. 外卖员分析模块 */
algorithm_takeaway_member_cls(vpt_interest_task_id, vpt_interest_imgs, vptResult);
#endif
}
}
// 行人安全分析算法模块
void CMultiSourceProcess::algorthim_pedestrian_safety(vector<string>& vpt_interest_task_id, vector<sy_img>& vpt_interest_imgs, vector<onelevel_det_result>& vptResult){
|
6e2b079e
Hu Chunming
编译通过
|
630
631
632
|
#ifdef WITH_SECOND_PROCESS
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
633
|
vector<string> interest_task_id;
|
6e2b079e
Hu Chunming
编译通过
|
634
|
vector<onelevel_det_result> interest_vpt_result;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
|
vector<sy_img> interest_imgs(0);
int _idx = 0;
for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
++_task_id_iter, ++_idx) // loop task_id;
{
auto task_id = *_task_id_iter;
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
if (algor_map->find(algorithm_type_t::NO_REFLECTIVE_CLOTHING) != algor_map->end() ||
algor_map->find(algorithm_type_t::NO_SAFETY_HELMET) != algor_map->end() ||
algor_map->find(algorithm_type_t::CALL_PHONE_DET) != algor_map->end() ||
algor_map->find(algorithm_type_t::SMOKING_DET) != algor_map->end()) {
interest_task_id.emplace_back(task_id);
interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
interest_vpt_result.emplace_back(vptResult[_idx]);
}
}
if (!interest_imgs.empty())
pedestrian_safety_detector_.update_mstreams2(interest_task_id, interest_imgs.data(), interest_vpt_result);
|
6e2b079e
Hu Chunming
编译通过
|
656
657
|
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
658
659
660
|
}
// 逆行&非法闯入算法模块
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
661
662
|
void CMultiSourceProcess::algorthim_retrograde_trespass(vector<string>& vpt_interest_task_id, vector<sy_img>& vpt_interest_imgs
, vector<onelevel_det_result>& vptResult ,vector<vector<int>>& deleteObjectID){
|
6e2b079e
Hu Chunming
编译通过
|
663
|
#ifdef WITH_SECOND_PROCESS
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
664
|
vector<string> interest_task_id;
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
665
|
vector<onelevel_det_result> interest_vpt_result;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
666
667
668
|
vector<sy_img> interest_imgs(0);
vector<string> trespass_interest_task_id;
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
669
670
|
vector<onelevel_det_result> trespass_interest_vpt_result;
vector<vector<int>> trespass_interest_deleteobjs;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
|
vector<sy_img> trespass_interest_imgs(0);
int _idx = 0;
for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
++_task_id_iter, ++_idx) // loop task_id;
{
auto task_id = *_task_id_iter;
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
if (algor_map->find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != algor_map->end() ||
algor_map->find(algorithm_type_t::VEHICLE_RETROGRADE) != algor_map->end()) {
interest_task_id.emplace_back(task_id);
interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
interest_vpt_result.emplace_back(vptResult[_idx]);
}
if (algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end() ||
algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end()) {
trespass_interest_task_id.emplace_back(task_id);
trespass_interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
trespass_interest_vpt_result.emplace_back(vptResult[_idx]);
trespass_interest_deleteobjs.emplace_back(deleteObjectID[_idx]);
}
}
if (!interest_imgs.empty())
pedestrian_vehicle_retrograde_.update_mstreams2(interest_task_id, interest_imgs.data(),
interest_vpt_result);
if (!trespass_interest_imgs.empty()) {
pedestrian_vehicle_trespass_.update_mstreams2(
trespass_interest_task_id, trespass_interest_imgs.data(), trespass_interest_vpt_result,
trespass_interest_deleteobjs);
}
|
6e2b079e
Hu Chunming
编译通过
|
705
|
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
|
}
// for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)
void CMultiSourceProcess::algorithm_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) {
auto task_iter = vpt_interest_task_id.begin();
for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
{
for (int &j : deleteObjectID[i]) // loop algor type.
{
OBJ_KEY obj_key = {*task_iter, j};
endframe_obj_process(obj_key, algorithm_type_t::PLACEHOLDER);
}
vector<int>().swap(deleteObjectID[i]); // free.
}
vector<vector<int>>().swap(deleteObjectID); // free.
}
/* 轨迹结束帧需要做的算法模块 */
int CMultiSourceProcess::endframe_obj_process(const OBJ_KEY &obj_key, algorithm_type_t algor_type) {
auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
|
// 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源
if ((task_param_ptr->human_algors.find(algorithm_type_t::HUMAN_SNAPSHOT) != task_param_ptr->human_algors.end() ||
task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_SNAPSHOT) !=
task_param_ptr->vehicle_algors.end() ||
task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT) !=
task_param_ptr->nonmotor_vehicle_algors.end())) {
#ifdef MTASK_DEBUG_
LOG_DEBUG("task_id {} endframe_obj_process obj_id {}", obj_key.video_id, obj_key.obj_id);
#endif
m_save_snapshot_reprocessing->reprocessing_process(obj_key);
} else {
// printf("delete snapshot\n");
m_snapshot_reprocessing->delete_finishtask_snapshot(obj_key.video_id, obj_key.obj_id);
}
#ifdef WITH_SECOND_PROCESS
/* 开启外卖员算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION) !=
task_param_ptr->nonmotor_vehicle_algors.end()) {
auto result = takeaway_member_.get_result_by_objectid(ai_engine_module::obj_key_t{
obj_key.obj_id, obj_key.video_id, algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION});
if (result.get()) {
auto json_str = helpers::gen_json::gen_takeaway_member_cls_json(obj_key.video_id, obj_key.obj_id, result->box,
result->category);
save_snapshot_process(obj_key, algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION, result->ori_img, result->roi_img,
0, json_str);
CHECK(cudaFree((void *)(result->roi_img.data_)));
CHECK(cudaFree((void *)(result->ori_img.data_)));
}
}
/* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) !=
task_param_ptr->human_algors.end() ||
task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) !=
task_param_ptr->vehicle_algors.end()) {
auto func_wrap = [&](const algorithm_type_t &algor_type) {
auto results = pedestrian_vehicle_retrograde_.get_results_by_id(
ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type});
if (results) {
bool flag_pRetroGrade{true}, flag_vRetroGrade{true}; // modified by zsh
for (unsigned idx = 0; idx < results->size(); ++idx) {
auto &result = results->at(idx);
// modified by zsh 一个id一种事件只报警一次------------------------------------------------------------------
if(algor_type==algorithm_type_t::PEDESTRIAN_RETROGRADE && flag_pRetroGrade == true) {
auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_pRetroGrade = false;
}
if(algor_type==algorithm_type_t::VEHICLE_RETROGRADE && flag_vRetroGrade == true) {
auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_vRetroGrade = false;
}
// -------------------------------------------------------------------------------------------------------
if(0) {
auto &&json_str =
helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true,
result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
}
if (result.roi_img.data_ != nullptr) {
if (result.roi_img_is_in_gpu) {
LOG_DEBUG("free roi gpu memory.");
CHECK(cudaFree((void *)(result.roi_img.data_)))
}
result.roi_img.data_ = nullptr;
}
if (result.ori_img.data_ != nullptr) {
if (result.ori_img_is_in_gpu) {
LOG_DEBUG("free ori gpu memory.");
CHECK(cudaFree((void *)(result.ori_img.data_)))
}
result.ori_img.data_ = nullptr;
}
}
}
};
if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) !=
task_param_ptr->human_algors.end())
func_wrap(algorithm_type_t::PEDESTRIAN_RETROGRADE);
if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) !=
task_param_ptr->vehicle_algors.end())
func_wrap(algorithm_type_t::VEHICLE_RETROGRADE);
}
/* 开启行人&机动车非法闯入算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_TRESPASS) != task_param_ptr->human_algors.end() ||
task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TRESPASS) != task_param_ptr->vehicle_algors.end()) {
auto func_wrap = [&](const algorithm_type_t &algor_type) {
auto results = pedestrian_vehicle_trespass_.get_results_by_id(
ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type});
if (results) {
bool flag_pThePass{true}, flag_vThePass{true}; // modified by zsh
for (unsigned idx = 0; idx < results->size(); ++idx) {
auto &result = results->at(idx);
// modified by zsh 一个id一种事件只报警一次------------------------------------------------------------------
if(algor_type==algorithm_type_t::PEDESTRIAN_TRESPASS && flag_pThePass == true) {
auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_pThePass = false;
}
if(algor_type==algorithm_type_t::VEHICLE_TRESPASS && flag_vThePass == true) {
auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_vThePass = false;
}
// -------------------------------------------------------------------------------------------------------
if(0) {
auto &&json_str =
helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
// printf("%s\n", json_str.c_str());
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/idx, json_str, true,
result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
}
if (result.roi_img.data_ != nullptr) {
if (result.roi_img_is_in_gpu)
CHECK(cudaFree((void *)(result.roi_img.data_)))
result.roi_img.data_ = nullptr;
}
if (result.ori_img.data_ != nullptr) {
if (result.ori_img_is_in_gpu)
CHECK(cudaFree((void *)(result.ori_img.data_)))
result.ori_img.data_ = nullptr;
}
}
}
};
if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_TRESPASS) != task_param_ptr->human_algors.end())
func_wrap(algorithm_type_t::PEDESTRIAN_TRESPASS);
if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TRESPASS) != task_param_ptr->vehicle_algors.end())
func_wrap(algorithm_type_t::VEHICLE_TRESPASS);
}
/* 开启行人安全分析算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
if (task_param_ptr->human_algors.find(algorithm_type_t::NO_REFLECTIVE_CLOTHING) !=
task_param_ptr->human_algors.end() ||
task_param_ptr->human_algors.find(algorithm_type_t::NO_SAFETY_HELMET) != task_param_ptr->human_algors.end() ||
task_param_ptr->human_algors.find(algorithm_type_t::CALL_PHONE_DET) != task_param_ptr->human_algors.end() ||
task_param_ptr->human_algors.find(algorithm_type_t::SMOKING_DET) != task_param_ptr->human_algors.end()) {
LOG_TRACE("get result task_id {} obj_id {}", obj_key.video_id, obj_key.obj_id);
auto results = pedestrian_safety_detector_.get_results_by_id(
ai_engine_module::unique_obj_id_t{obj_key.obj_id, obj_key.video_id});
// auto results = std::shared_ptr<ai_engine_module::pedestrian_safety_det::results_data_t>(nullptr);
if (results) {
//! loop per pedestrian safety attribute.
long id = 0;
bool flag_nReflect{true}, flag_nHelmet{true}, flag_cPhone{true}, flag_smoking{true}; // modified by zsh
LOG_DEBUG(" size of results is {}", results->size());
for (auto result : *results) {
for (auto algor_type_iter = result.algorithm_type_seq.begin();
algor_type_iter != result.algorithm_type_seq.end(); ++algor_type_iter) {
auto algor_type = *algor_type_iter;
// modified by zsh 一个id一种事件只报警一次------------------------------------------------------------------
if(algor_type==algorithm_type_t::NO_REFLECTIVE_CLOTHING && flag_nReflect == true) {
auto json_str = helpers::gen_json::gen_pedestrian_safety_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/id++, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_nReflect = false;
LOG_TRACE("PEDESTRIAN task_id {} obj_id {} algor_type {}", obj_key.video_id, obj_key.obj_id, int(algor_type));
}
if(algor_type==algorithm_type_t::NO_SAFETY_HELMET && flag_nHelmet == true) {
auto json_str = helpers::gen_json::gen_pedestrian_safety_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/id++, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_nHelmet = false;
LOG_TRACE("PEDESTRIAN task_id {} obj_id {} algor_type {}", obj_key.video_id, obj_key.obj_id, int(algor_type));
}
if(algor_type==algorithm_type_t::CALL_PHONE_DET && flag_cPhone == true) {
auto json_str = helpers::gen_json::gen_pedestrian_safety_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/id++, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_cPhone = false;
LOG_TRACE("PEDESTRIAN task_id {} obj_id {} algor_type {}", obj_key.video_id, obj_key.obj_id, int(algor_type));
}
if(algor_type==algorithm_type_t::SMOKING_DET && flag_smoking == true) {
auto json_str = helpers::gen_json::gen_pedestrian_safety_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/id++, json_str, true, result.ori_img_is_in_gpu, result.roi_img_is_in_gpu);
flag_smoking = false;
LOG_TRACE("PEDESTRIAN task_id {} obj_id {} algor_type {}", obj_key.video_id, obj_key.obj_id, int(algor_type));
}
// -------------------------------------------------------------------------------------------------------
if(0) {
LOG_TRACE("PEDESTRIAN task_id {} obj_id {} algor_type {}", obj_key.video_id, obj_key.obj_id, int(algor_type));
auto json_str =
helpers::gen_json::gen_pedestrian_safety_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
save_snapshot_process(obj_key, algor_type, result.ori_img, result.roi_img, /*id=*/id++, json_str, true,
result.ori_img_is_in_gpu, result.roi_img_is_in_gpu); }
}
if (result.roi_img.data_ != nullptr) {
if (result.roi_img_is_in_gpu)
CHECK(cudaFree((void *)(result.roi_img.data_)));
result.roi_img.data_ = nullptr;
}
if (result.ori_img.data_ != nullptr) {
if (result.ori_img_is_in_gpu)
CHECK(cudaFree((void *)(result.ori_img.data_)));
result.ori_img.data_ = nullptr;
}
}
}
}
#endif
|
450989b5
Hu Chunming
跑通算法
|
941
|
auto task_other_param_ptr = m_task_param_manager->get_task_other_param(obj_key.video_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
942
943
944
945
946
947
948
949
950
951
952
953
|
/* 开启人脸抓拍分析算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
if (task_other_param_ptr->find(algorithm_type_t::FACE_SNAPSHOT) != task_other_param_ptr->end() &&
algor_type == algorithm_type_t::FACE_SNAPSHOT) {
LOG_TRACE("--- face snapshot will save snapshot IAMGE, task: {} obj: {}.", obj_key.video_id, obj_key.obj_id);
m_save_snapshot_reprocessing->reprocessing_process_face(obj_key);
}
return 0;
}
// 打架跌倒算法模块
void CMultiSourceProcess::algorithm_fight_fall(vector<string>& vpt_interest_task_id, vector<sy_img>& vpt_interest_imgs, vector<onelevel_det_result>& vptResult){
|
6e2b079e
Hu Chunming
编译通过
|
954
955
|
#ifdef WITH_SECOND_PROCESS
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
956
957
|
/* a. find fight or fall classification taskId. */
vector<string> interest_task_id;
|
6e2b079e
Hu Chunming
编译通过
|
958
|
vector<onelevel_det_result> interest_vpt_result;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
959
960
961
962
963
964
965
|
vector<sy_img> interest_imgs(0);
int _idx = 0;
for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
++_task_id_iter, ++_idx) // loop task_id;
{
const auto &task_id = *_task_id_iter;
|
6e2b079e
Hu Chunming
编译通过
|
966
|
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
967
968
969
970
971
972
973
974
975
976
977
|
if (algor_map->find(algorithm_type_t::PEDESTRIAN_FIGHT) != algor_map->end() ||
algor_map->find(algorithm_type_t::PEDESTRIAN_FALL) != algor_map->end()) {
interest_task_id.emplace_back(task_id);
interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
interest_vpt_result.emplace_back(vptResult[_idx]);
}
}
/* b. process result. */
if (!interest_imgs.empty()) {
std::vector<ai_engine_module::fight_fall_cls::result_data_t> results;
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
978
|
fight_fall_cls_.process_mstreams2(interest_task_id, interest_imgs.data(), interest_vpt_result, results);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
|
for (auto &result : results) {
for (auto &res : result.fight_data) {
auto &taskId = res.taskid;
auto json_str = helpers::gen_json::gen_pedestrian_fight_json(res, "");
save_snapshot_process(OBJ_KEY{taskId, (int)*res.objectids.begin()},
algorithm_type_t::PEDESTRIAN_FIGHT, res.ori_img, res.roi_img,
res.id, json_str, false);
cuda_free_wrap(res.roi_img);
}
for (auto &res : result.fall_data) {
auto &taskId = res.taskid;
auto json_str = helpers::gen_json::gen_pedestrian_fall_json(res, "");
save_snapshot_process(OBJ_KEY{taskId, (int)res.objectid},
algorithm_type_t::PEDESTRIAN_FALL, res.ori_img, res.roi_img, res.id,
json_str, false);
cuda_free_wrap(res.roi_img);
}
}
}
|
6e2b079e
Hu Chunming
编译通过
|
999
1000
|
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1001
1002
|
}
|
6e2b079e
Hu Chunming
编译通过
|
1003
1004
|
void CMultiSourceProcess::algorithm_takeaway_member_cls(vector<string>& vpt_interest_task_id, vector<sy_img>& vpt_interest_imgs
, vector<onelevel_det_result>& vptResult){
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1005
|
|
6e2b079e
Hu Chunming
编译通过
|
1006
1007
1008
|
#ifdef WITH_SECOND_PROCESS
/* find takeaway member classification taskId. */
vector<string> interest_task_id;
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
1009
|
vector<onelevel_det_result> interest_vpt_result;
|
6e2b079e
Hu Chunming
编译通过
|
1010
|
vector<sy_img> interest_imgs(0);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1011
|
|
6e2b079e
Hu Chunming
编译通过
|
1012
1013
1014
1015
1016
|
int _idx = 0;
for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
++_task_id_iter, ++_idx) // loop task_id;
{
const auto &task_id = *_task_id_iter;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1017
|
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
1018
|
auto algor_map = m_task_param_manager->get_task_other_param(task_id);
|
6e2b079e
Hu Chunming
编译通过
|
1019
1020
|
if (algor_map->find(algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION) == algor_map->end())
continue;
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1021
|
|
6e2b079e
Hu Chunming
编译通过
|
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
|
interest_task_id.emplace_back(task_id);
interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
interest_vpt_result.emplace_back(vptResult[_idx]);
}
if (!interest_imgs.empty())
takeaway_member_.update_mstreams2(interest_task_id, interest_imgs.data(), interest_vpt_result);
#endif
}
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1032
1033
1034
1035
1036
1037
|
/* 每帧都需要做的算法模块 */
int CMultiSourceProcess::everyframe_process(vector<string> &task_in_play_id, sy_img *images,
vector<onelevel_det_result> &ol_det_result) {
#ifdef WITH_SECOND_PROCESS
/* 人数聚集算法功能 每帧都会获取算法结果 并返回 */
|
28ace279
Hu Chunming
完善 WITH_SECOND_PR...
|
1038
|
auto results = m_human_gather_statistics.human_gather_statistics_process2(task_in_play_id, images, ol_det_result);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
|
for (auto &result : results) {
#ifdef POST_USE_RABBITMQ
auto json_str = helpers::gen_json::gen_human_gather_json(result.task_id, result.boxes, "");
#endif
auto task_id = result.task_id;
auto task_other_params = m_task_param_manager->get_task_other_param(task_id);
const auto &algor_other_params = task_other_params->find(algorithm_type_t::HUMAN_GATHER);
if (algor_other_params == task_other_params->end()) {
LOG_ERROR("[Error] taskId {} not found algor {}", task_id.c_str(), (int)algorithm_type_t::HUMAN_GATHER);
continue;
}
const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
// modified by zsh 图片名添加时间戳----------------------------------------------------------------------------------------
std::string cur_timestamp_ms = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
const std::string fpath_ori = basic_param->result_folder + helpers::os::sep + task_id + "_" +
std::to_string(result.boxes.size()) + "_" + std::to_string(result.id) + "_" + cur_timestamp_ms + ".jpg";
//------------------------------------------------------------------------------------------------------------------------
multi_image_t m_image(*result.img, sy_img());
{
m_image.ori_fpath = fpath_ori;
m_image.ori_data_device = data_device_t::GPU;
}
OBJ_KEY obj_key{task_id, 0};
m_save_snapshot_reprocessing->reprocessing_process_wo_locus(obj_key, m_image, true
#ifdef POST_USE_RABBITMQ
,
json_str
#endif
);
}
#endif
return 0;
}
/* 实现快照保存功能(还未真正保存 将显存图片cp到内存
* 直接保存本地或者存入缓存队列异步保存,保存方式看需求,报警类需要同步保存报警,分析类可异步保存后返回)
*/
bool CMultiSourceProcess::save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type,
const sy_img &ori_img, const sy_img &roi_img, const long long id,
const std::string &json_str, bool enable_async,
const bool ori_img_is_in_gpu, const bool roi_img_is_in_gpu) {
auto task_other_params = m_task_param_manager->get_task_other_param(obj_key.video_id);
const auto &algor_other_params = task_other_params->find(algorithm_type);
if (algor_other_params == task_other_params->end()) {
LOG_ERROR("task_id {} not found {} error", obj_key.video_id, int(algorithm_type));
return false;
}
// TODO
const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
// modified by zsh 图片名添加时间戳----------------------------------------------------------------------------------------
std::string cur_timestamp_ms = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
const std::string fpath_ori = basic_param->result_folder + helpers::os::sep + obj_key.video_id + "_" +
std::to_string(obj_key.obj_id) + "_" + std::to_string(id) + "_" + cur_timestamp_ms + ".jpg";
const std::string fpath_roi = basic_param->result_folder_little + helpers::os::sep + obj_key.video_id + "_" +
std::to_string(obj_key.obj_id) + "_" + std::to_string(id) + "_" + cur_timestamp_ms + ".jpg";
//------------------------------------------------------------------------------------------------------------------------
multi_image_t m_image(ori_img, roi_img);
{
m_image.ori_fpath = fpath_ori;
m_image.roi_fpath = fpath_roi;
m_image.ori_data_device = ori_img_is_in_gpu ? data_device_t::GPU : data_device_t::CPU;
m_image.roi_data_device = roi_img_is_in_gpu ? data_device_t::GPU : data_device_t::CPU;
}
// 调用快照保存后处理模块 将快照保存
m_save_snapshot_reprocessing->reprocessing_process_wo_locus(obj_key, m_image, enable_async
#ifdef POST_USE_RABBITMQ
,
json_str
#endif
);
return true;
}
// 人脸检测抓拍算法模块
void CMultiSourceProcess::algorthim_face_detect(vector<string>& task_list, sy_img *batch_img){
#if 0
unsigned image_size = task_list.size();
std::vector<onelevel_det_result> facedet_result(image_size);
std::vector<std::vector<int>> face_deleteObjectID(image_size);
m_face_det_ai_engine.ai_engine_process_batch2(task_list, batch_img, image_size, facedet_result, face_deleteObjectID);
// 跟踪结果送入快照更新
m_snapshot_reprocessing->update_face_bestsnapshot2(task_list, batch_img, facedet_result, face_deleteObjectID);
#else
vector<string> face_det_interest_task_id;
std::vector<sy_img> face_det_interest_imgs(0);
int _idx = 0;
for (auto _task_id_iter = task_list.begin(); _task_id_iter != task_list.end();
++_task_id_iter, ++_idx) // loop task_id;
{
const auto &task_id = *_task_id_iter;
if (!task_has_face_algor(task_id))
continue;
|
6e2b079e
Hu Chunming
编译通过
|
1141
|
face_det_interest_task_id.emplace_back(task_id);
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
|
face_det_interest_imgs.emplace_back(batch_img[_idx]);
}
if (!face_det_interest_imgs.empty()) {
unsigned image_size = face_det_interest_imgs.size();
// 人脸检测、跟踪
std::vector<onelevel_det_result> facedet_result(image_size);
std::vector<std::vector<int>> face_deleteObjectID(image_size);
|
450989b5
Hu Chunming
跑通算法
|
1153
|
#ifdef WITH_FACE_DET_SS
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1154
1155
|
m_face_det_ai_engine.ai_engine_process_batch2(face_det_interest_task_id,
face_det_interest_imgs.data(), face_det_interest_imgs.size(), facedet_result, face_deleteObjectID);
|
450989b5
Hu Chunming
跑通算法
|
1156
|
#endif
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
|
#if 0
// accum
int32_t accum = 0;
for (const auto &it: facedet_result)
accum += it.obj_count;
LOG_TRACE(" face result has: {}", accum);
#endif
// 跟踪结果送入快照更新
m_snapshot_reprocessing->update_face_bestsnapshot2(
face_det_interest_task_id, face_det_interest_imgs.data(), facedet_result, face_deleteObjectID);
// 保存已结束轨迹的目标
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
|
auto task_iter_face = face_det_interest_task_id.begin(); //debug by zsh
for (int i = 0; i < face_deleteObjectID.size(); i++) {
for (int j = 0; j < face_deleteObjectID[i].size(); ++j) {
OBJ_KEY deleteObj = {*task_iter_face, face_deleteObjectID[i][j]};
LOG_TRACE("[info]22222: {}: {}",*task_iter_face,face_deleteObjectID[i][j]);
endframe_obj_process(deleteObj, algorithm_type_t::FACE_SNAPSHOT);
}
++task_iter_face;
}
for (int i = 0; i < face_deleteObjectID.size(); ++i)
std::vector<int>().swap(face_deleteObjectID[i]);
std::vector<std::vector<int>>().swap(face_deleteObjectID);
std::vector<onelevel_det_result>().swap(facedet_result);
}
#endif
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
1187
1188
|
}
|
450989b5
Hu Chunming
跑通算法
|
1189
|
#ifdef POST_USE_RABBITMQ
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
|
/* MQ队列的初始化 */
int CMultiSourceProcess::AddMqConn(mq_type_t mq_type, rabbitmq_conn_params_t mq_conn_param) {
/* 初始化MQ队列 */
if (!mq_manager_->add_conn(mq_type, mq_conn_param)) {
LOG_ERROR("Connection MQ failed, ip: {} port: {} uname: {} passwd: {}", mq_conn_param.ip, mq_conn_param.port,
mq_conn_param.uname, mq_conn_param.passwd);
return MQ_CONN_ERROR;
}
/* 为报警类 绑定回调 传入mq_manager_.publish 内部直接调用*/
if (mq_type_t::ALARM_MQ == mq_type)
m_save_snapshot_reprocessing->set_callback(
std::bind(&mq::Manager::publish, mq_manager_, mq_type, std::placeholders::_1, true));
return SUCCESS;
}
/* 获取任务的状态 MQ返回 */
int CMultiSourceProcess::GetTaskStatus(const string taskID) {
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
int status = 0;
if(pDecManager->isPausing(taskID)){
status = 2;
}else if(pDecManager->isRunning(taskID)){
status = 1;
}
std::vector<std::string> taskids;
std::vector<int> statues;
taskids.emplace_back(taskID);
statues.emplace_back(status);
if (!taskids.empty()) {
auto json_str = helpers::gen_json::gen_task_status_json(taskids, statues);
|
7d1675e3
Hu Chunming
解码器添加解码结束和暂停状态判断接口;
|
1226
1227
1228
1229
|
mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str(),true);
}
return SUCCESS;
|
31a1e592
Hu Chunming
完成接口匹配
|
1230
|
}
|
450989b5
Hu Chunming
跑通算法
|
1231
|
#endif
|
31a1e592
Hu Chunming
完成接口匹配
|
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
|
bool CMultiSourceProcess::PauseTask(const string taskID) {
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
return pDecManager->pauseDecoder(taskID);
}
bool CMultiSourceProcess::RestartTask(const string taskID){
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
return pDecManager->resumeDecoder(taskID);
}
bool CMultiSourceProcess::finish_task(const string taskID, const bool delete_snapshot){
|
31a1e592
Hu Chunming
完成接口匹配
|
1244
1245
1246
1247
1248
|
#ifdef POST_USE_RABBITMQ
auto json_str = helpers::gen_json::gen_office_task_heart_beat_json({taskID});
mq_manager_->publish(mq_type_t::HEART_BEAT_MQ, json_str.c_str(), true);
#endif
|
450989b5
Hu Chunming
跑通算法
|
1249
|
#ifdef WITH_FACE_DET_SS
|
31a1e592
Hu Chunming
完成接口匹配
|
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
|
// 人脸任务结束
auto task_param_ptr = m_task_param_manager->get_task_algor_param(taskID);
if (task_param_ptr->human_face_algors.find(algorithm_type_t::FACE_SNAPSHOT) !=
task_param_ptr->human_face_algors.end()) {
m_face_det_ai_engine.finish_task(taskID);
}
#endif
m_task_param_manager->delete_task_param(taskID);
|
450989b5
Hu Chunming
跑通算法
|
1260
1261
1262
1263
1264
1265
1266
1267
|
return true;
}
bool CMultiSourceProcess::FinishTask(const string taskID){
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
bool ret = pDecManager->closeDecoderByName(taskID);
if (ret){
|
31a1e592
Hu Chunming
完成接口匹配
|
1268
1269
1270
1271
1272
1273
1274
|
m_snapshot_reprocessing->delete_finishtask_snapshot(taskID);
((save_snapshot_reprocessing *)m_save_snapshot_reprocessing)->delete_finishtask(taskID);
}
return ret;
}
|
31a1e592
Hu Chunming
完成接口匹配
|
1275
1276
1277
1278
1279
1280
|
void CMultiSourceProcess::CloseAllTask(){
m_bfinish = true;
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
pDecManager->closeAllDecoder();
|
a0e58901
Hu Chunming
去掉CMultiSourcePro...
|
1281
|
pthread_join(m_gpuProcessthread,0);
|
31a1e592
Hu Chunming
完成接口匹配
|
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
|
m_QueueMtx.lock();
for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ){
GpuRgbMemory* gpuMem = *iter;
delete gpuMem;
gpuMem = nullptr;
iter = m_RgbDataList.erase(iter);
}
m_RgbDataList.clear();
m_QueueMtx.unlock();
VPT_Release(VPT_Handle_);
((save_snapshot_reprocessing *)m_save_snapshot_reprocessing)->save_snapshot_reprocessing_release();
if (m_save_snapshot_reprocessing) {
delete m_save_snapshot_reprocessing;
m_save_snapshot_reprocessing = nullptr;
}
m_task_param_manager->task_param_manager_release();
|
fccbe006
Hu Chunming
初步完成从解码到算法处理,任务管理...
|
1304
|
}
|