VehicleHeadTail.cpp
3.08 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
#include "VehicleHeadTail.h"
#include "../utils/logger.hpp"
VehicleHeadTail::VehicleHeadTail(/* args */)
{
}
VehicleHeadTail::~VehicleHeadTail()
{
release();
}
int VehicleHeadTail::init(head_tail_param param){
ACL_CALL(aclrtCreateContext(&m_ctx, param.devId), ACL_SUCCESS, SY_FAILED);
LOG_INFO("head_tail version: head_tail_256.2024.12.18");
string model_path = param.sdk_root + "/models/car_head_tail/head_tail_256_241220_310P.om";
m_cnn_cls = new CnnCls();
int ret = m_cnn_cls->Init(model_path.c_str());
if (ret != SY_SUCCESS) {
delete m_cnn_cls;
m_cnn_cls = nullptr;
LOG_ERROR("sy_hcp model init failed!");
return SY_FAILED;
}
max_batch = param.max_batch;
ACL_CALL(aclrtCreateStream(&stream), ACL_SUCCESS, SY_FAILED);
m_dvpp = new DvppProcessx();
ret = m_dvpp->InitResource(stream);
if (ret != SY_SUCCESS) {
delete m_dvpp;
m_dvpp = nullptr;
LOG_ERROR("dvpp init failed!");
return SY_FAILED;
}
return SY_SUCCESS;
}
int VehicleHeadTail::detect(vector<sy_img> img_data_array, vector<HeadTailResult>& result){
if (m_cnn_cls == NULL) {
LOG_ERROR("HumanCarParse get null handle!");
return SY_FAILED;
}
ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_SUCCESS, SY_FAILED);
int inputW = m_cnn_cls->GetInputWidth();
int inputH = m_cnn_cls->GetInputHeight();
for (int i = 0; i < img_data_array.size(); i++) {
if (img_data_array[i].data_ == NULL || img_data_array[i].w_ == 0 || img_data_array[i].h_ == 0) {
LOG_ERROR("HumanCarParse Get null input ptr!");
return SY_FAILED;
}
ImageData resizeImg, src;
ACL_CALL(Utils::CopysyImageDataToDvppV2(src, img_data_array[i]), SY_SUCCESS, SY_FAILED);
ACL_CALL(m_dvpp->CropAndPaste(resizeImg, src, inputW, inputH), SY_SUCCESS, SY_FAILED);
int ret = m_cnn_cls->Inference(resizeImg);
if (ret != SY_SUCCESS) {
LOG_ERROR( "HumanCarParse process error!");
return SY_MODEL_FORWARD_ERROR;
}
vector<float> hcpRes;
ret = m_cnn_cls->PostProcess(hcpRes);
if (ret != SY_SUCCESS) {
LOG_ERROR("HumanCarParse postprocess error!");
return SY_MODEL_GETRESULT_ERROR;
}
if (hcpRes.size() != 2) {
LOG_ERROR("HumanCarParse postprocess error!");
return SY_MODEL_GETRESULT_ERROR;
}
HeadTailResult one_result;
one_result.cls = hcpRes[0];
one_result.confidence = hcpRes[1];
result.push_back(one_result);
}
return SY_SUCCESS;
}
int VehicleHeadTail::release() {
ACL_CALL(aclrtSetCurrentContext(m_ctx), ACL_ERROR_NONE, SY_FAILED);
if (m_cnn_cls) {
delete m_cnn_cls;
m_cnn_cls = nullptr;
}
if (m_dvpp) {
delete m_dvpp;
m_dvpp = nullptr;
}
if (stream != nullptr) {
int ret = aclrtDestroyStream(stream);
if (ret != ACL_SUCCESS) {
LOG_ERROR("destroy stream failed");
}
stream = nullptr;
}
aclrtDestroyContext(m_ctx);
}