MultiSourceProcess.h
4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "header.h"
#include "acl/acl.h"
#include "acl/ops/acl_dvpp.h"
#include "task_param_manager.h"
#include "../ai_engine_module/VPTProcess.h"
#include "../reprocessing_module/snapshot_reprocessing.h"
#include "../reprocessing_module/save_snapshot_reprocessing.h"
#include "../ai_engine_module/ai_engine_module.h"
#include "../util/JpegUtil.h"
#include <map>
#include <mutex>
#include <thread>
#include <list>
#include <vector>
#include <deque>
#include <set>
#ifdef POST_USE_RABBITMQ
#include "../reprocessing_module/mq_manager.hpp"
#endif
using namespace std;
class DeviceMemory;
class CMultiSourceProcess {
public:
CMultiSourceProcess();
~CMultiSourceProcess();
int InitAlgorthim(tsl_aiplatform_param vptParam);
bool AddTask(task_param _cur_task_param);
bool PauseTask(const string taskID);
bool RestartTask(const string taskID);
bool FinishTask(const string taskID);
void CloseAllTask();
int SnapShot(task_param param);
#ifdef POST_USE_RABBITMQ
int AddMqConn(mq_type_t mq_type, rabbitmq_conn_params_t mq_conn_param);
#endif
int GetTaskStatus(const string taskID);
int CountRunningTask();
void CloseAllTask2();
public:
int algorthim_process_thread(); // 算法处理线程
void task_finished(const string task_id);
void decoded_cbk(DeviceMemory* devFrame);
void timing_snapshot_thread();
private:
// 算法相关
int algorthim_vpt(vector<DeviceMemory*> vec_gpuMem);
// 逆行
void algorthim_retrograde(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs, vector<onelevel_det_result>& vptResult);
// 闯入
void algorthim_trespass(vector<string>& vpt_interest_task_id, vector<DeviceMemory*> vpt_interest_imgs,
vector<onelevel_det_result>& vptResult ,vector<vector<int>>& deleteObjectID);
private:
// 工具处理函数
bool task_has_vpt_algor(const std::string &task_id);
void clear_finished_task();
bool finish_task(const string taskID, const bool delete_snapshot);
int algorithm_vehicle_relult(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, vector<vector<int>>& delete_object_id);
void send_locus_finished_msg(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID);
void vehicle_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID);
void vehicle_locus_finished(const OBJ_KEY obj_key);
bool save_snapshot_process(const OBJ_KEY &obj_key, const algorithm_type_t &algorithm_type, vpc_img_info img_info, vpc_img_info roi_img,
const long long id,const std::string &json_str);
void retrograde_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID);
void trespass_snapshot(vector<string>& vpt_interest_task_id, vector<vector<int>> deleteObjectID);
void void retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ;(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) void retrograde_trespass_alarm(const OBJ_KEY &obj_key, const algorithm_type_t &algor_type) ;
void cross_line_process(vector<DeviceMemory*> vec_devMem, vector<onelevel_det_result>& vptResult, algorithm_type_t eType);
void wander_detect(vector<DeviceMemory*>& vec_gpuMem, vector<onelevel_det_result>& vptResult, algorithm_type_t eType);
int gather_process(vector<DeviceMemory*>& vec_gpuMem, vector<onelevel_det_result> &ol_det_result, algorithm_type_t algor_type);
// 轨迹记录
void trace_record(vector<DeviceMemory*>& vec_gpuMem, vector<onelevel_det_result>& vptResult);
private:
int m_devId;
snapshot_reprocessing *m_snapshot_reprocessing{nullptr};
task_param_manager *m_task_param_manager{nullptr};
save_snapshot_reprocessing *m_save_snapshot_reprocessing{nullptr};
std::thread* m_timing_snapshot_thread;
VPTProcess vpt_process;
int skip_frame_ = 5; // 控制跳帧参数
deque<DeviceMemory*> m_RgbDataList;
mutex m_DataListMtx;
mutex m_FinishedTaskMtx;
map<string,bool> m_FinishedTaskMap;
thread* m_pAlgorthimThread;
bool m_bfinish{false};
int m_batch_size{1};
set<OBJ_KEY> m_total_snapshot_info_multi_object;
mutex m_total_mutex;
mutex m_TotalObjMtx ;
map<OBJ_KEY, OBJ_INDEX> m_total_obj_info; // 记录目标轨迹
JpegUtil jpegUtil;
#ifdef POST_USE_RABBITMQ
mq::Manager *mq_manager_{nullptr};
#endif
ai_engine_module::pedestrian_vehicle_retrograde::PedestrianVehicleRetrograde pedestrian_vehicle_retrograde_;
ai_engine_module::pedestrian_vehicle_trespass::PedestrianVehicleTrespass pedestrian_vehicle_trespass_;
ai_engine_module::RegionLeave m_algorthim_region_leave;
ai_engine_module::RegionLeave m_algorthim_region_dismiss;
ai_engine_module::RegionLeave m_algorthim_region_fastmoving;
GatherDetect m_human_gather;
GatherDetect m_human_density;
GatherDetect m_human_region_gather;
GatherDetect m_vehicle_gather;
};