Commit afd07f06f52edb35ddfea046b54ad502fd954e11

Authored by Hu Chunming
2 parents 002f9498 3d73904f

Merge branch 'dev-shzhao' into dev-cmhu

bin/libhcp_vdec.so
No preview for this file type
bin/libhs_motor_process.so
No preview for this file type
bin/libhs_tri_process.so
No preview for this file type
bin/libhs_truck_process.so
No preview for this file type
bin/libmotor_rainshed_vdec.so
No preview for this file type
bin/libphone_motor_det.so
No preview for this file type
bin/libtraffic_light_vdec.so
No preview for this file type
bin/libvpt_det_vdec.so
No preview for this file type
src/ai_platform/MultiSourceProcess.cpp-- deleted
1   -#include "MultiSourceProcess.h"
2   -#include "../common/logger.hpp"
3   -
4   -#include <string>
5   -#include <queue>
6   -#include <mutex>
7   -#include <chrono>
8   -#include <thread>
9   -
10   -#include "../decoder/interface/DecoderManager.h"
11   -#include "../decoder/interface/utiltools.hpp"
12   -#include "../helpers/time_helper.hpp"
13   -#include "../helpers/os_helper.hpp"
14   -#include "../helpers/gen_json.hpp"
15   -#include "../helpers/str_helper.hpp"
16   -#include "../reprocessing_module/save_snapshot_reprocessing.h"
17   -
18   -#include "macro_definition.h"
19   -#include "ErrorInfo.h"
20   -#include "SourceSingleton.hpp"
21   -#include "mvpt_process_assist.h"
22   -
23   -#include "../util/vpc_util.h"
24   -
25   -// #define VEHICLE_MULTI_BOXES
26   -
27   -#define WITH_FACE_DET_SS
28   -
29   -#define productSN "51C4B28135604F649671727185949A91" //linux 通途抓拍引擎产品序列号
30   -
31   -using namespace std;
32   -
33   -map<int, algo_type> index_to_algo_type = {{0, algorithm_type_t::HUMAN_SNAPSHOT},
34   - {1, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT},
35   - {2, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT},
36   - {3, algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT},
37   - {4, algorithm_type_t::VEHICLE_SNAPSHOT},
38   - {5, algorithm_type_t::VEHICLE_SNAPSHOT},
39   - {6, algorithm_type_t::VEHICLE_SNAPSHOT},
40   - {7, algorithm_type_t::VEHICLE_SNAPSHOT},
41   - {8, algorithm_type_t::VEHICLE_SNAPSHOT},
42   - {9, algorithm_type_t::FACE_SNAPSHOT}};
43   -
44   -
45   -struct decode_cbk_userdata{
46   - string task_id;
47   - void* opaque;
48   - void* opaque1;
49   -};
50   -
51   -
52   -/**
53   - * 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况
54   - * */
55   -void post_decod_cbk(const void * userPtr, DeviceMemory* devFrame){
56   - decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
57   - if (ptr!= nullptr)
58   - {
59   - CMultiSourceProcess* _this = (CMultiSourceProcess*)ptr->opaque;
60   - if(nullptr != _this){
61   - _this->decoded_cbk(devFrame);
62   - }
63   - }
64   -}
65   -
66   -void decode_finished_cbk(const void * userPtr){
67   - decode_cbk_userdata* ptr = (decode_cbk_userdata*)userPtr;
68   - if (ptr!= nullptr)
69   - {
70   - CMultiSourceProcess* _this = (CMultiSourceProcess*)ptr->opaque;
71   - if(nullptr != _this){
72   - _this->task_finished(ptr->task_id);
73   - }
74   - }
75   - delete ptr;
76   - ptr = nullptr;
77   -}
78   -
79   -CMultiSourceProcess::CMultiSourceProcess(){
80   - m_timing_snapshot_thread = nullptr;
81   -}
82   -
83   -CMultiSourceProcess::~CMultiSourceProcess(){
84   -}
85   -
86   -int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam){
87   -#ifdef USE_VILLAGE
88   - if (!CheckTime()) {
89   - std::cout << "sy_licence_check failed." << std::endl;
90   - return AUTHOR_ERROR;
91   - }
92   -#else
93   - //授权相关------------------------------------
94   - //授权init-----------
95   - const char *token_password = "Capture_atlas_arm_2023";
96   - std::string guid = std::string("Capture_atlas_arm")+std::to_string(vptParam.gpuid);
97   - atlas_licence_param lic_param;
98   - memset(&lic_param, 0, sizeof(atlas_licence_param));
99   - sprintf(lic_param.product_id, "%s", productSN);
100   - sprintf(lic_param.guid, "%s",guid.c_str());
101   - sprintf(lic_param.token_pwd, "%s", token_password);
102   - lic_param.channel_num = 1;
103   - atlas_licence_token param_token;
104   - memset(&param_token, 0, sizeof(atlas_licence_token));
105   -
106   - int result = atlas_licence_connect(&(skt_handle), lic_param, &param_token);
107   - //printf("result:%d,code:%d,msg:%s \n", result, param_token.code, param_token.msg);
108   - //printf("token:%s\n", param_token.token);
109   - std::string recv_token = std::string(param_token.token);
110   -
111   - //atlas_licence_check_param check_param;
112   - memset(&(check_param), 0, sizeof(atlas_licence_check_param));
113   - sprintf(check_param.token_pwd, "%s", token_password);
114   - sprintf(check_param.time, "%s", "2023-01-10 20:00:00");
115   - sprintf(check_param.token, "%s", recv_token .c_str());
116   - check_param.consume = 2;
117   -
118   - //授权check------------
119   - check_label = -1;//初始值
120   - std::cout << "sy_licence_check start." << std::endl;
121   - atlas_licence_check_result check_result;
122   - memset(&check_result, 0, sizeof(atlas_licence_check_result));
123   - check_result.code = -1;
124   -
125   - int res = atlas_licence_check(skt_handle, check_param, &check_result);
126   - if(res!=0) {
127   - std::cout << "sy_licence_check failed." << std::endl;
128   - return AUTHOR_ERROR;
129   - }
130   - //std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
131   - if(check_result.code!=0) {
132   - std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
133   - return AUTHOR_ERROR;
134   - }
135   - std::cout << "sy_licence_check end." << std::endl;
136   -
137   - check_label = 0;//授权成功
138   - //授权相关------------------------------------
139   -#endif
140   - set_default_logger(LogLevel(vptParam.log_level), "multi_source_process", vptParam.log_path, vptParam.log_mem, vptParam.log_mem);
141   - LOG_INFO("编译时间:{} {}", __DATE__, __TIME__);
142   -
143   - SourceSingleton::getInstance();
144   -
145   - skip_frame_ = 5;
146   - m_batch_size = 20;
147   -
148   - m_devId = vptParam.gpuid;
149   -
150   - string models_dir = vptParam.models_dir;
151   -
152   - VPTProcess_PARAM vparam;
153   - vparam.gpuid = m_devId;
154   - vparam.max_batch = m_batch_size;
155   - vparam.threshold = 0.4;
156   - vparam.model_dir = models_dir;
157   -
158   - aclrtSetDevice(m_devId);
159   -
160   - int ret = vpt_process.init(vparam);
161   - if (ret < 0){
162   - return ret;
163   - }
164   -
165   -#ifdef USE_VILLAGE
166   - //道路分割
167   - if(seg_process.init(vptParam.gpuid, models_dir) != 0) {
168   - LOG_FATAL("Init road_seg failed");
169   - return -1;
170   - }
171   - if(seg3cls_process.init(vptParam.gpuid, models_dir) != 0) {
172   - LOG_FATAL("Init road_3clsseg failed");
173   - return -1;
174   - }
175   -
176   -
177   - //三轮车头肩检测
178   - if (!tricycle_manned_.init(vptParam.gpuid, models_dir)) {
179   - LOG_FATAL("Init tricycle_hs failed");
180   - return -1;
181   - }
182   - //货车头肩检测
183   - if (!truck_manned_.init(vptParam.gpuid, models_dir)) {
184   - LOG_FATAL("Init truck_hs failed");
185   - return -1;
186   - }
187   - //二轮车头肩检测
188   - if (!motor_hsprocess_.init(vptParam.gpuid, models_dir)) {
189   - LOG_FATAL("Init motor_hs failed");
190   - return -1;
191   - }
192   -
193   - //二轮车使用手机及加雨棚
194   - if (!motor_refit_phoneprocess_.init(vptParam.gpuid, models_dir)) {
195   - LOG_FATAL("Init motor_phone failed");
196   - return -1;
197   - }
198   - /*
199   - //二轮车使用手机检测
200   - if (!motor_phoneprocess_.init(vptParam.gpuid, models_dir)) {
201   - LOG_FATAL("Init motor_phone failed");
202   - return -1;
203   - }*/
204   - //电动车改装(加雨棚)
205   - if (!motor_refitprocess_.init(vptParam.gpuid, models_dir)) {
206   - LOG_FATAL("Init motor_refit failed");
207   - return -1;
208   - }
209   - // 行人/二轮车闯红灯
210   - if (!traffic_lightprocess_.init(vptParam.gpuid, models_dir)) {
211   - LOG_FATAL("Init traffic_light failed");
212   - return -1;
213   - }
214   - // 与道路分割相关的算法
215   - if (!roadseg_corrprocess_.init(vptParam.gpuid, models_dir)) {
216   - LOG_FATAL("Init roadseg_corrprocess failed");
217   - return -1;
218   - }
219   -#endif
220   -
221   - #ifdef WITH_FACE_DET_SS
222   - // 人脸检测初始化
223   - facedet_ai_engine_param fd_param;
224   - char model_path_yolov5s[100];
225   - strcpy(model_path_yolov5s, (models_dir + "/models/face_detect/face_det_yolov5s_310p.om").c_str());
226   - fd_param.sdk_param.det_modelNames = model_path_yolov5s;
227   - char model_path_ldmk[100];
228   - strcpy(model_path_ldmk, (models_dir + "/models/face_detect/face_ldmk_310p.om").c_str());
229   - fd_param.sdk_param.ldmk_modelNames = model_path_ldmk;
230   - char model_path_pose[100];
231   - strcpy(model_path_pose, (models_dir + "/models/face_detect/face_pose_310p.om").c_str());
232   - fd_param.sdk_param.pose_modelNames = model_path_pose;
233   - char model_path_score[100];
234   - strcpy(model_path_score, (models_dir + "/models/face_detect/face_score_310p.om").c_str());
235   - fd_param.sdk_param.score_modelNames = model_path_score;
236   - char model_path_fuzzy[100];
237   - strcpy(model_path_fuzzy, (models_dir + "/models/face_detect/face_fuzzy_310p.om").c_str());
238   - fd_param.sdk_param.fuzzy_modelNames = model_path_fuzzy;
239   - char model_path_occlusion[100];
240   - strcpy(model_path_occlusion, (models_dir + "/models/face_detect/face_occlusion_310p.om").c_str());
241   - fd_param.sdk_param.occlusion_modelNames = model_path_occlusion;
242   - fd_param.sdk_param.thresld = 0.6;
243   - fd_param.sdk_param.devId = m_devId;
244   - fd_param.sdk_param.auth_license = "sy_tongtu_aiplatform_sdk_2023";
245   - fd_param.sdk_param.facial_fea_point_config = SY_CONFIG_OPEN; //是否启动关键点检测
246   - fd_param.sdk_param.pose_config = SY_CONFIG_OPEN; //是否启动姿态角
247   - fd_param.sdk_param.quality_config = SY_CONFIG_OPEN; //是否启动质量检测
248   - fd_param.sdk_param.score_config = SY_CONFIG_OPEN; //是否启动人脸置信度 //SY_CONFIG_OPEN SY_CONFIG_CLOSE
249   - fd_param.sdk_param.max_result_count = 50;
250   - ret = m_face_det_ai_engine.init_ai_engine(fd_param);
251   - if (ret < 0 ) {
252   - LOG_FATAL("Init face detection failed");
253   - return ret;
254   - }
255   -#endif
256   -
257   - m_task_param_manager = task_param_manager::getInstance();
258   - m_snapshot_reprocessing = new snapshot_reprocessing(m_devId);
259   - m_save_snapshot_reprocessing = new save_snapshot_reprocessing(m_devId);
260   -
261   -#ifdef POST_USE_RABBITMQ
262   - mq_manager_ = new mq::Manager();
263   -#endif
264   -
265   - VPCUtil* pVpcUtil = VPCUtil::getInstance();
266   - pVpcUtil->init(m_devId);
267   -
268   - m_pAlgorthimThread = new thread([](void* arg) {
269   - CMultiSourceProcess* process = (CMultiSourceProcess*)arg ;
270   - process->algorthim_process_thread();
271   - return (void*)0;
272   - }
273   - , this);
274   -
275   - m_recode_thread = new thread([](void* arg) {
276   - CMultiSourceProcess* process = (CMultiSourceProcess*)arg ;
277   - process->recode_thread();
278   - return (void*)0;
279   - }
280   - , this);
281   -
282   - m_timing_snapshot_thread = new std::thread(
283   - [](void* arg)
284   - {
285   - CMultiSourceProcess* _this=(CMultiSourceProcess*)arg;
286   - if(_this != nullptr){
287   - _this->timing_snapshot_thread();
288   - }else{
289   - LOG_ERROR("定时抓拍线程启动失败 !");
290   - }
291   - return (void*)0;
292   - }, this);
293   -
294   - if(nullptr == m_timing_snapshot_thread){
295   - LOG_ERROR("定时抓拍线程启动失败 !");
296   - }
297   -
298   - LOG_INFO("InitAlgorthim succeed !");
299   -
300   - return 0;
301   -}
302   -
303   -#ifdef POST_USE_RABBITMQ
304   -/* MQ队列的初始化 */
305   -int CMultiSourceProcess::AddMqConn(mq_type_t mq_type, rabbitmq_conn_params_t mq_conn_param) {
306   - /* 初始化MQ队列 */
307   - LOG_INFO("初始化MQ队列");
308   - if(mq_manager_ == nullptr){
309   - LOG_ERROR("mq_manager_ is null");
310   - return FAILED;
311   - }
312   -
313   - if (!mq_manager_->add_conn(mq_type, mq_conn_param)) {
314   - LOG_ERROR("Connection MQ failed, ip: {} port: {} uname: {} passwd: {}", mq_conn_param.ip, mq_conn_param.port,
315   - mq_conn_param.uname, mq_conn_param.passwd);
316   - return MQ_CONN_ERROR;
317   - }
318   -
319   - LOG_INFO("为报警类 绑定MQ回调");
320   - /* 为报警类 绑定回调 传入mq_manager_.publish 内部直接调用*/
321   - if (m_save_snapshot_reprocessing!= nullptr && mq_type_t::ALARM_MQ == mq_type) {
322   - m_save_snapshot_reprocessing->set_callback(
323   - std::bind(&mq::Manager::publish, mq_manager_, mq_type, std::placeholders::_1, true));
324   - LOG_INFO("为报警类 绑定MQ回调 成功!");
325   - }
326   -
327   - LOG_INFO("初始化MQ队列成功!");
328   -
329   - return SUCCESS;
330   -}
331   -
332   -/* 获取任务的状态 MQ返回 */
333   -int CMultiSourceProcess::GetTaskStatus(const string taskID) {
334   -
335   - DecoderManager* pDecManager = DecoderManager::getInstance();
336   -
337   - std::vector<std::string> taskids;
338   - std::vector<int> statues;
339   - if(pDecManager->isPausing(taskID)){
340   - taskids.emplace_back(taskID);
341   - statues.emplace_back(2);
342   - }else if(pDecManager->isRunning(taskID)){
343   - taskids.emplace_back(taskID);
344   - statues.emplace_back(1);
345   - }
346   -
347   - if (!taskids.empty()) {
348   - auto json_str = helpers::gen_json::gen_task_status_json(taskids, statues);
349   - mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str(),true);
350   - }
351   -
352   - return SUCCESS;
353   -}
354   -#endif
355   -
356   -bool CMultiSourceProcess::AddTask(task_param _cur_task_param){
357   - DecoderManager* pDecManager = DecoderManager::getInstance();
358   -
359   - const char* task_id = _cur_task_param.task_id;
360   -
361   - MgrDecConfig config;
362   - config.name = task_id;
363   - config.cfg.uri = _cur_task_param.ipc_url;
364   - config.cfg.post_decoded_cbk = post_decod_cbk;
365   - config.cfg.decode_finished_cbk = decode_finished_cbk;
366   - config.cfg.force_tcp = true; // rtsp用tcp
367   - config.cfg.gpuid = to_string(m_devId);
368   - config.cfg.skip_frame = skip_frame_;
369   -
370   - if (1 == _cur_task_param.dec_type){
371   - config.cfg.port = _cur_task_param.port;
372   - config.dec_type = DECODER_TYPE_GB28181;
373   - config.cfg.uri = task_id;
374   - if(_cur_task_param.protocal == 0){
375   - // 指定用udp协议
376   - config.cfg.force_tcp = false;
377   - }
378   - config.cfg.request_stream_cbk = _cur_task_param.gb28181_request_stream_callback ;
379   - }else if (2 == _cur_task_param.dec_type){
380   - config.dec_type = DECODER_TYPE_DVPP;
381   - }else {
382   - config.dec_type = DECODER_TYPE_FFMPEG;
383   - }
384   -
385   - AbstractDecoder* dec = pDecManager->createDecoder(config);
386   - if (!dec){
387   - return false;
388   - }
389   -
390   - decode_cbk_userdata* userPtr = new decode_cbk_userdata;
391   - userPtr->task_id = string(task_id);
392   - userPtr->opaque = this;
393   - userPtr->opaque1 = dec;
394   - pDecManager->setPostDecArg(config.name, userPtr);
395   - pDecManager->setFinishedDecArg(config.name, userPtr);
396   -
397   - // pDecManager->setDecKeyframe(config.name, true); // 只对关键帧解码
398   -
399   -
400   - // 保存新添加任务的配置参数
401   - m_task_param_manager->add_task_param(task_id, _cur_task_param);
402   -
403   - int input_image_width = 0;
404   - int input_image_height = 0;
405   - pDecManager->getResolution(config.name, input_image_width, input_image_height);
406   - LOG_INFO("task_id: {} width: {} height:{}", task_id, input_image_width, input_image_height);
407   -
408   - // 所有参数都准备好之后再启动解码
409   - bool bStart = pDecManager->startDecodeByName(config.name);
410   - if (!bStart){
411   - LOG_INFO("started task {} failed!", config.name);
412   - pDecManager->closeDecoderByName(config.name);
413   - return false;
414   - }
415   -
416   -#ifdef POST_USE_RABBITMQ
417   - mq_type_t mq_type = mq_type_t::ALARM_MQ;
418   - pDecManager->set_mq_callback(config.name, std::bind(&mq::Manager::publish, mq_manager_, mq_type, std::placeholders::_1, true));
419   -#endif
420   -
421   - // 人车物跟踪
422   - if (task_has_vpt_algor(task_id))
423   - vpt_process.addTaskTracker(task_id, 1, 1, skip_frame_);
424   -
425   - // 人脸跟踪
426   -#ifdef WITH_FACE_DET_SS
427   - if (task_has_face_algor(task_id))
428   - m_face_det_ai_engine.add_tracker(task_id, skip_frame_); // 跳帧数暂时写死
429   -#endif
430   -
431   - m_FinishedTaskMtx.lock();
432   - m_FinishedTaskMap[task_id] = false;
433   - m_FinishedTaskMtx.unlock();
434   -
435   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
436   - if (algor_map != nullptr){
437   - /* 如果开启了行人 机动车非法闯入功能 生成闯入区域mask */
438   - if (algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end()) {
439   - pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region(
440   - task_id, algorithm_type_t::PEDESTRIAN_TRESPASS, input_image_width, input_image_height);
441   - }
442   -
443   - if (algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end()) {
444   - pedestrian_vehicle_trespass_.pedestrianvehicletrespass_init_region(
445   - task_id, algorithm_type_t::VEHICLE_TRESPASS, input_image_width, input_image_height);
446   - }
447   -
448   - // 设置定时截图的时间间隔
449   - auto algor = algor_map->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT);
450   - if(algor != algor_map->end()){
451   - task_param_manager::algo_param_type_t_* cur_task_params = algor->second;
452   - if(cur_task_params){
453   - int frame_stride = ((algor_config_video_timing_snapshot*)cur_task_params->algor_param)->frame_stride;
454   - LOG_INFO("task {} snap time interval: {} s", config.name, frame_stride);
455   - // 单位是ms, 乘以 1000 编成s
456   - dec->setSnapTimeInterval(frame_stride * 1000);
457   - }
458   - }
459   -
460   - // 测试代码
461   - // auto algor_face = algor_map->find(algorithm_type_t::FACE_SNAPSHOT);
462   - // if(algor_face != algor_map->end()){
463   - // const algor_basic_config_param_t *cur_param = ((algor_init_config_param_t *)(algor_face->second))->basic_param;
464   - // LOG_INFO("face_snapshot, result_folder: {} result_folder_little: {}", cur_param->result_folder, cur_param->result_folder_little);
465   - // }
466   - }
467   -
468   - LOG_INFO("started task {} successed!", config.name);
469   -
470   - return true;
471   -}
472   -
473   -int CMultiSourceProcess::CountRunningTask() {
474   - DecoderManager* pDecManager = DecoderManager::getInstance();
475   - return pDecManager->count();
476   -}
477   -
478   -bool CMultiSourceProcess::task_has_vpt_algor(const std::string &task_id){
479   - //! TODO: create enum iterator.
480   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
481   - if (algor_map == nullptr)
482   - return false;
483   -
484   - return (algor_map->find(algorithm_type_t::HUMAN_GATHER) != algor_map->end() ||
485   - algor_map->find(algorithm_type_t::HUMAN_SNAPSHOT) != algor_map->end() ||
486   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT) != algor_map->end() ||
487   - algor_map->find(algorithm_type_t::SMOKING_DET) != algor_map->end() ||
488   - algor_map->find(algorithm_type_t::NO_REFLECTIVE_CLOTHING) != algor_map->end() ||
489   - algor_map->find(algorithm_type_t::NO_SAFETY_HELMET) != algor_map->end() ||
490   - algor_map->find(algorithm_type_t::CALL_PHONE_DET) != algor_map->end() ||
491   - algor_map->find(algorithm_type_t::VEHICLE_SNAPSHOT) != algor_map->end() ||
492   - algor_map->find(algorithm_type_t::TAKEAWAY_MEMBER_CLASSIFICATION) != algor_map->end() ||
493   - algor_map->find(algorithm_type_t::PEDESTRIAN_FALL) != algor_map->end() ||
494   - algor_map->find(algorithm_type_t::PEDESTRIAN_FIGHT) != algor_map->end() ||
495   - algor_map->find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != algor_map->end() ||
496   - algor_map->find(algorithm_type_t::VEHICLE_RETROGRADE) != algor_map->end() ||
497   - algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end() ||
498   - algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end() ||
499   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET) != algor_map->end() ||
500   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN) != algor_map->end() ||
501   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE) != algor_map->end() ||
502   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_REFIT) != algor_map->end() ||
503   - algor_map->find(algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS) != algor_map->end() ||
504   - algor_map->find(algorithm_type_t::NONMOTOR_CEOSSPARKLINE) != algor_map->end() ||
505   - algor_map->find(algorithm_type_t::NONMOTOR_IN_VEHICLELANE) != algor_map->end() ||
506   - algor_map->find(algorithm_type_t::NONMOTOR_WRONGDIRECTION) != algor_map->end() ||
507   - algor_map->find(algorithm_type_t::PERSON_IN_VEHICLELANE) != algor_map->end() ||
508   - algor_map->find(algorithm_type_t::PERSON_RUNNING_REDLIGHTS) != algor_map->end() ||
509   - algor_map->find(algorithm_type_t::PERSON_CROSS) != algor_map->end() ||
510   - algor_map->find(algorithm_type_t::VEHICLE_WRONGDIRECTION) != algor_map->end() ||
511   - algor_map->find(algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND) != algor_map->end() ||
512   - algor_map->find(algorithm_type_t::VEHICLE_NOTGIVEWAY) != algor_map->end() ||
513   - algor_map->find(algorithm_type_t::VEHICLE_NOTDECELERATION) != algor_map->end() ||
514   - algor_map->find(algorithm_type_t::TRICYCLE_MANNED) != algor_map->end() ||
515   - algor_map->find(algorithm_type_t::TRUCK_MANNED) != algor_map->end());
516   -}
517   -
518   -bool CMultiSourceProcess::task_has_face_algor(const std::string &task_id){
519   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
520   - if (nullptr != algor_map){
521   - return algor_map->find(algorithm_type_t::FACE_SNAPSHOT) != algor_map->end();
522   - }
523   -
524   - return false;
525   -}
526   -
527   -void CMultiSourceProcess::decoded_cbk(DeviceMemory* devFrame){
528   -
529   - do{
530   - if(m_bfinish){
531   - break;
532   - }
533   - m_DataListMtx.lock();
534   - if(m_RgbDataList.size() >= 100){ //缓存100帧
535   - m_DataListMtx.unlock();
536   - std::this_thread::sleep_for(std::chrono::milliseconds(3));
537   - continue;
538   - }
539   - m_RgbDataList.push_back(devFrame);
540   - m_DataListMtx.unlock();
541   - break;
542   - }while (true);
543   -}
544   -
545   -void CMultiSourceProcess::task_finished(const string task_id){
546   -
547   - std::lock_guard<std::mutex> l(m_FinishedTaskMtx);
548   -
549   - m_FinishedTaskMap[task_id] = true;
550   -
551   - LOG_INFO("task {} finished!", task_id);
552   -}
553   -
554   -bool CMultiSourceProcess::PauseTask(const string taskID){
555   - DecoderManager* pDecManager = DecoderManager::getInstance();
556   - return pDecManager->pauseDecoder(taskID);
557   -}
558   -
559   -bool CMultiSourceProcess::RestartTask(const string taskID){
560   - DecoderManager* pDecManager = DecoderManager::getInstance();
561   - return pDecManager->resumeDecoder(taskID);
562   -}
563   -
564   -bool CMultiSourceProcess::FinishTask(const string taskID){
565   - DecoderManager* pDecManager = DecoderManager::getInstance();
566   - // return pDecManager->closeDecoderByName(taskID);
567   -
568   - // 记录主动结束的任务
569   - bool flag = pDecManager->closeDecoderByName(taskID);
570   -#ifdef POST_USE_RABBITMQ
571   - if (flag) {
572   - std::lock_guard<std::mutex> l1(m_ActiveFinishedTaskMtx);
573   - m_ActiveFinishedTaskMap[taskID] = true;
574   - }
575   -#endif
576   - return flag;
577   -}
578   -
579   -int CMultiSourceProcess::snapshot_task(std::string& uri_or_name, const std::string& file_name, bool bInTask) {
580   - DecoderManager* pDecManager = DecoderManager::getInstance();
581   -
582   - DeviceMemory* devMem = nullptr;
583   - if(bInTask) {
584   - LOG_INFO("snap in task");
585   - devMem = pDecManager->snapshot_in_task(uri_or_name);
586   - } else {
587   - LOG_INFO("snap out task");
588   - devMem = pDecManager->snapshot_out_task(uri_or_name, m_devId);
589   - }
590   - if(devMem != nullptr) {
591   - JpegUtil jpegUtil;
592   - jpegUtil.jpeg_init(m_devId);
593   -
594   - acldvppPicDesc *vpcDesc= acldvppCreatePicDesc();
595   - acldvppSetPicDescData(vpcDesc, devMem->getMem());
596   - acldvppSetPicDescFormat(vpcDesc, PIXEL_FORMAT_YUV_SEMIPLANAR_420);
597   - acldvppSetPicDescWidth(vpcDesc, devMem->getWidth());
598   - acldvppSetPicDescHeight(vpcDesc, devMem->getHeight());
599   - acldvppSetPicDescWidthStride(vpcDesc, devMem->getWidthStride());
600   - acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride());
601   - acldvppSetPicDescSize(vpcDesc, devMem->getSize());
602   -
603   - jpegUtil.jpeg_encode(vpcDesc, file_name);
604   -
605   - acldvppDestroyPicDesc(vpcDesc);
606   -
607   - jpegUtil.jpeg_release();
608   -
609   - delete devMem;
610   - devMem = nullptr;
611   -
612   - return SUCCESS;
613   - }
614   -
615   - return FAILED;
616   -}
617   -
618   -int CMultiSourceProcess::SnapShot(task_param _cur_task_param) {
619   - LOG_INFO("begin SnapShot task: {}", _cur_task_param.task_id);
620   -
621   - /* 添加任务参数 */
622   - auto &algor_config_param = _cur_task_param.algor_config_params[0]; // 默认算法数量为1
623   -
624   - /* 拷贝通用的算法参数 */
625   - auto src_basic_param = algor_config_param.algor_init_config_param->basic_param;
626   - if (src_basic_param->result_folder) {
627   - CreateResultFolder(src_basic_param->result_folder, "");
628   - } else {
629   - src_basic_param->result_folder = "";
630   - }
631   -
632   - std::string cur_timestamp_ms = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
633   - std::string file_name = std::string(src_basic_param->result_folder) + helpers::os::sep + _cur_task_param.task_id + "_snap_" + cur_timestamp_ms + ".jpg";
634   -
635   - // file_name = "/mnt/data/cmhu/tongtu/Linux_3rdparty/tsl_sdk_20220801/res/snap.jpg";
636   - string task_id = _cur_task_param.task_id;
637   - int bSnapShot = snapshot_task(task_id, file_name, true);
638   - if (FAILED == bSnapShot){
639   - string url = _cur_task_param.ipc_url;
640   - bSnapShot = snapshot_task(url, file_name, false);
641   - }
642   - if(SUCCESS == bSnapShot){
643   -#ifdef POST_USE_RABBITMQ
644   - auto json_str = helpers::gen_json::gen_screen_json(task_id, file_name);
645   - // mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str(), true);
646   - mq_manager_->publish(mq_type_t::SCREENSHORT_TASK_MQ, json_str.c_str(), true);
647   -#endif
648   - LOG_INFO("SnapShot task: {} success", task_id);
649   - } else {
650   - LOG_ERROR("SnapShot task: {} failed !", task_id);
651   - }
652   -
653   - return bSnapShot;
654   -}
655   -
656   -void CMultiSourceProcess::CloseAllTask(){
657   - m_bfinish = true;
658   - atlas_licence_close(&(skt_handle)); //授权
659   - DecoderManager* pDecManager = DecoderManager::getInstance();
660   - pDecManager->closeAllDecoder();
661   -
662   - if(m_pAlgorthimThread){
663   - m_pAlgorthimThread->join();
664   - m_pAlgorthimThread = nullptr;
665   - }
666   -
667   - if(m_recode_thread){
668   - m_recode_thread->join();
669   - m_recode_thread = nullptr;
670   - }
671   -
672   - if(m_timing_snapshot_thread != nullptr && m_timing_snapshot_thread->joinable()){
673   - m_timing_snapshot_thread->join();
674   - m_timing_snapshot_thread = nullptr;
675   - }
676   -
677   - m_DataListMtx.lock();
678   - while (!m_RgbDataList.empty()){
679   - DeviceMemory* gpuMem = m_RgbDataList.front();
680   - delete gpuMem;
681   - gpuMem = nullptr;
682   - m_RgbDataList.pop_front();
683   - }
684   - m_DataListMtx.unlock();
685   -
686   - int size = m_RgbDataList.size();
687   - bool bEmpty = m_RgbDataList.empty();
688   -
689   - LOG_INFO("CloseAllTask exit.");
690   -}
691   -
692   -void CMultiSourceProcess::CloseAllTask2() {
693   - DecoderManager* pDecManager = DecoderManager::getInstance();
694   - pDecManager->closeAllDecoder();
695   -}
696   -
697   -void CMultiSourceProcess::clear_finished_task(){// 清理已经结束的任务
698   -
699   - std::lock_guard<std::mutex> l1(m_FinishedTaskMtx);
700   - std::lock_guard<std::mutex> l2(m_DataListMtx);
701   -
702   - for (auto iter_finished = m_FinishedTaskMap.begin(); iter_finished!=m_FinishedTaskMap.end(); ){
703   - if(iter_finished->second){
704   - // 解码已经结束
705   - // 判断数据对列中是否还有数据
706   - string task_id = iter_finished->first;
707   - bool bFinished = true;
708   - for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ++ iter){
709   - DeviceMemory* gpuMem = *iter;
710   - if(task_id == gpuMem->getId()){
711   - bFinished = false;
712   - break;
713   - }
714   - }
715   -
716   - if (bFinished){
717   - // 解码器已经结束,且数据队列中没有改任务的数据,则做最后任务清理工作
718   - finish_task(task_id,false);
719   - iter_finished = m_FinishedTaskMap.erase(iter_finished);
720   - continue;
721   - }
722   - }
723   -
724   - ++ iter_finished;
725   - }
726   -}
727   -
728   -bool CMultiSourceProcess::finish_task(const string taskID, const bool delete_snapshot){
729   -
730   - // 任务结束,关闭跟踪
731   - if (!vpt_process.finishTaskTracker(taskID))
732   - LOG_ERROR("Finish VPT Tracker failed, task_id: {}", taskID);
733   -
734   -#ifdef WITH_FACE_DET_SS
735   - // 人脸任务结束
736   - if (task_has_face_algor(taskID))
737   - m_face_det_ai_engine.finish_task(taskID);
738   -#endif
739   -
740   -#ifdef POST_USE_RABBITMQ
741   - {
742   - // 外部主动结束的任务不推送mq
743   - std::lock_guard<std::mutex> mlock(m_ActiveFinishedTaskMtx);
744   - if (!(m_ActiveFinishedTaskMap.count(taskID) && m_ActiveFinishedTaskMap[taskID])) {
745   - auto json_str = helpers::gen_json::gen_office_task_heart_beat_json({taskID});
746   - mq_manager_->publish(mq_type_t::HEART_BEAT_MQ, json_str.c_str(), true);
747   - }
748   - if (m_ActiveFinishedTaskMap.count(taskID)) m_ActiveFinishedTaskMap.erase(taskID);
749   - }
750   -#endif
751   -
752   -// #ifdef WITH_SECOND_PROCESS
753   - pedestrian_vehicle_retrograde_.force_release_result(taskID); //221024 byzsh
754   -// #endif
755   -#ifdef USE_VILLAGE
756   - tricycle_manned_.force_release_result(taskID);
757   - truck_manned_.force_release_result(taskID);
758   - motor_hsprocess_.force_release_result(taskID);
759   - motor_refit_phoneprocess_.force_release_result(taskID);
760   - // motor_phoneprocess_.force_release_result(taskID);
761   - motor_refitprocess_.force_release_result(taskID);
762   - traffic_lightprocess_.force_release_result(taskID);
763   - roadseg_corrprocess_.force_release_result(taskID);
764   -
765   - m_RoadSegTaskMtx.lock();
766   - if (m_RoadSegTaskMap.count(taskID)) {
767   - for (int i = 0; i < m_RoadSegTaskMap[taskID].traffic_region.size(); i++) {
768   - vector<int>().swap(m_RoadSegTaskMap[taskID].traffic_region[i]);
769   - }
770   - for (int i = 0; i < m_RoadSegTaskMap[taskID].fence_region.size(); i++) {
771   - vector<int>().swap(m_RoadSegTaskMap[taskID].fence_region[i]);
772   - }
773   - vector<int>().swap(m_RoadSegTaskMap[taskID].labels);
774   - vector<int>().swap(m_RoadSegTaskMap[taskID].fence_labels);
775   - vector<vector<int>>().swap(m_RoadSegTaskMap[taskID].traffic_region);
776   - vector<vector<int>>().swap(m_RoadSegTaskMap[taskID].fence_region);
777   - m_RoadSegTaskMap.erase(taskID);
778   - }
779   - m_RoadSegTaskMtx.unlock();
780   - m_TotalObjMtx.lock();
781   - for(auto ss = m_total_obj_info.begin(); ss != m_total_obj_info.end(); ) {
782   - if (strcmp(ss->first.video_id.c_str(), taskID.c_str()) == 0) {
783   - vector<sy_point>().swap(ss->second.center_points);
784   - m_total_obj_info.erase(ss++);
785   - }
786   - else ss++;
787   - }
788   - m_TotalObjMtx.unlock();
789   -#endif
790   - m_task_param_manager->delete_task_param(taskID);
791   - m_snapshot_reprocessing->release_finished_locus_snapshot(taskID);
792   - m_snapshot_reprocessing->release_finished_face_locus_snapshot(taskID);
793   - m_snapshot_reprocessing->release_village_finished_locus_snapshot(taskID);
794   -
795   - return true;
796   -}
797   -
798   -int CMultiSourceProcess::algorthim_process_thread(){
799   - LOG_INFO("algorthim_process_thread start...");
800   -
801   - ACL_CALL(aclrtSetDevice(m_devId), ACL_SUCCESS, 1);
802   - aclrtContext ctx;
803   - ACL_CALL(aclrtCreateContext(&ctx, m_devId), ACL_SUCCESS, 1);
804   -
805   - while (true){
806   -#ifdef USE_VILLAGE
807   - if (!CheckTime()) {
808   - LOG_FATAL("authority failed!");
809   - break;
810   - }
811   -#else
812   - //授权相关------------------------------------
813   - if(check_label == -1) {
814   - printf("sy_atlas_licence_check failed.\n");
815   - break;
816   - }
817   - //获取系统时间,每个月1号check一次授权
818   - struct tm* info;
819   - int nYear, nMonth, nDay;
820   - time_t raw;
821   - time(&raw);
822   - info = localtime(&raw);
823   - //nYear = info->tm_year + 1900;
824   - //nMonth = info->tm_mon + 1;
825   - nDay = info->tm_mday;
826   - if(nDay==1) {
827   - if(check_label ==0) {
828   - std::cout << "atlas_licence_check start." << std::endl;
829   - atlas_licence_check_result check_result;
830   - memset(&check_result, 0, sizeof(atlas_licence_check_result));
831   - check_result.code = -1;
832   -
833   - int res = atlas_licence_check(skt_handle, check_param, &check_result);
834   - if(res!=0) {
835   - std::cout << "sy_licence_check failed." << std::endl;
836   - break;
837   - }
838   - //std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
839   - if(check_result.code!=0) {
840   - check_label = -1;
841   - std::cout << "code:" << check_result.code << ",msg:" << check_result.msg << std::endl;
842   - break;
843   - }
844   - std::cout << "atlas_licence_check end." << std::endl;
845   - check_label =1;
846   - }
847   - }
848   - else {
849   - check_label =0;
850   - }
851   - //授权相关------------------------------------
852   -#endif
853   - if(m_bfinish){
854   - break;
855   - }
856   -
857   - clear_finished_task();
858   -
859   - vector<DeviceMemory*> vec_gpuMem;
860   - m_DataListMtx.lock();
861   -
862   - while (!m_RgbDataList.empty()){
863   - DeviceMemory* gpuMem = m_RgbDataList.front();
864   - // if(gpuMem->getMem() == nullptr) {
865   - if(gpuMem->getMem() == nullptr || gpuMem->getFrameNb() % skip_frame_) { //跳帧
866   - // 错误数据,直接删除
867   - if(gpuMem->getMem() == nullptr) LOG_WARN("mem is null");
868   - delete gpuMem;
869   - gpuMem = nullptr;
870   - } else {
871   - vec_gpuMem.push_back(gpuMem);
872   - }
873   -
874   - m_RgbDataList.pop_front();
875   - if(vec_gpuMem.size() >= m_batch_size){
876   - break;
877   - }
878   - }
879   - m_DataListMtx.unlock();
880   -
881   - if(vec_gpuMem.size() <= 0){
882   - std::this_thread::sleep_for(std::chrono::milliseconds(3));
883   - continue;
884   - }
885   -
886   - aclrtSetCurrentContext(ctx);
887   - // auto record_t1 = std::chrono::system_clock::now();
888   -#ifdef USE_VILLAGE
889   - algorthim_road_seg(vec_gpuMem);
890   -#endif
891   - auto vptprocess1 = std::chrono::system_clock::now();
892   - algorthim_vpt(vec_gpuMem);
893   - auto vptprocess2 = std::chrono::system_clock::now();
894   - auto vptprocess_time = std::chrono::duration_cast<std::chrono::milliseconds>(vptprocess2 - vptprocess1).count();
895   - LOG_INFO("Process per frame cost time: {} ms fps: {}", vptprocess_time/vec_gpuMem.size(), 1000/(vptprocess_time/vec_gpuMem.size()));
896   -
897   -#ifdef WITH_FACE_DET_SS
898   - algorthim_face_detect(vec_gpuMem);
899   -#endif
900   - // auto record_t2 = std::chrono::system_clock::now();
901   - // auto record_time = std::chrono::duration_cast<std::chrono::milliseconds>(record_t2 - record_t1).count();
902   - // LOG_INFO("Record per frame cost time: {} ms fps: {}", record_time/vec_gpuMem.size(), 1000/(record_time/vec_gpuMem.size()));
903   - for(int i=0;i < vec_gpuMem.size(); i++){
904   - DeviceMemory* mem = vec_gpuMem[i];
905   - if(mem->getSize() <= 0){
906   - continue;
907   - }
908   - delete mem;
909   - mem = nullptr;
910   - }
911   - vec_gpuMem.clear();
912   - vector<DeviceMemory*>().swap(vec_gpuMem); // free.
913   -
914   - }
915   -
916   - aclrtDestroyContext(ctx);
917   - aclrtResetDevice(m_devId);
918   - LOG_INFO("algorthim_process_thread exit.");
919   -
920   - return 0;
921   -}
922   -
923   -
924   -int CMultiSourceProcess::algorthim_road_seg(vector<DeviceMemory*> vec_gpuMem) {
925   -
926   - vector<string> roadSeg_task_id;
927   - vector<sy_img> roadSeg_imgs;
928   - vector<DeviceMemory*> vec_segMem;
929   - m_RoadSegTaskMtx.lock();
930   - for (int i = 0; i < vec_gpuMem.size(); i++) {
931   - DeviceMemory* mem = vec_gpuMem[i];
932   - long long frame_number = mem->getFrameNb();
933   - if (m_RoadSegTaskMap[mem->getId()].isseg && frame_number % 15000) { //10min重复一次
934   - continue;
935   - }
936   - LOG_INFO("task: {} frame_num: {} perform road_seg.", mem->getId(), mem->getFrameNb());
937   - sy_img img;
938   - img.w_ = mem->getWidth(); img.h_ = mem->getHeight();
939   - img.c_ = mem->getChannel(); img.data_ = mem->getMem();
940   - roadSeg_imgs.push_back(img);
941   - roadSeg_task_id.push_back(mem->getId());
942   - vec_segMem.push_back(mem);
943   - m_RoadSegTaskMap[mem->getId()].isseg = true; //
944   - }
945   - m_RoadSegTaskMtx.unlock();
946   -
947   - /* 待检测的图片不为空 开始检测 */
948   - if (!roadSeg_imgs.empty()) {
949   - vector<vector<vector<int>>> traffic_region, fence_region; //道路区域(多个)
950   - vector<vector<int>> labels, fence_labels; //道路区域对应的类别:机动车道、非机动车道等
951   - seg_process.process_gpu(roadSeg_imgs.data(), vec_segMem, roadSeg_task_id, traffic_region, labels);
952   - seg3cls_process.process_gpu(roadSeg_imgs.data(), vec_segMem, roadSeg_task_id, fence_region, fence_labels);
953   -
954   - int bidx = 0;
955   - m_RoadSegTaskMtx.lock();
956   - for (auto _task_id_iter = roadSeg_task_id.begin(); _task_id_iter != roadSeg_task_id.end(); ++_task_id_iter, ++ bidx) {
957   - auto task_id = *_task_id_iter;
958   - m_RoadSegTaskMap[task_id].traffic_region.assign(traffic_region[bidx].begin(), traffic_region[bidx].end());
959   - m_RoadSegTaskMap[task_id].labels.assign(labels[bidx].begin(), labels[bidx].end());
960   - m_RoadSegTaskMap[task_id].fence_region.assign(fence_region[bidx].begin(), fence_region[bidx].end());
961   - m_RoadSegTaskMap[task_id].fence_labels.assign(fence_labels[bidx].begin(), fence_labels[bidx].end());
962   - m_RoadSegTaskMap[task_id].isseg = true;
963   - }
964   - m_RoadSegTaskMtx.unlock();
965   - }
966   - vec_segMem.clear();
967   - roadSeg_task_id.clear();
968   - roadSeg_imgs.clear();
969   -
970   - return 0;
971   -}
972   -
973   -int CMultiSourceProcess::algorthim_vpt(vector<DeviceMemory*> vec_gpuMem){
974   -
975   - vector<string> vpt_interest_task_id;
976   - vector<sy_img> vpt_interest_imgs;
977   - vector<DeviceMemory*> vec_vptMem;
978   - for (int i = 0; i < vec_gpuMem.size(); i++) {
979   - DeviceMemory* mem = vec_gpuMem[i];
980   - if (!task_has_vpt_algor(mem->getId())){
981   - continue;
982   - }
983   -
984   - sy_img img;
985   - img.w_ = mem->getWidth(); img.h_ = mem->getHeight();
986   - img.c_ = mem->getChannel(); img.data_ = mem->getMem();
987   - vpt_interest_imgs.push_back(img);
988   - vpt_interest_task_id.push_back(mem->getId());
989   - vec_vptMem.push_back(mem);
990   - }
991   -
992   - /* 待检测的图片不为空 开始检测 */
993   - if (!vpt_interest_imgs.empty()) {
994   - vector<vector<int>> deleteObjectID;
995   - deleteObjectID.resize(vpt_interest_task_id.size());
996   - vector<vector<onelevel_det_result>> unUsedResult;
997   - vector<onelevel_det_result> vptResult(0);
998   -
999   - /* 一级检测器,内部已完成跟踪操作 */
1000   - vpt_process.process_gpu(vpt_interest_imgs.data(), vpt_interest_task_id, vptResult, deleteObjectID, unUsedResult); // do det & track.
1001   - // vpt_process.process_gpu(vpt_interest_imgs.data(), vec_vptMem, vpt_interest_task_id, vptResult, deleteObjectID, unUsedResult); // debug
1002   - m_snapshot_reprocessing->screen_effective_snapshot(vptResult);
1003   -
1004   -#ifndef VEHICLE_MULTI_BOXES
1005   - /* 快照优选(内部可实现不同的快照优选策略) */
1006   - m_snapshot_reprocessing->update_bestsnapshot(vec_vptMem, vptResult, deleteObjectID);
1007   - /* for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)*/
1008   - vehicle_snapshot(vpt_interest_task_id, deleteObjectID);
1009   -#else
1010   - algorithm_vehicle_relult(vec_vptMem, vptResult, deleteObjectID);
1011   -
1012   - send_locus_finished_msg(vpt_interest_task_id, deleteObjectID);
1013   -#endif
1014   -
1015   -// #ifdef WITH_SECOND_PROCESS
1016   - /* for pedestrian safety det. 行人安全分析算法模块 */
1017   - // algorthim_pedestrian_safety(vpt_interest_task_id, vpt_interest_imgs,vptResult);
1018   -
1019   - // 逆行
1020   - algorthim_retrograde(vpt_interest_task_id, vec_vptMem, vptResult);
1021   - retrograde_snapshot(vpt_interest_task_id, deleteObjectID);
1022   - // 闯入
1023   - algorthim_trespass(vpt_interest_task_id, vec_vptMem, vptResult, deleteObjectID);
1024   - trespass_snapshot(vpt_interest_task_id, deleteObjectID);
1025   -
1026   -// #endif
1027   -#ifdef USE_VILLAGE
1028   - // 轨迹记录
1029   - trace_record(vpt_interest_task_id, vptResult);
1030   - // 农村违法分析的快照缓存
1031   - m_snapshot_reprocessing->update_village_bestsnapshot(vec_vptMem, vptResult, deleteObjectID);
1032   - // 三轮车载人
1033   - algorithm_tricycle_manned(vpt_interest_task_id, vec_vptMem, vptResult);
1034   - // 货车载人
1035   - algorithm_truck_manned(vpt_interest_task_id, vec_vptMem, vptResult);
1036   - // 二轮车超员/未戴盔
1037   - algorithm_motor_hs_process(vpt_interest_task_id, vec_vptMem, vptResult);
1038   - // 二轮车驾乘人员使用手机(人骑车辅助版本)
1039   - algorithm_motor_refit_phone_process(vpt_interest_task_id, vec_vptMem, vptResult);
1040   - /*// 二轮车驾乘人员使用手机
1041   - algorithm_motor_phone_process(vpt_interest_task_id, vec_vptMem, vptResult);*/
1042   - // 电动车改装(加雨棚)
1043   - algorithm_motor_refit_process(vpt_interest_task_id, vec_vptMem, vptResult);
1044   - // 行人/二轮车闯红灯
1045   - algorithm_traffic_light_process(vpt_interest_task_id, vec_vptMem, vptResult);
1046   - // 与道路分割相关的算法
1047   - algorithm_roadseg_correlation_process(vpt_interest_task_id, vec_vptMem, vptResult);
1048   - village_snapshot(vpt_interest_task_id, vec_vptMem, deleteObjectID);
1049   -#endif
1050   -
1051   - vptResult.clear();
1052   - unUsedResult.clear();
1053   - // deleteObjectID.clear();
1054   - for (int i = 0; i < deleteObjectID.size(); i++) {
1055   - vector<int>().swap(deleteObjectID[i]); // free.
1056   - }
1057   - vector<vector<int>>().swap(deleteObjectID); // free.
1058   - }
1059   -
1060   - vec_vptMem.clear();
1061   - vpt_interest_task_id.clear();
1062   - vpt_interest_imgs.clear();
1063   -
1064   - return 0;
1065   -}
1066   -
1067   -int CMultiSourceProcess::algorithm_vehicle_relult(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, vector<vector<int>>& delete_object_id) {
1068   -
1069   - vector<multi_obj_data_t> results = m_snapshot_reprocessing->get_vehicle_snapshot(vec_devMem, vptResult, skip_frame_);
1070   -
1071   - VPCUtil* pVPCUtil = VPCUtil::getInstance();
1072   - for (auto &result : results) {
1073   - if(result.objs.size() <= 0){
1074   - continue;
1075   - }
1076   - auto task_id = result.task_id;
1077   - auto task_other_params = m_task_param_manager->get_task_other_param(task_id);
1078   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::VEHICLE_SNAPSHOT);
1079   - if (algor_other_params == task_other_params->end()) {
1080   - LOG_ERROR("taskId {} not found algor {}", task_id.c_str(), (int)algorithm_type_t::VEHICLE_SNAPSHOT);
1081   - continue;
1082   - }
1083   -
1084   - vector<vpc_img_info> vec_obj_info_list = pVPCUtil->crop_batch(result.memPtr, result.objs);
1085   - if(vec_obj_info_list.size() != result.objs.size()){
1086   - LOG_ERROR("vpc_crop size error !");
1087   - VPCUtil::vpc_imgList_release(vec_obj_info_list);
1088   - continue;
1089   - }
1090   -
1091   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1092   -
1093   - std::string cur_timestamp_ms = std::to_string(helpers::timer::get_cur_time_ms());
1094   - const std::string fpath_origin = basic_param->result_folder + helpers::os::sep + task_id + "_" +
1095   - std::to_string(result.objs.size()) + "_" + std::to_string(result.id) + "_" + cur_timestamp_ms + ".jpg";
1096   -
1097   - ImgSaveInfo saveInfo;
1098   - saveInfo.file_path = fpath_origin;
1099   - saveInfo.img_info = VPCUtil::vpc_devMem2vpcImg(result.memPtr);
1100   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(saveInfo);
1101   -
1102   - // 保存抠图并发MQ
1103   - for(int i =0; i < result.objs.size(); i++){
1104   - video_object_info obj = result.objs[i];
1105   -
1106   - std::string cur_timestamp_ms = std::to_string(helpers::timer::get_cur_time_ms());
1107   - const std::string fpath_roi = basic_param->result_folder_little + helpers::os::sep + task_id + "_" +
1108   - std::to_string(obj.object_id) + "_" + cur_timestamp_ms + ".jpg";
1109   -
1110   - video_object_snapshot new_obj_ss_info;
1111   - new_obj_ss_info.analysisRes = nullptr;
1112   - new_obj_ss_info.object_id = obj.object_id;
1113   - new_obj_ss_info.obj_info.set_data(obj.index, obj.confidence, obj.left, obj.top, obj.right, obj.bottom);
1114   - strcpy(new_obj_ss_info.task_id, task_id.c_str());
1115   - strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str());
1116   - strcpy(new_obj_ss_info.snapshot_image_path, fpath_roi.c_str());
1117   - new_obj_ss_info.nFinished = 0;
1118   - string json_str = helpers::gen_json::gen_multi_obj_json(algorithm_type_t::VEHICLE_SNAPSHOT, new_obj_ss_info);
1119   -
1120   - ImgSaveInfo save_info;
1121   - save_info.file_path = fpath_roi;
1122   - save_info.img_info = vec_obj_info_list[i];
1123   - save_info.json_str = json_str;
1124   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info);
1125   -
1126   - OBJ_KEY obj_key{task_id, obj.object_id};
1127   - // 保存有轨迹的object记录,轨迹结束时需要发消息
1128   - std::lock_guard<std::mutex> l(m_total_mutex);
1129   - m_total_snapshot_info_multi_object.insert(obj_key);
1130   - }
1131   -
1132   - vec_obj_info_list.clear();
1133   - }
1134   -
1135   - return 0;
1136   -}
1137   -
1138   -void CMultiSourceProcess::send_locus_finished_msg(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID){
1139   - auto task_iter = vpt_interest_task_id.begin();
1140   -
1141   - for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
1142   - {
1143   - string task_id = *task_iter;
1144   - for (int &j : deleteObjectID[i]) // loop algor type.
1145   - {
1146   - OBJ_KEY obj_key = {task_id, j};
1147   -
1148   - auto task_param_ptr = m_task_param_manager->get_task_algor_param(task_id);
1149   -
1150   - // 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源
1151   - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_SNAPSHOT) != task_param_ptr->vehicle_algors.end()) {
1152   - std::lock_guard<std::mutex> l(m_total_mutex);
1153   - if (m_total_snapshot_info_multi_object.find(obj_key) != m_total_snapshot_info_multi_object.end()) {
1154   - video_object_snapshot new_obj_ss_info;
1155   - new_obj_ss_info.object_id = j;
1156   - new_obj_ss_info.nFinished = 1;
1157   - strcpy(new_obj_ss_info.task_id, task_id.c_str());
1158   - string json_str = helpers::gen_json::gen_multi_obj_json(algorithm_type_t::VEHICLE_SNAPSHOT, new_obj_ss_info);
1159   - // 通知结束的轨迹
1160   - ImgSaveInfo save_info;
1161   - save_info.json_str = json_str;
1162   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(save_info);
1163   -
1164   - m_total_snapshot_info_multi_object.erase(obj_key);
1165   - }
1166   - }
1167   - }
1168   - }
1169   -}
1170   -
1171   -// for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)
1172   -void CMultiSourceProcess::vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) {
1173   - auto task_iter = vpt_interest_task_id.begin();
1174   -
1175   - for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
1176   - {
1177   - for (int &j : deleteObjectID[i]) // loop algor type.
1178   - {
1179   - OBJ_KEY obj_key = {*task_iter, j};
1180   - // 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源
1181   - vehicle_locus_finished(obj_key);
1182   - }
1183   - }
1184   -}
1185   -
1186   -void CMultiSourceProcess::vehicle_locus_finished(const OBJ_KEY obj_key) {
1187   -
1188   - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id);
1189   - if (task_param_ptr == nullptr){
1190   - return;
1191   - }
1192   -
1193   - // 该路任务开启了抓拍功能 开始抓拍保存;若未开启抓拍,清空显存资源
1194   - if ((task_param_ptr->human_algors.find(algorithm_type_t::HUMAN_SNAPSHOT) == task_param_ptr->human_algors.end() &&
1195   - task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_SNAPSHOT) != task_param_ptr->vehicle_algors.end() &&
1196   - task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_SNAPSHOT) != task_param_ptr->nonmotor_vehicle_algors.end())) {
1197   - return;
1198   - }
1199   -
1200   - map<OBJ_KEY, OBJ_VALUE> _total_snapshot_info = m_snapshot_reprocessing->get_total_snapshot_info();
1201   - if(_total_snapshot_info.size() <= 0){
1202   - return;
1203   - }
1204   -
1205   - LOG_DEBUG("_total_snapshot_info size: {}", _total_snapshot_info.size());
1206   -
1207   - auto it = _total_snapshot_info.find(obj_key);
1208   - if (it == _total_snapshot_info.end()) {
1209   - return;
1210   - }
1211   -
1212   - const OBJ_VALUE obj_value = it->second;
1213   -
1214   - auto task_other_param_map = m_task_param_manager->get_task_other_params();
1215   - auto it_other_param = task_other_param_map.find(obj_key.video_id);
1216   - if(it_other_param == task_other_param_map.end()){
1217   - return;
1218   - }
1219   - auto task_other_param = it_other_param->second;
1220   -
1221   - LOG_DEBUG("algor_type");
1222   - auto algor_type = index_to_algo_type[obj_value.index.index];
1223   -
1224   - LOG_DEBUG("task_other_param");
1225   - auto it_algor_type = task_other_param.find(algor_type);
1226   - if(it_algor_type == task_other_param.end()) {
1227   - return;
1228   - }
1229   -
1230   - LOG_DEBUG("algor_param");
1231   - auto algor_param = (algor_config_param_snapshot *)it_algor_type->second->algor_param;
1232   - if(algor_param == nullptr) {
1233   - return;
1234   - }
1235   -
1236   - if (obj_value.confidence <= algor_param->threshold) {
1237   - LOG_DEBUG("Snapshot conf filter ({} vs {})", obj_value.confidence, algor_param->threshold);
1238   - // 删除记录,同时释放显存
1239   - m_snapshot_reprocessing->release_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, true);
1240   - return;
1241   - }
1242   -
1243   - LOG_DEBUG("cur_param");
1244   - const algor_basic_config_param_t *cur_param = it_algor_type->second->basic_param;
1245   - // const algor_basic_config_param_t *cur_param = task_other_param[algor_type]->basic_param;
1246   - if(cur_param == nullptr) {
1247   - return;
1248   - }
1249   -
1250   - // 原图
1251   - LOG_DEBUG("原图");
1252   - std::string cur_timestamp_ms = std::to_string(helpers::timer::get_cur_time_ms());
1253   - std::string fpath_origin = std::string(cur_param->result_folder) + helpers::os::sep + obj_key.video_id + "_" +
1254   - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".jpg";
1255   -
1256   - ImgSaveInfo origin_save_info;
1257   - origin_save_info.file_path = fpath_origin;
1258   - origin_save_info.img_info = obj_value.snapShot;
1259   - origin_save_info.obj_rect = obj_value.obj_pos;
1260   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info);
1261   -
1262   - {
1263   - LOG_DEBUG("抠图");
1264   - // 抠图
1265   - string json_str = "";
1266   - string object_file_name = std::string(cur_param->result_folder_little) + helpers::os::sep + obj_key.video_id + "_" +
1267   - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".jpg";
1268   -
1269   -#ifdef POST_USE_RABBITMQ
1270   - video_object_snapshot new_obj_ss_info;
1271   - new_obj_ss_info.analysisRes = nullptr;
1272   - new_obj_ss_info.object_id = obj_key.obj_id;
1273   - new_obj_ss_info.obj_info.set_data(obj_value.index.index, obj_value.confidence, obj_value.obj_pos.left_,
1274   - obj_value.obj_pos.top_, obj_value.obj_pos.left_ + obj_value.obj_pos.width_,
1275   - obj_value.obj_pos.top_ + obj_value.obj_pos.height_);
1276   - strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str());
1277   - strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str());
1278   - strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str());
1279   - json_str = helpers::gen_json::gen_snapshot_json(algor_type, new_obj_ss_info);
1280   -#endif
1281   -
1282   - ImgSaveInfo obj_save_info;
1283   - obj_save_info.file_path = object_file_name;
1284   - obj_save_info.img_info = obj_value.snapShotLittle;
1285   - obj_save_info.json_str = json_str;
1286   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info);
1287   - }
1288   -
1289   - LOG_DEBUG("仅删除记录,显存会在保存线程中删除");
1290   - // 仅删除记录,显存会在保存线程中删除
1291   - m_snapshot_reprocessing->release_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, false);
1292   -
1293   -}
1294   -
1295   -void CMultiSourceProcess::timing_snapshot_thread(){
1296   - LOG_INFO("timing_snapshot_thread start.");
1297   -
1298   - JpegUtil jpegUtil;
1299   - jpegUtil.jpeg_init(m_devId);
1300   -
1301   - DecoderManager* pDecManager = DecoderManager::getInstance();
1302   - while(!m_bfinish){
1303   - vector<DeviceMemory*> vec_devMem = pDecManager->timing_snapshot_all();
1304   - for (auto devMem : vec_devMem) {
1305   - auto task_id = devMem->getId();
1306   - auto task_other_params = m_task_param_manager->get_task_other_param(task_id);
1307   - if (task_other_params == nullptr)
1308   - continue;
1309   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::VIDEO_TIMING_SNAPSHOT);
1310   - if(algor_other_params != task_other_params->end()){
1311   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1312   - std::string cur_timestamp_ms = std::to_string(devMem->getTimesstamp());
1313   - const std::string fpath_ori = basic_param->result_folder + helpers::os::sep + task_id + "_" + cur_timestamp_ms + ".jpg";
1314   -
1315   - // LOG_DEBUG("snapshot save path: {}", fpath_ori.c_str());
1316   -
1317   - acldvppPicDesc *vpcDesc= acldvppCreatePicDesc();
1318   - acldvppSetPicDescData(vpcDesc, devMem->getMem());
1319   - acldvppSetPicDescFormat(vpcDesc, PIXEL_FORMAT_YUV_SEMIPLANAR_420);
1320   - acldvppSetPicDescWidth(vpcDesc, devMem->getWidth());
1321   - acldvppSetPicDescHeight(vpcDesc, devMem->getHeight());
1322   - acldvppSetPicDescWidthStride(vpcDesc, devMem->getWidthStride());
1323   - acldvppSetPicDescHeightStride(vpcDesc, devMem->getHeightStride());
1324   - acldvppSetPicDescSize(vpcDesc, devMem->getSize());
1325   -
1326   - jpegUtil.jpeg_encode(vpcDesc, fpath_ori);
1327   -
1328   - acldvppDestroyPicDesc(vpcDesc);
1329   - vpcDesc = nullptr;
1330   -
1331   - #ifdef POST_USE_RABBITMQ
1332   - auto json_str = helpers::gen_json::gen_vtsnapshot_json(task_id, fpath_ori);
1333   - mq_manager_->publish(mq_type_t::TIMING_SCREENSHORT_TASK_MQ, json_str.c_str(), true);
1334   - #endif
1335   - }
1336   - }
1337   -
1338   - for(auto devMem : vec_devMem){
1339   - delete devMem;
1340   - devMem = nullptr;
1341   - }
1342   - vec_devMem.clear();
1343   -
1344   - std::this_thread::sleep_for(std::chrono::milliseconds(600));
1345   - }
1346   -
1347   - jpegUtil.jpeg_release();
1348   -
1349   - LOG_INFO("timing_snapshot_thread end.");
1350   -}
1351   -
1352   -// 逆行
1353   -void CMultiSourceProcess::algorthim_retrograde(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1354   - vector<onelevel_det_result>& vptResult){
1355   - vector<string> interest_task_id;
1356   - vector<onelevel_det_result> interest_vpt_result;
1357   - vector<DeviceMemory*> interest_imgs;
1358   -
1359   - int _idx = 0;
1360   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1361   - ++_task_id_iter, ++_idx) // loop task_id;
1362   - {
1363   - auto task_id = *_task_id_iter;
1364   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1365   -
1366   - if (algor_map->find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != algor_map->end() ||
1367   - algor_map->find(algorithm_type_t::VEHICLE_RETROGRADE) != algor_map->end()) {
1368   - interest_task_id.emplace_back(task_id);
1369   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1370   - interest_vpt_result.emplace_back(vptResult[_idx]);
1371   - }
1372   - }
1373   -
1374   - // LOG_DEBUG("retrograde interest_vpt_result size: {}", interest_vpt_result.size());
1375   -
1376   - if (!interest_imgs.empty()){
1377   - pedestrian_vehicle_retrograde_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1378   - }
1379   -}
1380   -
1381   -// 闯入
1382   -void CMultiSourceProcess::algorthim_trespass(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1383   - vector<onelevel_det_result>& vptResult ,vector<vector<int>>& deleteObjectID){
1384   -
1385   - vector<string> trespass_interest_task_id;
1386   - vector<onelevel_det_result> trespass_interest_vpt_result;
1387   - vector<vector<int>> trespass_interest_deleteobjs;
1388   - vector<DeviceMemory*> trespass_interest_imgs;
1389   -
1390   - int _idx = 0;
1391   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1392   - ++_task_id_iter, ++_idx) // loop task_id;
1393   - {
1394   - auto task_id = *_task_id_iter;
1395   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1396   -
1397   - if (algor_map->find(algorithm_type_t::PEDESTRIAN_TRESPASS) != algor_map->end() ||
1398   - algor_map->find(algorithm_type_t::VEHICLE_TRESPASS) != algor_map->end()) {
1399   - trespass_interest_task_id.emplace_back(task_id);
1400   - trespass_interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1401   - trespass_interest_vpt_result.emplace_back(vptResult[_idx]);
1402   - trespass_interest_deleteobjs.emplace_back(deleteObjectID[_idx]);
1403   - }
1404   - }
1405   -
1406   - // LOG_DEBUG("trespass interest_vpt_result size: {}", trespass_interest_vpt_result.size());
1407   -
1408   - if (!trespass_interest_imgs.empty()) {
1409   - pedestrian_vehicle_trespass_.update_mstreams( trespass_interest_task_id, trespass_interest_imgs,
1410   - trespass_interest_vpt_result, trespass_interest_deleteobjs);
1411   - }
1412   -}
1413   -
1414   -// 轨迹记录
1415   -void CMultiSourceProcess::trace_record(vector<string>& vpt_interest_task_id, vector<onelevel_det_result>& vptResult) {
1416   - int bidx = 0;
1417   - for (auto iter = vpt_interest_task_id.begin(); iter != vpt_interest_task_id.end(); ++ iter, ++ bidx) {
1418   - auto task_id = *iter;
1419   - for (int c = 0; c < vptResult[bidx].obj_count; c++) {
1420   - //计算检测框坐标中心点
1421   - sy_point center_point;
1422   - center_point.x_ = vptResult[bidx].obj[c].left + (vptResult[bidx].obj[c].right - vptResult[bidx].obj[c].left) * 0.5;
1423   - // center_point.y_ = vptResult[bidx].obj[c].top + (vptResult[bidx].obj[c].bottom - vptResult[bidx].obj[c].top) * 0.85;
1424   - center_point.y_ = vptResult[bidx].obj[c].bottom;
1425   -
1426   - OBJ_KEY new_obj = { task_id, vptResult[bidx].obj[c].id };
1427   - m_TotalObjMtx.lock();
1428   - m_total_obj_info[new_obj].index = vptResult[bidx].obj[c].index;
1429   - m_total_obj_info[new_obj].center_points.push_back(center_point);
1430   - m_TotalObjMtx.unlock();
1431   -
1432   - }
1433   - }
1434   -}
1435   -
1436   -// 三轮车载人
1437   -void CMultiSourceProcess::algorithm_tricycle_manned(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1438   - vector<onelevel_det_result>& vptResult) {
1439   -
1440   - vector<string> interest_task_id;
1441   - vector<onelevel_det_result> interest_vpt_result;
1442   - vector<DeviceMemory*> interest_imgs;
1443   -
1444   - int _idx = 0;
1445   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1446   - ++_task_id_iter, ++_idx) // loop task_id;
1447   - {
1448   - auto task_id = *_task_id_iter;
1449   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1450   -
1451   - if (algor_map->find(algorithm_type_t::TRICYCLE_MANNED) != algor_map->end()) {
1452   - interest_task_id.emplace_back(task_id);
1453   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1454   - interest_vpt_result.emplace_back(vptResult[_idx]);
1455   - }
1456   - }
1457   -
1458   - // LOG_DEBUG("tricycle_manned interest_vpt_result size: {}", interest_vpt_result.size());
1459   -
1460   - if (!interest_imgs.empty()){
1461   - tricycle_manned_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1462   - }
1463   -}
1464   -
1465   -
1466   -// 货车载人
1467   -void CMultiSourceProcess::algorithm_truck_manned(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1468   - vector<onelevel_det_result>& vptResult) {
1469   -
1470   - vector<string> interest_task_id;
1471   - vector<onelevel_det_result> interest_vpt_result;
1472   - vector<DeviceMemory*> interest_imgs;
1473   -
1474   - int _idx = 0;
1475   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1476   - ++_task_id_iter, ++_idx) // loop task_id;
1477   - {
1478   - auto task_id = *_task_id_iter;
1479   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1480   -
1481   - if (algor_map->find(algorithm_type_t::TRUCK_MANNED) != algor_map->end()) {
1482   - interest_task_id.emplace_back(task_id);
1483   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1484   - interest_vpt_result.emplace_back(vptResult[_idx]);
1485   - }
1486   - }
1487   -
1488   - // LOG_DEBUG("truck_manned interest_vpt_result size: {}", interest_vpt_result.size());
1489   -
1490   - if (!interest_imgs.empty()){
1491   - m_TotalObjMtx.lock();
1492   - truck_manned_.update_mstreams(interest_task_id, interest_imgs, m_total_obj_info, interest_vpt_result);
1493   - m_TotalObjMtx.unlock();
1494   - }
1495   -}
1496   -
1497   -
1498   -// 二轮车超员/未戴盔
1499   -void CMultiSourceProcess::algorithm_motor_hs_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1500   - vector<onelevel_det_result>& vptResult) {
1501   -
1502   - vector<string> interest_task_id;
1503   - vector<onelevel_det_result> interest_vpt_result;
1504   - vector<DeviceMemory*> interest_imgs;
1505   -
1506   - int _idx = 0;
1507   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1508   - ++_task_id_iter, ++_idx) // loop task_id;
1509   - {
1510   - auto task_id = *_task_id_iter;
1511   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1512   -
1513   - if (algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET) != algor_map->end() ||
1514   - algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN) != algor_map->end()) {
1515   - interest_task_id.emplace_back(task_id);
1516   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1517   - interest_vpt_result.emplace_back(vptResult[_idx]);
1518   - }
1519   - }
1520   -
1521   - // LOG_DEBUG("motor_hsprocess interest_vpt_result size: {}", interest_vpt_result.size());
1522   -
1523   - if (!interest_imgs.empty()){
1524   - motor_hsprocess_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1525   - }
1526   -}
1527   -
1528   -// 二轮车驾乘人员使用手机(人骑车辅助版)
1529   -void CMultiSourceProcess::algorithm_motor_refit_phone_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1530   - vector<onelevel_det_result>& vptResult) {
1531   -
1532   - vector<string> interest_task_id;
1533   - vector<onelevel_det_result> interest_vpt_result;
1534   - vector<DeviceMemory*> interest_imgs;
1535   -
1536   - int _idx = 0;
1537   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1538   - ++_task_id_iter, ++_idx) // loop task_id;
1539   - {
1540   - auto task_id = *_task_id_iter;
1541   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1542   -
1543   - // if (algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE) != algor_map->end() ||
1544   - // algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_REFIT) != algor_map->end()) {
1545   - if (algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE) != algor_map->end()) {
1546   - interest_task_id.emplace_back(task_id);
1547   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1548   - interest_vpt_result.emplace_back(vptResult[_idx]);
1549   - }
1550   - }
1551   -
1552   - if (!interest_imgs.empty()){
1553   - motor_refit_phoneprocess_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1554   - }
1555   -}
1556   -/*// 二轮车驾乘人员使用手机
1557   -void CMultiSourceProcess::algorithm_motor_phone_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1558   - vector<onelevel_det_result>& vptResult) {
1559   -
1560   - vector<string> interest_task_id;
1561   - vector<onelevel_det_result> interest_vpt_result;
1562   - vector<DeviceMemory*> interest_imgs;
1563   -
1564   - int _idx = 0;
1565   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1566   - ++_task_id_iter, ++_idx) // loop task_id;
1567   - {
1568   - auto task_id = *_task_id_iter;
1569   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1570   -
1571   - if (algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE) != algor_map->end()) {
1572   - interest_task_id.emplace_back(task_id);
1573   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1574   - interest_vpt_result.emplace_back(vptResult[_idx]);
1575   - }
1576   - }
1577   -
1578   - if (!interest_imgs.empty()){
1579   - motor_phoneprocess_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1580   - }
1581   -}*/
1582   -
1583   -// 电动车改装(加雨棚)
1584   -void CMultiSourceProcess::algorithm_motor_refit_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1585   - vector<onelevel_det_result>& vptResult) {
1586   -
1587   - vector<string> interest_task_id;
1588   - vector<onelevel_det_result> interest_vpt_result;
1589   - vector<DeviceMemory*> interest_imgs;
1590   -
1591   - int _idx = 0;
1592   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1593   - ++_task_id_iter, ++_idx) // loop task_id;
1594   - {
1595   - auto task_id = *_task_id_iter;
1596   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1597   -
1598   - if (algor_map->find(algorithm_type_t::NONMOTOR_VEHICLE_REFIT) != algor_map->end()) {
1599   - interest_task_id.emplace_back(task_id);
1600   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1601   - interest_vpt_result.emplace_back(vptResult[_idx]);
1602   - }
1603   - }
1604   -
1605   - if (!interest_imgs.empty()){
1606   - motor_refitprocess_.update_mstreams(interest_task_id, interest_imgs, interest_vpt_result);
1607   - }
1608   -}
1609   -
1610   -
1611   -// 行人/二轮车闯红灯
1612   -void CMultiSourceProcess::algorithm_traffic_light_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1613   - vector<onelevel_det_result>& vptResult) {
1614   -
1615   - vector<string> interest_task_id;
1616   - vector<onelevel_det_result> interest_vpt_result;
1617   - vector<DeviceMemory*> interest_imgs;
1618   - vector<sy_img> sy_interest_imgs;
1619   - vector<vector<vector<int>>> interest_traffic_region;
1620   - vector<vector<int>> interest_labels;
1621   -
1622   - int _idx = 0;
1623   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1624   - ++_task_id_iter, ++_idx) // loop task_id;
1625   - {
1626   - auto task_id = *_task_id_iter;
1627   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1628   -
1629   - if (algor_map->find(algorithm_type_t::PERSON_RUNNING_REDLIGHTS) != algor_map->end() ||
1630   - algor_map->find(algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS) != algor_map->end()) {
1631   -
1632   - m_RoadSegTaskMtx.lock();
1633   - if (!m_RoadSegTaskMap[task_id].isseg) continue;
1634   - else {
1635   - interest_traffic_region.push_back(m_RoadSegTaskMap[task_id].traffic_region);
1636   - interest_labels.push_back(m_RoadSegTaskMap[task_id].labels);
1637   - }
1638   - m_RoadSegTaskMtx.unlock();
1639   -
1640   - DeviceMemory* mem = vpt_interest_imgs[_idx];
1641   - sy_img img;
1642   - img.w_ = mem->getWidth(); img.h_ = mem->getHeight();
1643   - img.c_ = mem->getChannel(); img.data_ = mem->getMem();
1644   - sy_interest_imgs.push_back(img);
1645   -
1646   - interest_task_id.emplace_back(task_id);
1647   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1648   - interest_vpt_result.emplace_back(vptResult[_idx]);
1649   - }
1650   - }
1651   -
1652   - if (!interest_imgs.empty()){
1653   - m_TotalObjMtx.lock();
1654   - traffic_lightprocess_.update_mstreams(interest_task_id, sy_interest_imgs, interest_imgs, interest_traffic_region, interest_labels, m_total_obj_info, interest_vpt_result);
1655   - m_TotalObjMtx.unlock();
1656   - }
1657   -}
1658   -
1659   -
1660   -// 与道路分割相关的算法
1661   -void CMultiSourceProcess::algorithm_roadseg_correlation_process(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
1662   - vector<onelevel_det_result>& vptResult) {
1663   -
1664   - vector<string> interest_task_id;
1665   - vector<onelevel_det_result> interest_vpt_result;
1666   - vector<DeviceMemory*> interest_imgs;
1667   - vector<sy_img> sy_interest_imgs;
1668   - vector<vector<vector<int>>> interest_traffic_region, interest_fence_region;
1669   - vector<vector<int>> interest_labels, interest_fence_labels;
1670   -
1671   - int _idx = 0;
1672   - for (auto _task_id_iter = vpt_interest_task_id.begin(); _task_id_iter != vpt_interest_task_id.end();
1673   - ++_task_id_iter, ++_idx) // loop task_id;
1674   - {
1675   - auto task_id = *_task_id_iter;
1676   - auto algor_map = m_task_param_manager->get_task_other_param(task_id);
1677   -
1678   - if (algor_map->find(algorithm_type_t::PERSON_IN_VEHICLELANE) != algor_map->end() ||
1679   - algor_map->find(algorithm_type_t::NONMOTOR_IN_VEHICLELANE) != algor_map->end() ||
1680   - algor_map->find(algorithm_type_t::NONMOTOR_CEOSSPARKLINE) != algor_map->end() ||
1681   - algor_map->find(algorithm_type_t::PERSON_CROSS) != algor_map->end() ||
1682   - algor_map->find(algorithm_type_t::NONMOTOR_WRONGDIRECTION) != algor_map->end() ||
1683   - algor_map->find(algorithm_type_t::VEHICLE_WRONGDIRECTION) != algor_map->end() ||
1684   - algor_map->find(algorithm_type_t::VEHICLE_NOTGIVEWAY) != algor_map->end() ||
1685   - algor_map->find(algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND) != algor_map->end() ||
1686   - algor_map->find(algorithm_type_t::VEHICLE_NOTDECELERATION) != algor_map->end()
1687   - ) {
1688   -
1689   - m_RoadSegTaskMtx.lock();
1690   - if (!m_RoadSegTaskMap[task_id].isseg) continue;
1691   - else {
1692   - interest_traffic_region.push_back(m_RoadSegTaskMap[task_id].traffic_region);
1693   - interest_labels.push_back(m_RoadSegTaskMap[task_id].labels);
1694   - interest_fence_region.push_back(m_RoadSegTaskMap[task_id].fence_region);
1695   - interest_fence_labels.push_back(m_RoadSegTaskMap[task_id].fence_labels);
1696   - }
1697   - m_RoadSegTaskMtx.unlock();
1698   -
1699   - DeviceMemory* mem = vpt_interest_imgs[_idx];
1700   - sy_img img;
1701   - img.w_ = mem->getWidth(); img.h_ = mem->getHeight();
1702   - img.c_ = mem->getChannel(); img.data_ = mem->getMem();
1703   - sy_interest_imgs.push_back(img);
1704   -
1705   - interest_task_id.emplace_back(task_id);
1706   - interest_imgs.emplace_back(vpt_interest_imgs[_idx]);
1707   - interest_vpt_result.emplace_back(vptResult[_idx]);
1708   - }
1709   - }
1710   -
1711   - if (!interest_imgs.empty()){
1712   - m_TotalObjMtx.lock();
1713   - roadseg_corrprocess_.update_mstreams(interest_task_id, sy_interest_imgs, interest_imgs, interest_traffic_region, interest_labels, interest_fence_region, interest_fence_labels, m_total_obj_info, interest_vpt_result);
1714   - m_TotalObjMtx.unlock();
1715   - }
1716   -}
1717   -
1718   -// for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)
1719   -void CMultiSourceProcess::village_snapshot(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vec_vptMem, vector<vector<int>> deleteObjectID) {
1720   - auto task_iter = vpt_interest_task_id.begin();
1721   - for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
1722   - {
1723   - auto task_id = *task_iter;
1724   - for (int &j : deleteObjectID[i]) // loop algor type.
1725   - {
1726   - OBJ_KEY obj_key = {*task_iter, j};
1727   - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id);
1728   - auto algor_config_param = m_task_param_manager->get_task_algor_params();
1729   - auto algor_param = m_task_param_manager->get_task_other_params();
1730   - if (!(algor_config_param.count(task_id) && algor_param.count(task_id))) continue;
1731   - bool village_alarm = false;
1732   - std::string video_folder = "", result_folder = "", result_folder_little = ""; //要求各事件使用同一个视频保存地址,否则会被最后一个事件的地址覆盖
1733   - auto task_other_params = m_task_param_manager->get_task_other_param(task_id);
1734   - std::vector<int> algorithm_types;
1735   - bool save_single_algor_pic = false; // 是否保存单算法的报警图片(若设置为true需先去掉算法内部注释!!!)
1736   -
1737   - if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::TRICYCLE_MANNED) != task_param_ptr->nonmotor_vehicle_algors.end()) {
1738   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::TRICYCLE_MANNED);
1739   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1740   -
1741   - auto result = tricycle_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRICYCLE_MANNED});
1742   - if (result.get()) {
1743   - village_alarm = true;
1744   - algorithm_types.push_back((int)algorithm_type_t::TRICYCLE_MANNED);
1745   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1746   - // 原图及抠图
1747   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1748   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1749   -
1750   - if (save_single_algor_pic) {
1751   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRICYCLE_MANNED);
1752   - save_snapshot_process(obj_key, algorithm_type_t::TRICYCLE_MANNED, src_img, roi_img, 0, json_str);
1753   - } else {
1754   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1755   - }
1756   -
1757   - }
1758   - }
1759   -
1760   - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::TRUCK_MANNED) != task_param_ptr->vehicle_algors.end()) {
1761   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::TRUCK_MANNED);
1762   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1763   -
1764   - auto result = truck_manned_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::TRUCK_MANNED});
1765   - if (result.get()) {
1766   - village_alarm = true;
1767   - algorithm_types.push_back((int)algorithm_type_t::TRUCK_MANNED);
1768   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1769   - // 原图及抠图
1770   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1771   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1772   -
1773   - if (save_single_algor_pic) {
1774   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::TRUCK_MANNED);
1775   - save_snapshot_process(obj_key, algorithm_type_t::TRUCK_MANNED, src_img, roi_img, 0, json_str);
1776   - } else {
1777   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1778   - }
1779   -
1780   - }
1781   - }
1782   -
1783   - vector<algo_type> motorhs_algor = {algorithm_type_t::NONMOTOR_VEHICLE_NOHELMET, algorithm_type_t::NONMOTOR_VEHICLE_OVERMAN};
1784   - for (size_t idx = 0; idx < motorhs_algor.size(); ++idx) {
1785   - if (algor_param[task_id].count(motorhs_algor.at(idx))) {
1786   - const auto &algor_other_params = task_other_params->find(motorhs_algor.at(idx));
1787   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1788   -
1789   - auto result = motor_hsprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, motorhs_algor.at(idx)});
1790   - if (result.get()) {
1791   - village_alarm = true;
1792   - algorithm_types.push_back((int)motorhs_algor.at(idx));
1793   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1794   - // 原图及抠图
1795   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1796   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1797   -
1798   - if (save_single_algor_pic) {
1799   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, motorhs_algor.at(idx));
1800   - save_snapshot_process(obj_key, motorhs_algor.at(idx), src_img, roi_img, 0, json_str);
1801   - } else {
1802   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1803   - }
1804   -
1805   - }
1806   - }
1807   - }
1808   -
1809   - if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE) != task_param_ptr->nonmotor_vehicle_algors.end()) {
1810   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE);
1811   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1812   -
1813   - // auto result = motor_phoneprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE});
1814   - auto result = motor_refit_phoneprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE});
1815   - if (result.get()) {
1816   - village_alarm = true;
1817   - algorithm_types.push_back((int)algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE);
1818   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1819   - // 原图及抠图
1820   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1821   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1822   -
1823   - if (save_single_algor_pic) {
1824   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE);
1825   - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_USEPHONE, src_img, roi_img, 0, json_str);
1826   - } else {
1827   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1828   - }
1829   -
1830   - }
1831   - }
1832   -
1833   - if (task_param_ptr->nonmotor_vehicle_algors.find(algorithm_type_t::NONMOTOR_VEHICLE_REFIT) != task_param_ptr->nonmotor_vehicle_algors.end()) {
1834   - const auto &algor_other_params = task_other_params->find(algorithm_type_t::NONMOTOR_VEHICLE_REFIT);
1835   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1836   -
1837   - auto result = motor_refitprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_REFIT});
1838   - // auto result = motor_refit_phoneprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algorithm_type_t::NONMOTOR_VEHICLE_REFIT});
1839   - if (result.get()) {
1840   - village_alarm = true;
1841   - algorithm_types.push_back((int)algorithm_type_t::NONMOTOR_VEHICLE_REFIT);
1842   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1843   - // 原图及抠图
1844   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1845   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1846   -
1847   - if (save_single_algor_pic) {
1848   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, algorithm_type_t::NONMOTOR_VEHICLE_REFIT);
1849   - save_snapshot_process(obj_key, algorithm_type_t::NONMOTOR_VEHICLE_REFIT, src_img, roi_img, 0, json_str);
1850   - } else {
1851   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1852   - }
1853   -
1854   - }
1855   - }
1856   -
1857   - vector<algo_type> trafficlight_algor = {algorithm_type_t::PERSON_RUNNING_REDLIGHTS, algorithm_type_t::NONMOTOR_RUNNING_REDLIGHTS};
1858   - for (size_t idx = 0; idx < trafficlight_algor.size(); ++idx) {
1859   - if (algor_param[task_id].count(trafficlight_algor.at(idx))) {
1860   - const auto &algor_other_params = task_other_params->find(trafficlight_algor.at(idx));
1861   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1862   -
1863   - auto result = traffic_lightprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, trafficlight_algor.at(idx)});
1864   - if (result.get()) {
1865   - village_alarm = true;
1866   - algorithm_types.push_back((int)trafficlight_algor.at(idx));
1867   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1868   - // 原图及抠图
1869   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1870   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1871   -
1872   - if (save_single_algor_pic) {
1873   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, trafficlight_algor.at(idx));
1874   - save_snapshot_process(obj_key, trafficlight_algor.at(idx), src_img, roi_img, 0, json_str);
1875   - } else {
1876   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1877   - }
1878   -
1879   - }
1880   - }
1881   - }
1882   -
1883   - vector<algo_type> roadseg_algor = {algorithm_type_t::PERSON_IN_VEHICLELANE, algorithm_type_t::PERSON_CROSS, algorithm_type_t::NONMOTOR_IN_VEHICLELANE, algorithm_type_t::NONMOTOR_CEOSSPARKLINE,
1884   - algorithm_type_t::NONMOTOR_WRONGDIRECTION, algorithm_type_t::VEHICLE_WRONGDIRECTION, algorithm_type_t::VEHICLE_NOTGIVEWAY, algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND, algorithm_type_t::VEHICLE_NOTDECELERATION };
1885   - for (size_t idx = 0; idx < roadseg_algor.size(); ++idx) {
1886   - if (algor_param[task_id].count(roadseg_algor.at(idx))) {
1887   - const auto &algor_other_params = task_other_params->find(roadseg_algor.at(idx));
1888   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
1889   -
1890   - auto result = roadseg_corrprocess_.get_result_by_objectid(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, roadseg_algor.at(idx)});
1891   - if (result.get()) {
1892   - village_alarm = true;
1893   - algorithm_types.push_back((int)roadseg_algor.at(idx));
1894   - video_folder = basic_param->video_folder; result_folder = basic_param->result_folder; result_folder_little = basic_param->result_folder_little;
1895   - // 原图及抠图
1896   - vpc_img_info src_img; src_img.pic_desc = result->origin_img_desc; src_img.task_id = obj_key.video_id;
1897   - vpc_img_info roi_img; roi_img.pic_desc = result->roi_img_desc; roi_img.task_id = obj_key.video_id; roi_img.object_id = obj_key.obj_id;
1898   -
1899   - if (save_single_algor_pic) {
1900   - auto json_str = helpers::gen_json::gen_manned_json(obj_key.video_id, obj_key.obj_id, result->box, roadseg_algor.at(idx));
1901   - save_snapshot_process(obj_key, roadseg_algor.at(idx), src_img, roi_img, 0, json_str);
1902   - } else {
1903   - VPCUtil::vpc_img_release(src_img); VPCUtil::vpc_img_release(roi_img);
1904   - }
1905   -
1906   - }
1907   - }
1908   - }
1909   -
1910   - m_TotalObjMtx.lock();
1911   - if (m_total_obj_info.find(obj_key) != m_total_obj_info.end()) {
1912   - vector<sy_point>().swap(m_total_obj_info[obj_key].center_points);
1913   - m_total_obj_info.erase(obj_key);
1914   - }
1915   - m_TotalObjMtx.unlock();
1916   -
1917   -
1918   - map<OBJ_KEY, OBJ_VALUES> _total_snapshot_info = m_snapshot_reprocessing->get_total_village_snapshot_info();
1919   - if(_total_snapshot_info.size() <= 0){
1920   - continue;
1921   - }
1922   -
1923   - LOG_DEBUG("_total_snapshot_info size: {}", _total_snapshot_info.size());
1924   - auto it = _total_snapshot_info.find(obj_key);
1925   - if (it == _total_snapshot_info.end()) {
1926   - continue;
1927   - }
1928   -
1929   -
1930   - // 推送轨迹结束的目标用于数量统计
1931   - {
1932   - const OBJ_VALUES obj_value = it->second;
1933   - std::vector<video_object_snapshot> algo_results;
1934   - std::vector<int> algorithm_types;
1935   - algorithm_types.push_back((int)algorithm_type_t::FLOW_STATISTICS);
1936   -#ifdef POST_USE_RABBITMQ
1937   - video_object_snapshot new_obj_ss_info;
1938   - new_obj_ss_info.analysisRes = nullptr;
1939   - new_obj_ss_info.object_id = obj_key.obj_id;
1940   - new_obj_ss_info.obj_info.set_data(obj_value.snapShots[1].index.index, obj_value.snapShots[1].confidence, 0, 0, 0, 0);
1941   - strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str());
1942   - strcpy(new_obj_ss_info.video_image_path, "");
1943   - strcpy(new_obj_ss_info.snapshot_image_path, "");
1944   - algo_results.push_back(new_obj_ss_info);
1945   - auto json_str = helpers::gen_json::gen_village_json(task_id, obj_key.obj_id, algorithm_types, algo_results, "");
1946   - mq_manager_->publish(mq_type_t::ALARM_MQ, json_str.c_str(), true);
1947   -#endif
1948   - }
1949   -
1950   -
1951   - if (village_alarm) {
1952   - const OBJ_VALUES obj_value = it->second;
1953   - std::string cur_timestamp_ms = std::to_string(helpers::timer::get_cur_time_ms());
1954   - // 视频
1955   - string video_file_name = video_folder + helpers::os::sep + obj_key.video_id + "_" +
1956   - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + ".mp4";
1957   -
1958   - string json_str = "";
1959   - std::vector<video_object_snapshot> algo_results;
1960   - for (int sp_idx = 0; sp_idx < 3; sp_idx ++) {
1961   - int num = sp_idx + 1;
1962   - // 原图
1963   - LOG_DEBUG("原图");
1964   - std::string fpath_origin = result_folder + helpers::os::sep + obj_key.video_id + "_" +
1965   - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + "_picnum_" + std::to_string(num) + ".jpg";
1966   -
1967   - ImgSaveInfo origin_save_info;
1968   - origin_save_info.file_path = fpath_origin;
1969   - origin_save_info.img_info = obj_value.snapShots[sp_idx].snapShot;
1970   - origin_save_info.obj_rect = obj_value.snapShots[sp_idx].obj_pos;
1971   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info);
1972   -
1973   -
1974   - LOG_DEBUG("抠图");
1975   - // 抠图
1976   - string object_file_name = result_folder_little + helpers::os::sep + obj_key.video_id + "_" +
1977   - std::to_string(obj_key.obj_id) + "_" + cur_timestamp_ms + "_picnum_" + std::to_string(num) + ".jpg";
1978   - ImgSaveInfo obj_save_info;
1979   - obj_save_info.file_path = object_file_name;
1980   - obj_save_info.img_info = obj_value.snapShots[sp_idx].snapShotLittle;
1981   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info);
1982   -
1983   -#ifdef POST_USE_RABBITMQ
1984   - video_object_snapshot new_obj_ss_info;
1985   - new_obj_ss_info.analysisRes = nullptr;
1986   - new_obj_ss_info.object_id = obj_key.obj_id;
1987   - new_obj_ss_info.obj_info.set_data(obj_value.snapShots[sp_idx].index.index, obj_value.snapShots[sp_idx].confidence, obj_value.snapShots[sp_idx].obj_pos.left_,
1988   - obj_value.snapShots[sp_idx].obj_pos.top_, obj_value.snapShots[sp_idx].obj_pos.left_ + obj_value.snapShots[sp_idx].obj_pos.width_,
1989   - obj_value.snapShots[sp_idx].obj_pos.top_ + obj_value.snapShots[sp_idx].obj_pos.height_);
1990   - strcpy(new_obj_ss_info.task_id, obj_key.video_id.c_str());
1991   - strcpy(new_obj_ss_info.video_image_path, fpath_origin.c_str());
1992   - strcpy(new_obj_ss_info.snapshot_image_path, object_file_name.c_str());
1993   - algo_results.push_back(new_obj_ss_info);
1994   -#endif
1995   - }
1996   -
1997   -#ifdef POST_USE_RABBITMQ
1998   - json_str = helpers::gen_json::gen_village_json(task_id, obj_key.obj_id, algorithm_types, algo_results, video_file_name);
1999   -#endif
2000   -
2001   - DeviceMemory* mem = vec_vptMem[i];
2002   - // string task_id = mem->getId();
2003   - RecoderInfo recoderInfo;
2004   - recoderInfo.task_id = task_id;
2005   - recoderInfo.object_id = std::to_string(j);
2006   - recoderInfo.recoderPath = video_file_name;
2007   - recoderInfo.frame_nb = mem->getFrameNb();
2008   - recoderInfo.mq_info = json_str;
2009   -
2010   - m_recoderinfo_queue_mtx.lock();
2011   - m_recoderinfo_queue.push_back(recoderInfo);
2012   - m_recoderinfo_queue_mtx.unlock();
2013   -
2014   - LOG_DEBUG("仅删除记录,显存会在保存线程中删除");
2015   - // 仅删除记录,显存会在保存线程中删除
2016   - m_snapshot_reprocessing->release_village_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, false);
2017   - }
2018   - else {
2019   - // 删除记录,同时释放显存
2020   - m_snapshot_reprocessing->release_village_finished_locus_snapshot(obj_key.video_id, obj_key.obj_id, true);
2021   - }
2022   -
2023   - }
2024   - }
2025   -
2026   -}
2027   -
2028   -
2029   -// for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)
2030   -void CMultiSourceProcess::retrograde_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) {
2031   - auto task_iter = vpt_interest_task_id.begin();
2032   -
2033   - for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
2034   - {
2035   - for (int &j : deleteObjectID[i]) // loop algor type.
2036   - {
2037   - OBJ_KEY obj_key = {*task_iter, j};
2038   - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id);
2039   -
2040   - /* 开启行人&机动车逆行算法模块,获取该目标的算法分析结果 返回结果+快照 最后释放资源 */
2041   - if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_RETROGRADE) != task_param_ptr->human_algors.end()){
2042   - retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_RETROGRADE);
2043   - }
2044   -
2045   - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_RETROGRADE) != task_param_ptr->vehicle_algors.end()){
2046   - retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_RETROGRADE);
2047   - }
2048   - }
2049   - }
2050   -}
2051   -
2052   -// for snapshot algorithm. 轨迹结束目标 做最后的结果返回(当前返回算法结果+快照保存路径)
2053   -void CMultiSourceProcess::trespass_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID) {
2054   - auto task_iter = vpt_interest_task_id.begin();
2055   -
2056   - for (int i = 0; i < deleteObjectID.size(); i++, ++task_iter) // loop taskId.
2057   - {
2058   - for (int &j : deleteObjectID[i]) // loop algor type.
2059   - {
2060   - OBJ_KEY obj_key = {*task_iter, j};
2061   - auto task_param_ptr = m_task_param_manager->get_task_algor_param(obj_key.video_id);
2062   -
2063   - if (task_param_ptr->human_algors.find(algorithm_type_t::PEDESTRIAN_TRESPASS) != task_param_ptr->human_algors.end()){
2064   - retrograde_trespass_alarm(obj_key, algorithm_type_t::PEDESTRIAN_TRESPASS);
2065   - }
2066   -
2067   - if (task_param_ptr->vehicle_algors.find(algorithm_type_t::VEHICLE_TRESPASS) != task_param_ptr->vehicle_algors.end()){
2068   - retrograde_trespass_alarm(obj_key, algorithm_type_t::VEHICLE_TRESPASS);
2069   - }
2070   - }
2071   - }
2072   -}
2073   -
2074   -
2075   -void CMultiSourceProcess::retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) {
2076   -
2077   - vector<ai_engine_module::result_data_t> results ;
2078   - if(algor_type == algorithm_type_t::PEDESTRIAN_RETROGRADE || algor_type == algorithm_type_t::VEHICLE_RETROGRADE){
2079   - results = pedestrian_vehicle_retrograde_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type});
2080   - } else if(algor_type == algorithm_type_t::PEDESTRIAN_TRESPASS || algor_type == algorithm_type_t::VEHICLE_TRESPASS){
2081   - results = pedestrian_vehicle_trespass_.get_results_by_id(ai_engine_module::obj_key_t{obj_key.obj_id, obj_key.video_id, algor_type});
2082   - } else {
2083   - return ;
2084   - }
2085   -
2086   -
2087   - bool bRetroGrade = true ;
2088   - for (unsigned idx = 0; idx < results.size(); ++idx) {
2089   - auto &result = results[idx];
2090   -
2091   - vpc_img_info src_img;
2092   - src_img.pic_desc = result.origin_img_desc;
2093   - src_img.task_id = obj_key.video_id;
2094   -
2095   - vpc_img_info roi_img;
2096   - roi_img.pic_desc = result.roi_img_desc;
2097   - roi_img.task_id = obj_key.video_id;
2098   - roi_img.object_id = obj_key.obj_id;
2099   -
2100   - if(bRetroGrade){
2101   - auto &&json_str = helpers::gen_json::gen_retrograde_json(obj_key.video_id, obj_key.obj_id, result.box, algor_type);
2102   - save_snapshot_process(obj_key, algor_type, src_img, roi_img, idx, json_str);
2103   - } else {
2104   - VPCUtil::vpc_img_release(src_img);
2105   - VPCUtil::vpc_img_release(roi_img);
2106   - }
2107   -
2108   - if (bRetroGrade == true) {
2109   - bRetroGrade = false;
2110   - }
2111   - }
2112   -}
2113   -
2114   -bool CMultiSourceProcess::save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type, vpc_img_info src_img, vpc_img_info roi_img,
2115   - const long long id,const std::string &json_str) {
2116   - auto task_other_params = m_task_param_manager->get_task_other_param(obj_key.video_id);
2117   - const auto &algor_other_params = task_other_params->find(algorithm_type);
2118   - if (algor_other_params == task_other_params->end()) {
2119   - LOG_ERROR("task_id {} not found {} error", obj_key.video_id, int(algorithm_type));
2120   - return false;
2121   - }
2122   -
2123   - const algor_basic_config_param_t *basic_param = algor_other_params->second->basic_param;
2124   -
2125   - std::string cur_time1 = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
2126   - const std::string fpath_origin = basic_param->result_folder + helpers::os::sep + obj_key.video_id + "_" +
2127   - std::to_string(obj_key.obj_id) + "_" + std::to_string(id) + "_" + cur_time1 + ".jpg";
2128   -
2129   - ImgSaveInfo obj_save_info;
2130   - obj_save_info.file_path = fpath_origin;
2131   - obj_save_info.img_info = src_img;
2132   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info);
2133   -
2134   - {
2135   - // 抠图保存
2136   - std::string cur_time2 = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
2137   - const std::string fpath_roi = basic_param->result_folder_little + helpers::os::sep + obj_key.video_id + "_" +
2138   - std::to_string(obj_key.obj_id) + "_" + std::to_string(id) + "_" + cur_time2 + ".jpg";
2139   -
2140   - // 调用快照保存后处理模块 将快照保存
2141   - ImgSaveInfo obj_save_info;
2142   - obj_save_info.file_path = fpath_roi;
2143   - obj_save_info.img_info = roi_img;
2144   - obj_save_info.json_str = json_str;
2145   -
2146   -#ifdef POST_USE_RABBITMQ
2147   - if(json_str.length() > 0) {
2148   - auto json_str_tmp = helpers::string::replace_all(json_str, helpers::gen_json::ORI_IMAGE_PATH_PLACEHOLDER, fpath_origin);
2149   - obj_save_info.json_str = helpers::string::replace_all(json_str_tmp, helpers::gen_json::ROI_IMAGE_PATH_PLACEHOLDER, fpath_roi);
2150   - }
2151   -#endif
2152   -
2153   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(obj_save_info);
2154   - }
2155   -
2156   - return true;
2157   -}
2158   -
2159   -// 人脸检测抓拍算法模块
2160   -void CMultiSourceProcess::algorthim_face_detect(vector<DeviceMemory*> vec_gpuMem) {
2161   -
2162   - vector<string> interest_task_list;
2163   - vector<sy_img> interest_imgs;
2164   - vector<DeviceMemory*> vec_vptMem;
2165   - for (int i = 0; i < vec_gpuMem.size(); i++) {
2166   - DeviceMemory* mem = vec_gpuMem[i];
2167   - if (!task_has_face_algor(mem->getId())){
2168   - continue;
2169   - }
2170   -
2171   - sy_img img;
2172   - img.w_ = mem->getWidth();
2173   - img.h_ = mem->getHeight();
2174   - img.c_ = mem->getChannel();
2175   - img.data_ = mem->getMem();
2176   - interest_imgs.push_back(img);
2177   - interest_task_list.push_back(mem->getId());
2178   - vec_vptMem.push_back(mem);
2179   - }
2180   -
2181   - if (!interest_imgs.empty()) {
2182   -
2183   - unsigned image_size = interest_imgs.size();
2184   -
2185   - // 人脸检测、跟踪
2186   - std::vector<onelevel_det_result> facedet_result(image_size);
2187   - std::vector<std::vector<int>> face_deleteObjectID(image_size);
2188   -
2189   - int ret = m_face_det_ai_engine.ai_engine_process_batch(interest_task_list, interest_imgs.data(), facedet_result, face_deleteObjectID);
2190   - if(ret <= 0){
2191   - LOG_ERROR("face detect error!!!");
2192   - return;
2193   - }
2194   -
2195   - // 跟踪结果送入快照更新
2196   - m_snapshot_reprocessing->update_face_bestsnapshot(vec_vptMem, facedet_result, face_deleteObjectID);
2197   -
2198   - // 保存已结束轨迹的目标
2199   - auto task_iter_face = interest_task_list.begin(); //debug by zsh
2200   - for (int i = 0; i < face_deleteObjectID.size(); i++) {
2201   - for (int j = 0; j < face_deleteObjectID[i].size(); ++j) {
2202   - OBJ_KEY deleteObj = {*task_iter_face, face_deleteObjectID[i][j]};
2203   - LOG_TRACE("{}: {}",*task_iter_face,face_deleteObjectID[i][j]);
2204   - face_locus_finished(deleteObj);
2205   - }
2206   - ++task_iter_face;
2207   - }
2208   -
2209   - for (int i = 0; i < face_deleteObjectID.size(); ++i){
2210   - std::vector<int>().swap(face_deleteObjectID[i]);
2211   - }
2212   - std::vector<std::vector<int>>().swap(face_deleteObjectID);
2213   - std::vector<onelevel_det_result>().swap(facedet_result);
2214   - }
2215   -}
2216   -
2217   -void CMultiSourceProcess::face_locus_finished(const OBJ_KEY obj_key) {
2218   - map<OBJ_KEY, OBJ_VALUE> _total_face_snapshot_info = m_snapshot_reprocessing->get_total_face_snapshot_info();
2219   -
2220   - auto it = _total_face_snapshot_info.find(obj_key);
2221   - if ( it == _total_face_snapshot_info.end()) {
2222   - return;
2223   - }
2224   -
2225   - LOG_DEBUG("face reprocessing {}:{}.", obj_key.video_id, obj_key.obj_id);
2226   -
2227   - auto task_other_params = m_task_param_manager->get_task_other_params();
2228   -
2229   - const algor_basic_config_param_t *cur_param =
2230   - ((algor_init_config_param_t *)(task_other_params[obj_key.video_id][algorithm_type_t::FACE_SNAPSHOT]))->basic_param;
2231   -
2232   - OBJ_VALUE obj_value = it->second;
2233   -
2234   - std::string cur_time1 = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
2235   -
2236   - // 原图
2237   - string fpath_src = std::string(cur_param->result_folder) + helpers::os::sep + obj_key.video_id + "_" +
2238   - std::to_string(obj_key.obj_id) + "_" + cur_time1 + ".jpg";
2239   -
2240   - ImgSaveInfo origin_save_info;
2241   - origin_save_info.file_path = fpath_src;
2242   - origin_save_info.img_info = obj_value.snapShot;
2243   - origin_save_info.obj_rect = obj_value.obj_pos;
2244   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(origin_save_info);
2245   -
2246   - // 抠图
2247   - string json_str = "";
2248   - std::string cur_time2 = std::to_string(helpers::timer::get_timestamp<std::chrono::milliseconds>());
2249   - string fpath_snapShotLittle = std::string(cur_param->result_folder_little) + helpers::os::sep + obj_key.video_id + "_" +
2250   - std::to_string(obj_key.obj_id) + "_" + cur_time2 + ".jpg";
2251   -
2252   -#ifdef POST_USE_RABBITMQ
2253   - json_str = helpers::gen_json::gen_face_detection_json( obj_key.video_id, obj_key.obj_id, fpath_snapShotLittle, fpath_src,
2254   - obj_value.position, obj_value.confidence, obj_value.landmark_point, 25);
2255   -#endif
2256   -
2257   - ImgSaveInfo roi_save_info;
2258   - roi_save_info.file_path = fpath_snapShotLittle;
2259   - roi_save_info.img_info = obj_value.snapShotLittle;
2260   - roi_save_info.json_str = json_str;
2261   - m_save_snapshot_reprocessing->reprocessing_process_wo_locus_async(roi_save_info);
2262   -
2263   - // 删除结束轨迹的数据
2264   - m_snapshot_reprocessing->release_finished_face_locus_snapshot(obj_key.video_id, obj_key.obj_id, false);
2265   -}
2266   -
2267   -int CMultiSourceProcess::recode_thread() {
2268   - LOG_INFO("recode_thread start...");
2269   -
2270   - while(true) {
2271   -
2272   - if(m_bfinish){
2273   - break;
2274   - }
2275   -
2276   - m_recoderinfo_queue_mtx.lock();
2277   - if(m_recoderinfo_queue.size() <= 0) {
2278   - m_recoderinfo_queue_mtx.unlock();
2279   - std::this_thread::sleep_for(std::chrono::milliseconds(5));
2280   - continue;
2281   - }
2282   -
2283   - RecoderInfo info = m_recoderinfo_queue.front();
2284   - m_recoderinfo_queue.pop_front();
2285   - m_recoderinfo_queue_mtx.unlock();
2286   -
2287   - DecoderManager* pDecManager = DecoderManager::getInstance();
2288   - pDecManager->doRecode(info);
2289   - }
2290   -
2291   - LOG_INFO("recode_thread end.");
2292   -}
2293   -
2294   -bool CMultiSourceProcess::CheckTime() {
2295   - struct tm* info;
2296   - int nYear, nMonth, nDay;
2297   - time_t raw;
2298   - time(&raw);
2299   - info = localtime(&raw);
2300   - nYear = info->tm_year + 1900;
2301   - nMonth = info->tm_mon + 1;
2302   - nDay = info->tm_mday;
2303   - if ((nYear == 2023 && nMonth <= 12) || (nYear == 2024 && nMonth <= 2))
2304   - {
2305   - return true;
2306   - }
2307   - else
2308   - {
2309   - return false;
2310   - }
2311   -}
2312 0 \ No newline at end of file
src/demo/demo.cpp
... ... @@ -1122,61 +1122,42 @@ void test_gpu(int gpuID){
1122 1122 std::vector<algorithm_type_t> algor_vec3 = {algorithm_type_t::PERSON_CROSS, algorithm_type_t::NONMOTOR_WRONGDIRECTION, algorithm_type_t::VEHICLE_WRONGDIRECTION, algorithm_type_t::VEHICLE_NOTGIVEWAY,
1123 1123 algorithm_type_t::VEHICLE_SOLIDLINETURNAROUND};
1124 1124  
1125   -/*
  1125 +
1126 1126 int repeat_num = 1000;
  1127 + createTask(handle, algor_vec2, 0, false);
  1128 + createTask(handle, algor_vec2, 2, false);
1127 1129 while(repeat_num--) {
1128   - printf("============================:%d\n",repeat_num);
1129   - string task_id = createTask(handle, algor_vec, 3 + gpuID * 10);
1130   - string task_id1 = createTask(handle, algor_vec2, 5);
1131   - string task_id2 = createTask(handle, algor_vec2, 6);
1132   -*/
1133   -
1134   - // string task_id = createTask(handle, algor_vec, 3 + gpuID * 10);
1135   - // string task_id1 = createTask(handle, algor_vec2, 5);
1136   - // createTask(handle, algor_vec, 18, false);
1137   - // createTask(handle, algor_vec, 20, false);
1138   - // createTask(handle, algor_vec, 20, false);
1139   - // createTask(handle, algor_vec, 20, false);
1140   - // createTask(handle, algor_vec, 20, false);
1141   - createTask(handle, algor_vec, 0);
1142   - // createTask(handle, algor_vec, 1);
1143   - // createTask(handle, algor_vec, 2);
1144   - // createTask(handle, algor_vec, 3);
1145   -/*
1146   -
1147   - createTask(handle, algor_vec, 0, false);
1148   - createTask(handle, algor_vec, 0, false);
1149   - createTask(handle, algor_vec, 0, false);
1150   - createTask(handle, algor_vec, 0, false);
1151   - createTask(handle, algor_vec, 0, false);
1152   - createTask(handle, algor_vec, 0, false);
1153   - createTask(handle, algor_vec, 2, false);
1154   - createTask(handle, algor_vec, 2, false);
1155   - createTask(handle, algor_vec, 2, false);
1156   - createTask(handle, algor_vec, 2, false);
1157   - createTask(handle, algor_vec, 2, false);
1158   - createTask(handle, algor_vec, 2, false);
1159   -
1160   -/*
  1130 + printf("============================:%d\n",repeat_num);
  1131 + vector<string> task_ids;
  1132 + for (int i = 4; i < 10; i ++) {
  1133 + string task_id = createTask(handle, algor_vec2, i, false);
  1134 + task_ids.push_back(task_id);
  1135 + }
  1136 +
1161 1137 // test_snapshot(handle);
1162 1138 sleep(60); //60s
1163   - finish_task(handle, (char*)task_id2.data(), 0);
1164   - finish_task(handle, (char*)task_id1.data(), 0);
1165   - }*/
  1139 + close_all_task(handle);
  1140 + for (auto& task_id : task_ids) {
  1141 + finish_task(handle, (char*)task_id.data(), 0);
  1142 + sleep(5);
  1143 + }
1166 1144  
  1145 + }
  1146 +
  1147 + /*
1167 1148 char ch = 'a';
1168 1149 while (ch != 'q') {
1169 1150 ch = getchar();
1170 1151 switch (ch)
1171 1152 {
1172 1153 case 'a':
1173   - createTask(handle, algor_vec3, 4, false);
1174   - createTask(handle, algor_vec3, 5, false);
1175   - createTask(handle, algor_vec3, 6, false);
1176   - createTask(handle, algor_vec3, 7, false);
1177   - createTask(handle, algor_vec3, 8, false);
1178   - createTask(handle, algor_vec3, 9, false);
1179   - createTask(handle, algor_vec3, 10, false);
  1154 + createTask(handle, algor_vec2, 4, false);
  1155 + createTask(handle, algor_vec2, 5, false);
  1156 + createTask(handle, algor_vec2, 6, false);
  1157 + createTask(handle, algor_vec2, 7, false);
  1158 + createTask(handle, algor_vec2, 8, false);
  1159 + createTask(handle, algor_vec2, 9, false);
  1160 + createTask(handle, algor_vec2, 10, false);
1180 1161 // createTask(handle, algor_vec2, 11, false);
1181 1162 // createTask(handle, algor_vec2, 12, false);
1182 1163 // createTask(handle, algor_vec2, 13, false);
... ... @@ -1193,7 +1174,7 @@ void test_gpu(int gpuID){
1193 1174 break;
1194 1175 }
1195 1176  
1196   - }
  1177 + }*/
1197 1178  
1198 1179 // finish_task(handle, (char*)task_id.data(), 0);
1199 1180  
... ...