50 lines
1.9 KiB
Python
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 |