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') | |