human_gather_statistics.cpp
5.36 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
140
141
142
143
144
145
146
147
148
149
150
/*
* @Author: yangzilong
* @Date: 2021-12-16 14:25:13
* @Last Modified by: yangzilong
* @Email: yangzilong@objecteye.com
* @Description:
*/
#include "human_gather_statistics.h"
#include "mvpt_process_assist.h"
namespace ai_engine_module
{
namespace human_gather_statistics
{
long long human_gather_statistics::gid_ = 0;
int human_gather_statistics::human_gather_statistics_init()
{
m_task_param_manager = task_param_manager::getInstance();
return 0;
}
std::vector<result_data_t> human_gather_statistics::human_gather_statistics_process(set<string>& taskin_play_id, sy_img* images, vector<onelevel_det_result> &ol_det_result)
{
std::vector<result_data_t> results;
map<string, algor_open_config_param> && algor_config_param = m_task_param_manager->get_task_algor_params();
map<string, map<algo_type, task_param_manager::algo_param_type_t_*>> && algor_param = m_task_param_manager->get_task_other_params();
map<string, int> taskid_humancount;
map<string, std::vector<box_t>> taskid_to_boxes;
int idx = 0;
for (auto task_id : taskin_play_id)
{
if (algor_config_param.count(task_id) && algor_config_param[task_id].human_algors.count(algorithm_type_t::HUMAN_GATHER))
{
task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::HUMAN_GATHER];
// if (!algor_config_param[task_id].human_algors.count(algorithm_type_t::HUMAN_GATHER))
{
onelevel_det_result &cur_task_ol_detres = ol_det_result[idx];
for (int c = 0; c < cur_task_ol_detres.obj_count; c++)
{
if (cur_task_ol_detres.obj[c].index == (int)det_class_label_t::HUMAN
&& snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,
cur_task_ol_detres.obj[c].left, cur_task_ol_detres.obj[c].top, cur_task_ol_detres.obj[c].right, cur_task_ol_detres.obj[c].bottom))
{
taskid_humancount[task_id]++;
box_t box;
auto tmp_box = cur_task_ol_detres.obj[c];
{
box.top = tmp_box.top;
box.left = tmp_box.left;
box.right = tmp_box.right;
box.bottom = tmp_box.bottom;
box.score = tmp_box.confidence;
}
taskid_to_boxes[task_id].emplace_back(std::move(box));
}
}
}
int human_count_threshold = ((algor_config_param_human_gather*)cur_task_params->algor_param)->human_count_threshold;
int frame_stride = ((algor_config_param_human_gather*)cur_task_params->algor_param)->frame_stride;
if (taskid_humancount[task_id] > human_count_threshold && taskid_framecount[task_id] % frame_stride == 0)
{
result_data_t data;
// data.img = images;
data.img = &images[idx]; // modified by zsh
data.task_id = task_id;
data.boxes = std::move(taskid_to_boxes[task_id]);
data.id = gid_++;
results.emplace_back(std::move(data));
}
}
idx++;
taskid_framecount[task_id]++;
}
return results;
}
std::vector<result_data_t> human_gather_statistics::human_gather_statistics_process2(vector<string>& taskin_play_id, sy_img* images, vector<onelevel_det_result> &ol_det_result)
{
std::vector<result_data_t> results;
map<string, algor_open_config_param> && algor_config_param = m_task_param_manager->get_task_algor_params();
map<string, map<algo_type, task_param_manager::algo_param_type_t_*>> && algor_param = m_task_param_manager->get_task_other_params();
map<string, int> taskid_humancount;
map<string, std::vector<box_t>> taskid_to_boxes;
int idx = 0;
for (auto task_id : taskin_play_id)
{
if (algor_config_param.count(task_id) && algor_config_param[task_id].human_algors.count(algorithm_type_t::HUMAN_GATHER))
{
task_param_manager::algo_param_type_t_* cur_task_params = algor_param[task_id][algorithm_type_t::HUMAN_GATHER];
// if (!algor_config_param[task_id].human_algors.count(algorithm_type_t::HUMAN_GATHER))
{
onelevel_det_result &cur_task_ol_detres = ol_det_result[idx];
for (int c = 0; c < cur_task_ol_detres.obj_count; c++)
{
if (cur_task_ol_detres.obj[c].index == (int)det_class_label_t::HUMAN
&& snapshot_legal_inarea(cur_task_params->basic_param->algor_valid_rect,
cur_task_ol_detres.obj[c].left, cur_task_ol_detres.obj[c].top, cur_task_ol_detres.obj[c].right, cur_task_ol_detres.obj[c].bottom))
{
taskid_humancount[task_id]++;
box_t box;
auto tmp_box = cur_task_ol_detres.obj[c];
{
box.top = tmp_box.top;
box.left = tmp_box.left;
box.right = tmp_box.right;
box.bottom = tmp_box.bottom;
box.score = tmp_box.confidence;
}
taskid_to_boxes[task_id].emplace_back(std::move(box));
}
}
}
int human_count_threshold = ((algor_config_param_human_gather*)cur_task_params->algor_param)->human_count_threshold;
int frame_stride = ((algor_config_param_human_gather*)cur_task_params->algor_param)->frame_stride;
if (taskid_humancount[task_id] > human_count_threshold && taskid_framecount[task_id] % frame_stride == 0)
{
result_data_t data;
// data.img = images;
data.img = &images[idx]; // modified by zsh
data.task_id = task_id;
data.boxes = std::move(taskid_to_boxes[task_id]);
data.id = gid_++;
results.emplace_back(std::move(data));
}
}
idx++;
taskid_framecount[task_id]++;
}
return results;
}
}
}