49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
from pathlib import Path
|
|
import PIL
|
|
from PIL import Image
|
|
import numpy as np
|
|
from dataclasses import dataclass
|
|
|
|
# TODO add register new converter so that it is accessible via converters.to_x
|
|
|
|
def ensure_class(func, params):
|
|
def func_wrapper(function):
|
|
def wrapper(self=None, *args, **kwargs):
|
|
for key in kwargs:
|
|
if key in params:
|
|
kwargs[key] = func(kwargs[key])
|
|
if self is not None:
|
|
return function(self, *args, **kwargs)
|
|
else:
|
|
return function(*args, **kwargs)
|
|
|
|
return wrapper
|
|
|
|
return func_wrapper
|
|
|
|
|
|
def as_PIL(img):
|
|
if not isinstance(img, PIL.Image.Image):
|
|
if isinstance(img, Path):
|
|
img = img.as_posix()
|
|
if isinstance(img, str):
|
|
img = Image.open(img)
|
|
elif isinstance(img, np.ndarray):
|
|
img = Image.fromarray(img)
|
|
|
|
else:
|
|
raise NotImplementedError
|
|
return img
|
|
|
|
|
|
def to_ndarray(input):
|
|
if not isinstance(input, np.ndarray):
|
|
input = np.array(input)
|
|
return input
|
|
|
|
|
|
def to_Path(input):
|
|
if not isinstance(input, Path):
|
|
input = Path(input)
|
|
return input
|