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