# process image def process_image(image, width, height): ''' Scales, crops, and normalizes a PIL image for a PyTorch model, returns an torchNumpy array Args: image (nn_model.Neural_Network): The Neural_Network instance to use for the prediction. width (int): The path to the image we want to test height (int): The label map with the class names Raises: TODO: Add exceptions Returns: t_image (torch.Tensor): ''' # open and resize img = Image.open(image) img = img.resize((width,height)) # crop current_width, current_height = img.size left = (current_width - width)/2 top = (current_height - height)/2 right = left + width bottom = top + height img = img.crop((left, top, right, bottom)) # normalize the values mean = np.array([0.485, 0.456, 0.406]) std = np.array([0.229, 0.224, 0.225]) np_img = np.array(img) / 255 np_img = (np_img - mean) / std # swap color channel position np_img = np.transpose(np_img, (2,0,1)) # conver to tensor from numpy ndarray t_image = torch.from_numpy(np_img) return t_image