50 lines
1.9 KiB
Python

import numpy as np
import math
import kneron_preprocessing
def check_img_size(img_size, s=32):
# Verify img_size is a multiple of stride s
new_size = math.ceil(img_size / int(s)) * int(s)
if new_size != img_size:
print('WARNING: --img-size %g must be multiple of max stride %g, updating to %g' % (img_size, s, new_size))
return new_size
def preprocess_(image, input_shape, **kwargs) :
model_stride_max = 32
imgsz_h, imgsz_w = input_shape
imgsz_h = check_img_size(imgsz_h, s=model_stride_max) # check img_size
imgsz_w = check_img_size(imgsz_w, s=model_stride_max) # check img_size
if isinstance(image, str):
try:
image = kneron_preprocessing.API.load_image(image) #RGB
except:
try:
image = kneron_preprocessing.API.load_bin(image, **kwargs)
except:
print('input format error')
assert 0
else:
assert isinstance(image, np.ndarray) or isinstance(image, list)
image = np.asarray(image)
h_ori, w_ori = image.shape[:2]
img = image
new_shape=(imgsz_h,imgsz_w)
# Resize image to a 32-pixel-multiple rectangle https://github.com/ultralytics/yolov3/issues/232
shape = img.shape[:2] # current shape [height, width]
if isinstance(new_shape, int):
new_shape = (new_shape, new_shape)
# Scale ratio (new / old)
r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) # width, height
if shape[::-1] != new_unpad: # resize
img = kneron_preprocessing.API.resize(img,size=new_unpad, keep_ratio = False)
img = kneron_preprocessing.API.pad_corner(img, size=(imgsz_w, imgsz_h), pad_val=0)
img = kneron_preprocessing.API.norm(img)
if img.shape[-1] == 3:
img = np.expand_dims(img, axis=0)
pre_info = {'w_ori': w_ori, 'h_ori': h_ori}
return img, pre_info