HumanParsing.cpp
2.69 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
#include "HumanParsing.h"
#include <opencv2/opencv.hpp>
#include "depend_inc.h"
//static string head[] = { "长发", "短发", "其他" };
//static string head_color[] = { "黑", "白", "其他" };
//static string eye[] = { "未戴眼镜", "戴眼镜" };
//static string mouth[] = { "未戴口罩", "戴口罩" };
//static string up[] ={ "T恤/背心", "衬衫", "毛衣"," 外套" , "连衣裙", "其他" };
//static std::string up_color[] = { "黑", "白", "灰", "红", "蓝", "黄", "绿", "多色", "其他" };
//static string clothing_text[] = { "纯色", "碎花", "条纹/格子", "其他" };
//static string down[6] = { "长裤", "短裤", "长裙", "短裙", "连衣裙", "其他" };
//static std::string down_color[] = { "黑", "白", "灰", "红", "蓝", "黄", "绿", "多色", "其他" };
//static string bao[5] = { "无包", "有包" };
//static std::string sex[] = { "男", "女", "不明" };
//static std::string age[] = { "小孩", "成人", "不明" };
//static std::string viewpoint[] = { "正面","背面", "侧面" };
//static string dasan[2] = { "未打伞", "打伞" };
//static string child[2] = { "未抱小孩", "抱小孩" };
//static string personstate[5] = { "行走/站立", "奔跑", "蹲/坐", "推车", "其他" };
const int FIR_INDEX_SIZE = 16;
const int SEC_INDEX_SIZE[FIR_INDEX_SIZE] = { 3, 3, 2, 2, 6, 9, 4, 6, 9, 2, 3, 3, 3, 2, 2, 5 };
HumanParsing::HumanParsing(/* args */)
{
}
HumanParsing::~HumanParsing()
{
LOG_INFO("~HumanParsing");
}
int HumanParsing::init(int gpuid, char* auth_license)
{
hp_param param;
param.mode = DEVICE_GPU;
param.gpuid = gpuid;
param.engine = ENGINE_TENSORRT;
param.max_batch = 20;
param.serialize_file = "./serialize_file/HP";
param.auth_license = auth_license;
if (hp_init(&handle, param) != 0) {
LOG_ERROR("hp_init failed!");
return FAILED;
}
LOG_INFO("hp_init success! gpu_id: {}", gpuid);
return SUCCESS;
}
int HumanParsing::process(sy_img * batch_img, int batch_size, hp_analysis_res*& result)
{
for (int i = 0; i < batch_size; i++)
{
if (batch_img[i].data_ == NULL) {
LOG_ERROR("data null!");
return FAILED;
}
}
hp_batch(handle, batch_img, batch_size, result);
for (int b = 0; b < batch_size; b++)
{
hp_analysis_res &cur_result = result[b];
for (int i = 0; i < FIR_INDEX_SIZE; i++)
{
if (cur_result.res_objs[i].res_index >= SEC_INDEX_SIZE[i])
{
cur_result.res_objs[i].res_index = 0;
}
}
}
return SUCCESS;
}
int HumanParsing::release()
{
if(handle) {
hp_release(&handle);
handle = nullptr;
}
LOG_INFO("hp_release");
return SUCCESS;
}