Spaces:
Running
on
Zero
Running
on
Zero
| import os | |
| import numpy as np | |
| import torch | |
| import cv2 | |
| os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" | |
| IMG_EXTENSIONS = ['.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG', '.ppm', '.PPM', '.bmp', '.BMP', '.tif'] | |
| def is_image_file(filename): | |
| return any(filename.endswith(extension) for extension in IMG_EXTENSIONS) | |
| def get_image_paths(dataroot): | |
| paths = None # return None if dataroot is None | |
| if dataroot is not None: | |
| paths = sorted(_get_paths_from_images(dataroot)) | |
| return paths | |
| def _get_paths_from_images(path): | |
| assert os.path.isdir(path), '{:s} is not a valid directory'.format(path) | |
| images = [] | |
| for dirpath, _, fnames in sorted(os.walk(path)): | |
| for fname in sorted(fnames): | |
| if is_image_file(fname): | |
| img_path = os.path.join(dirpath, fname) | |
| images.append(img_path) | |
| assert images, '{:s} has no valid image file'.format(path) | |
| return images | |
| def mkdir(path): | |
| if not os.path.exists(path): | |
| os.makedirs(path) | |
| def mkdirs(paths): | |
| if isinstance(paths, str): | |
| mkdir(paths) | |
| else: | |
| for path in paths: | |
| mkdir(path) | |
| # -------------------------------------------- | |
| # get uint8 image of size HxWxn_channles (RGB) | |
| # -------------------------------------------- | |
| def imread_uint(path, n_channels=3): | |
| # input: path | |
| # output: HxWx3(RGB or GGG), or HxWx1 (G) | |
| if n_channels == 1: | |
| img = cv2.imread(path, 0) # cv2.IMREAD_GRAYSCALE | |
| img = np.expand_dims(img, axis=2) # HxWx1 | |
| elif n_channels == 3: | |
| # img = cv2.imread(path, cv2.IMREAD_UNCHANGED) # BGR or G | |
| img = cv2.imread(path) # BGR or G | |
| if img is None: | |
| import PIL | |
| img = np.array(PIL.Image.open(path).convert('RGB')) | |
| return img | |
| if img.ndim == 2: | |
| img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) # GGG | |
| else: | |
| img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # RGB | |
| return img | |
| def imsave(img, img_path): | |
| img = np.squeeze(img) | |
| if img.ndim == 3: | |
| img = img[:, :, [2, 1, 0]] | |
| cv2.imwrite(img_path, img) | |
| # convert uint to 4-dimensional torch tensor | |
| def uint2tensor4(img): | |
| if img.ndim == 2: | |
| img = np.expand_dims(img, axis=2) | |
| return torch.from_numpy(np.ascontiguousarray(img)).permute(2, 0, 1).float().div(255.).unsqueeze(0) | |
| # convert 2/3/4-dimensional torch tensor to uint | |
| def tensor2uint(img): | |
| img = img.data.squeeze().float().clamp_(0, 1).cpu().numpy() | |
| if img.ndim == 3: | |
| img = np.transpose(img, (1, 2, 0)) | |
| return np.uint8((img*255.0).round()) | |
| if __name__ == '__main__': | |
| print('test util functions') | |