Spaces:
Build error
Build error
import cv2 | |
import numpy as np | |
from PIL import Image, ImageOps, ImageDraw | |
''' | |
PIL resize (W,H) | |
Torch resize is (H,W) | |
''' | |
class VGrid: | |
def __init__(self): | |
pass | |
def __call__(self, img, copy=True, max_width=4, mag=-1, prob=1.): | |
if np.random.uniform(0,1) > prob: | |
return img | |
if copy: | |
img = img.copy() | |
W, H = img.size | |
if mag<0 or mag>max_width: | |
line_width = np.random.randint(1, max_width) | |
image_stripe = np.random.randint(1, max_width) | |
else: | |
line_width = 1 | |
image_stripe = 3 - mag | |
n_lines = W // (line_width + image_stripe) + 1 | |
draw = ImageDraw.Draw(img) | |
for i in range(1, n_lines): | |
x = image_stripe*i + line_width*(i-1) | |
draw.line([(x,0), (x,H)], width=line_width, fill='black') | |
return img | |
class HGrid: | |
def __init__(self): | |
pass | |
def __call__(self, img, copy=True, max_width=4, mag=-1, prob=1.): | |
if np.random.uniform(0,1) > prob: | |
return img | |
if copy: | |
img = img.copy() | |
W, H = img.size | |
if mag<0 or mag>max_width: | |
line_width = np.random.randint(1, max_width) | |
image_stripe = np.random.randint(1, max_width) | |
else: | |
line_width = 1 | |
image_stripe = 3 - mag | |
n_lines = H // (line_width + image_stripe) + 1 | |
draw = ImageDraw.Draw(img) | |
for i in range(1, n_lines): | |
y = image_stripe*i + line_width*(i-1) | |
draw.line([(0,y), (W, y)], width=line_width, fill='black') | |
return img | |
class Grid: | |
def __init__(self): | |
pass | |
def __call__(self, img, mag=-1, prob=1.): | |
if np.random.uniform(0,1) > prob: | |
return img | |
img = VGrid()(img, copy=True, mag=mag) | |
img = HGrid()(img, copy=False, mag=mag) | |
return img | |
class RectGrid: | |
def __init__(self): | |
pass | |
def __call__(self, img, isellipse=False, mag=-1, prob=1.): | |
if np.random.uniform(0,1) > prob: | |
return img | |
img = img.copy() | |
W, H = img.size | |
line_width = 1 | |
image_stripe = 3 - mag #np.random.randint(2, 6) | |
offset = 4 if isellipse else 1 | |
n_lines = ((H//2) // (line_width + image_stripe)) + offset | |
draw = ImageDraw.Draw(img) | |
x_center = W // 2 | |
y_center = H // 2 | |
for i in range(1, n_lines): | |
dx = image_stripe*i + line_width*(i-1) | |
dy = image_stripe*i + line_width*(i-1) | |
x1 = x_center - (dx * W//H) | |
y1 = y_center - dy | |
x2 = x_center + (dx * W/H) | |
y2 = y_center + dy | |
if isellipse: | |
draw.ellipse([(x1,y1), (x2, y2)], width=line_width, outline='black') | |
else: | |
draw.rectangle([(x1,y1), (x2, y2)], width=line_width, outline='black') | |
return img | |
class EllipseGrid: | |
def __init__(self): | |
pass | |
def __call__(self, img, mag=-1, prob=1.): | |
if np.random.uniform(0,1) > prob: | |
return img | |
img = RectGrid()(img, isellipse=True, mag=mag, prob=prob) | |
return img | |