Skip to content

Commit 0e25408

Browse files
authored
Update retinaface_trt.py, preprocess_image code (wang-xinyu#703)
Proposed solution to solve this issue wang-xinyu#702
1 parent 35a3301 commit 0e25408

File tree

1 file changed

+54
-16
lines changed

1 file changed

+54
-16
lines changed

retinaface/retinaface_trt.py

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,29 @@ def preprocess_image(self, input_image_path):
192192
"""
193193
image_raw = cv2.imread(input_image_path)
194194
h, w, c = image_raw.shape
195-
image = cv2.resize(image_raw, (INPUT_W, INPUT_H))
196195

196+
# Calculate widht and height and paddings
197+
r_w = INPUT_W / w
198+
r_h = INPUT_H / h
199+
if r_h > r_w:
200+
tw = INPUT_W
201+
th = int(r_w * h)
202+
tx1 = tx2 = 0
203+
ty1 = int((INPUT_H - th) / 2)
204+
ty2 = INPUT_H - th - ty1
205+
else:
206+
tw = int(r_h * w)
207+
th = INPUT_H
208+
tx1 = int((INPUT_W - tw) / 2)
209+
tx2 = INPUT_W - tw - tx1
210+
ty1 = ty2 = 0
211+
212+
# Resize the image with long side while maintaining ratio
213+
image = cv2.resize(image_raw, (tw, th))
214+
# Pad the short side with (128,128,128)
215+
image = cv2.copyMakeBorder(
216+
image, ty1, ty2, tx1, tx2, cv2.BORDER_CONSTANT, (128, 128, 128)
217+
)
197218
image = image.astype(np.float32)
198219

199220
# HWC to CHW format:
@@ -212,21 +233,38 @@ def xywh2xyxy(self, origin_h, origin_w, x,landmark):
212233
r_w = INPUT_W / origin_w
213234
r_h = INPUT_H / origin_h
214235

215-
y[:, 0] = x[:, 0]/r_w
216-
y[:, 2] = x[:, 2] /r_w
217-
y[:, 1] = x[:, 1]/ r_h
218-
y[:, 3] = x[:, 3] /r_h
219-
220-
landmark[:,0] = landmark[:,0]/r_w
221-
landmark[:,1] = landmark[:,1]/ r_h
222-
landmark[:,2] = landmark[:,2]/r_w
223-
landmark[:,3] = landmark[:,3]/ r_h
224-
landmark[:,4] = landmark[:,4]/r_w
225-
landmark[:,5] = landmark[:,5]/ r_h
226-
landmark[:,6] = landmark[:,6]/r_w
227-
landmark[:,7] = landmark[:,7]/ r_h
228-
landmark[:,8] = landmark[:,8]/r_w
229-
landmark[:,9] = landmark[:,9]/ r_h
236+
if r_h > r_w:
237+
y[:, 0] = x[:, 0] / r_w
238+
y[:, 2] = x[:, 2] / r_w
239+
y[:, 1] = (x[:, 1] - (INPUT_H - r_w * origin_h) / 2) / r_w
240+
y[:, 3] = (x[:, 3] - (INPUT_H - r_w * origin_h) / 2) / r_w
241+
242+
landmark[:,0] = landmark[:,0]/r_w
243+
landmark[:,1] = (landmark[:,1] - (INPUT_H - r_w * origin_h) / 2)/r_w
244+
landmark[:,2] = landmark[:,2]/r_w
245+
landmark[:,3] = (landmark[:,3] - (INPUT_H - r_w * origin_h) / 2)/r_w
246+
landmark[:,4] = landmark[:,4]/r_w
247+
landmark[:,5] = (landmark[:,5] - (INPUT_H - r_w * origin_h) / 2)/r_w
248+
landmark[:,6] = landmark[:,6]/r_w
249+
landmark[:,7] = (landmark[:,7] - (INPUT_H - r_w * origin_h) / 2)/r_w
250+
landmark[:,8] = landmark[:,8]/r_w
251+
landmark[:,9] = (landmark[:,9] - (INPUT_H - r_w * origin_h) / 2)/r_w
252+
else:
253+
y[:, 0] = (x[:, 0] - (INPUT_W - r_h * origin_w) / 2) / r_h
254+
y[:, 2] = (x[:, 2] - (INPUT_W - r_h * origin_w) / 2) / r_h
255+
y[:, 1] = x[:, 1] /r_h
256+
y[:, 3] = x[:, 3] /r_h
257+
258+
landmark[:,0] = (landmark[:,0] - (INPUT_W - r_h * origin_w) / 2)/r_h
259+
landmark[:,1] = landmark[:,1]/ r_h
260+
landmark[:,2] = (landmark[:,2] - (INPUT_W - r_h * origin_w) / 2)/r_h
261+
landmark[:,3] = landmark[:,3]/ r_h
262+
landmark[:,4] = (landmark[:,4] - (INPUT_W - r_h * origin_w) / 2)/r_h
263+
landmark[:,5] = landmark[:,5]/ r_h
264+
landmark[:,6] = (landmark[:,6] - (INPUT_W - r_h * origin_w) / 2)/r_h
265+
landmark[:,7] = landmark[:,7]/ r_h
266+
landmark[:,8] = (landmark[:,8] - (INPUT_W - r_h * origin_w) / 2)/r_h
267+
landmark[:,9] = landmark[:,9]/ r_h
230268

231269
return y, landmark
232270

0 commit comments

Comments
 (0)