@@ -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