Spaces:
				
			
			
	
			
			
		Build error
		
	
	
	
			
			
	
	
	
	
		
		
		Build error
		
	| import cv2 | |
| import numpy as np | |
| import skimage as sk | |
| from PIL import Image, ImageOps | |
| from io import BytesIO | |
| from skimage import color | |
| ''' | |
| PIL resize (W,H) | |
| cv2 image is BGR | |
| PIL image is RGB | |
| ''' | |
| class Contrast: | |
| def __init__(self): | |
| pass | |
| def __call__(self, img, mag=-1, prob=1.): | |
| if np.random.uniform(0,1) > prob: | |
| return img | |
| #c = [0.4, .3, .2, .1, .05] | |
| c = [0.4, .3, .2] | |
| if mag<0 or mag>=len(c): | |
| index = np.random.randint(0, len(c)) | |
| else: | |
| index = mag | |
| c = c[index] | |
| img = np.array(img) / 255. | |
| means = np.mean(img, axis=(0, 1), keepdims=True) | |
| img = np.clip((img - means) * c + means, 0, 1) * 255 | |
| return Image.fromarray(img.astype(np.uint8)) | |
| class Brightness: | |
| def __init__(self): | |
| pass | |
| def __call__(self, img, mag=-1, prob=1.): | |
| if np.random.uniform(0,1) > prob: | |
| return img | |
| #W, H = img.size | |
| #c = [.1, .2, .3, .4, .5] | |
| c = [.1, .2, .3] | |
| if mag<0 or mag>=len(c): | |
| index = np.random.randint(0, len(c)) | |
| else: | |
| index = mag | |
| c = c[index] | |
| n_channels = len(img.getbands()) | |
| isgray = n_channels == 1 | |
| img = np.array(img) / 255. | |
| if isgray: | |
| img = np.expand_dims(img, axis=2) | |
| img = np.repeat(img, 3, axis=2) | |
| img = sk.color.rgb2hsv(img) | |
| img[:, :, 2] = np.clip(img[:, :, 2] + c, 0, 1) | |
| img = sk.color.hsv2rgb(img) | |
| #if isgray: | |
| # img = img[:,:,0] | |
| # img = np.squeeze(img) | |
| img = np.clip(img, 0, 1) * 255 | |
| img = Image.fromarray(img.astype(np.uint8)) | |
| if isgray: | |
| img = ImageOps.grayscale(img) | |
| return img | |
| #if isgray: | |
| #if isgray: | |
| # img = color.rgb2gray(img) | |
| #return Image.fromarray(img.astype(np.uint8)) | |
| class JpegCompression: | |
| def __init__(self): | |
| pass | |
| def __call__(self, img, mag=-1, prob=1.): | |
| if np.random.uniform(0,1) > prob: | |
| return img | |
| #c = [25, 18, 15, 10, 7] | |
| c = [25, 18, 15] | |
| if mag<0 or mag>=len(c): | |
| index = np.random.randint(0, len(c)) | |
| else: | |
| index = mag | |
| c = c[index] | |
| output = BytesIO() | |
| img.save(output, 'JPEG', quality=c) | |
| return Image.open(output) | |
| class Pixelate: | |
| def __init__(self): | |
| pass | |
| def __call__(self, img, mag=-1, prob=1.): | |
| if np.random.uniform(0,1) > prob: | |
| return img | |
| W, H = img.size | |
| #c = [0.6, 0.5, 0.4, 0.3, 0.25] | |
| c = [0.6, 0.5, 0.4] | |
| if mag<0 or mag>=len(c): | |
| index = np.random.randint(0, len(c)) | |
| else: | |
| index = mag | |
| c = c[index] | |
| img = img.resize((int(W* c), int(H * c)), Image.BOX) | |
| return img.resize((W, H), Image.BOX) | |