@@ -82,6 +82,10 @@ HZFLAG Detector_Yolov5Face::InitDetector_Yolov5Face(Config& config)
82
82
CHECK (cudaMallocHost ((void **)&img_host, config.yolov5face_detect_bs *MAX_IMAGE_INPUT_SIZE_THRESH * 3 *sizeof (uint8_t )));
83
83
// prepare input data cache in device memory
84
84
CHECK (cudaMalloc ((void **)&img_device, config.yolov5face_detect_bs *MAX_IMAGE_INPUT_SIZE_THRESH * 3 *sizeof (uint8_t )));
85
+
86
+
87
+ prob=new float [config.yolov5face_detect_bs * OUTPUT_SIZE];
88
+
85
89
return HZ_SUCCESS;
86
90
}
87
91
@@ -91,34 +95,25 @@ HZFLAG Detector_Yolov5Face::Detect_Yolov5Face(std::vector<cv::Mat>&ImgVec,std::v
91
95
// prepare input data ---------------------------
92
96
int detector_batchsize=ImgVec.size ();
93
97
float * buffer_idx = (float *)buffers[inputIndex];
94
- std::vector<cv::Mat> imgs_buffer (detector_batchsize);
95
98
for (int b = 0 ; b < detector_batchsize; b++)
96
99
{
97
100
if (ImgVec[b].empty ()||ImgVec[b].data ==NULL )
98
101
{
99
102
continue ;
100
103
}
101
- imgs_buffer [b] = ImgVec[b].clone ();
102
- size_t size_image = imgs_buffer [b].cols * imgs_buffer [b].rows * 3 *sizeof (uint8_t );
104
+ ImgVec [b] = ImgVec[b].clone ();
105
+ size_t size_image = ImgVec [b].cols * ImgVec [b].rows * 3 *sizeof (uint8_t );
103
106
size_t size_image_dst = INPUT_H * INPUT_W * 3 *sizeof (uint8_t );
104
107
// copy data to pinned memory
105
- memcpy (img_host,imgs_buffer [b].data ,size_image);
108
+ memcpy (img_host,ImgVec [b].data ,size_image);
106
109
// copy data to device memory
107
- CHECK (cudaMemcpyAsync (img_device,img_host,size_image,cudaMemcpyHostToDevice,stream ));
108
- preprocess_kernel_img_yolov5_face (img_device,imgs_buffer [b].cols ,imgs_buffer [b].rows , buffer_idx, INPUT_W, INPUT_H, stream);
110
+ CHECK (cudaMemcpy (img_device,img_host,size_image,cudaMemcpyHostToDevice));
111
+ preprocess_kernel_img_yolov5_face (img_device,ImgVec [b].cols ,ImgVec [b].rows , buffer_idx, INPUT_W, INPUT_H, stream);
109
112
buffer_idx += size_image_dst;
110
113
}
111
114
// Run inference
112
- float *prob= new float [detector_batchsize * OUTPUT_SIZE];
115
+
113
116
doInference (*context,stream,(void **)buffers,prob,detector_batchsize);
114
- // std::fstream writetxt;
115
- // writetxt.open("12.txt",std::ios::out);
116
- // for (size_t k = 0; k < detector_batchsize * OUTPUT_SIZE; k++)
117
- // {
118
- // writetxt<<prob[k]<<std::endl;
119
- // }
120
- // writetxt.close();
121
-
122
117
for (int b = 0 ; b < detector_batchsize; b++)
123
118
{
124
119
std::vector<decodeplugin_yolov5face::Detection> res;
@@ -132,25 +127,12 @@ HZFLAG Detector_Yolov5Face::Detect_Yolov5Face(std::vector<cv::Mat>&ImgVec,std::v
132
127
}
133
128
Det det;
134
129
det.confidence =res[j].class_confidence ;
135
- get_rect_adapt_landmark (imgs_buffer [b], INPUT_W, INPUT_H, res[j].bbox , res[j].landmark ,det);
130
+ get_rect_adapt_landmark (ImgVec [b], INPUT_W, INPUT_H, res[j].bbox , res[j].landmark ,det);
136
131
Imgdet.push_back (det);
137
132
}
138
- // for (size_t j = 0; j < Imgdet.size(); j++)
139
- // {
140
- // cv::rectangle(ImgVec[b], cv::Point( Imgdet[j].bbox.xmin, Imgdet[j].bbox.ymin),
141
- // cv::Point( Imgdet[j].bbox.xmax, Imgdet[j].bbox.ymax), cv::Scalar(255, 0, 0), 2, 8, 0);
142
- // cv::circle(ImgVec[b], cv::Point2f( Imgdet[j].key_points[0], Imgdet[j].key_points[1]), 2, cv::Scalar(255, 0, 0), 1);
143
- // cv::circle(ImgVec[b], cv::Point2f( Imgdet[j].key_points[2], Imgdet[j].key_points[3]), 2, cv::Scalar(0, 0, 255), 1);
144
- // cv::circle(ImgVec[b], cv::Point2f( Imgdet[j].key_points[4], Imgdet[j].key_points[5]), 2, cv::Scalar(0, 255, 0), 1);
145
- // cv::circle(ImgVec[b], cv::Point2f( Imgdet[j].key_points[6], Imgdet[j].key_points[7]), 2, cv::Scalar(255, 0, 255), 1);
146
- // cv::circle(ImgVec[b], cv::Point2f( Imgdet[j].key_points[8], Imgdet[j].key_points[9]), 2, cv::Scalar(0, 255, 255), 1);
147
- // }
148
- // cv::imshow("show", ImgVec[b]);
149
- // cv::waitKey(0);
150
133
dets.push_back (Imgdet);
151
134
}
152
- delete [] prob;
153
- prob=NULL ;
135
+
154
136
return HZ_SUCCESS;
155
137
156
138
}
@@ -164,6 +146,8 @@ HZFLAG Detector_Yolov5Face::ReleaseDetector_Yolov5Face()
164
146
context->destroy ();
165
147
engine->destroy ();
166
148
runtime->destroy ();
149
+ delete [] prob;
150
+ prob=NULL ;
167
151
return HZ_SUCCESS;
168
152
}
169
153
@@ -266,44 +250,6 @@ void Detector_Yolov5Face::nms(std::vector<decodeplugin_yolov5face::Detection>& r
266
250
}
267
251
}
268
252
}
269
-
270
- // void Detector_Yolov5Face::get_rect_adapt_landmark(cv::Mat& img, int input_w, int input_h, float bbox[4], float lmk[10],Det&det)
271
- // {
272
- // int l, r, t, b;
273
- // float r_w = input_w / (img.cols * 1.0);
274
- // float r_h = input_h / (img.rows * 1.0);
275
- // if (r_h > r_w)
276
- // {
277
- // l = bbox[0] / r_w;
278
- // r = bbox[2] / r_w;
279
- // t = (bbox[1] - (input_h - r_w * img.rows) / 2) / r_w;
280
- // b = (bbox[3] - (input_h - r_w * img.rows) / 2) / r_w;
281
- // for (int i = 0; i < 10; i += 2)
282
- // {
283
- // det.key_points.push_back(lmk[i]/r_w);
284
- // det.key_points.push_back((lmk[i + 1] - (input_h - r_w * img.rows) / 2) / r_w);
285
- // }
286
- // }
287
- // else
288
- // {
289
- // l = (bbox[0] - (input_w - r_h * img.cols) / 2) / r_h;
290
- // r = (bbox[2] - (input_w - r_h * img.cols) / 2) / r_h;
291
- // t = bbox[1] / r_h;
292
- // b = bbox[3] / r_h;
293
- // for (int i = 0; i < 10; i += 2)
294
- // {
295
- // det.key_points.push_back((lmk[i] - (input_w - r_h * img.cols) / 2) / r_h);
296
- // det.key_points.push_back(lmk[i + 1]/r_h);
297
- // }
298
- // }
299
- // det.bbox.xmin=l>1?l:1;
300
- // det.bbox.ymin=t>1?t:1;
301
- // det.bbox.xmax=r>det.bbox.xmin?r:det.bbox.xmin+1;
302
- // det.bbox.xmax=det.bbox.xmax<img.cols?det.bbox.xmax:img.cols-1;
303
- // det.bbox.ymax=b>det.bbox.ymin?b:det.bbox.ymin+1;
304
- // det.bbox.ymax=det.bbox.ymax<img.rows?det.bbox.ymax:img.rows-1;
305
- // return ;
306
- // }
307
253
void Detector_Yolov5Face::get_rect_adapt_landmark (cv::Mat& img, int input_w, int input_h, float bbox[4 ], float lmk[10 ],Det&det)
308
254
{
309
255
int l, r, t, b;
0 commit comments