Spaces:
Running
Running
import cv2 | |
import torch | |
import numpy as np | |
import gradio as gr | |
import paddlehub as hub | |
from PIL import Image | |
from methods.img2pixl import pixL | |
from examples.pixelArt.combine import combine | |
model = hub.Module(name='U2Net') | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
face2paint = torch.hub.load("bryandlee/animegan2-pytorch:main", "face2paint", device=device, size=512) | |
model = torch.hub.load("bryandlee/animegan2-pytorch", "generator", device=device).eval() | |
def GIF(fname,pixel_size): | |
gif = Image.open(fname) | |
frames = [] | |
for i in range(gif.n_frames): #First Step: Splitting the GIF into frames | |
gif.seek(i) | |
frame = Image.new('RGB', gif.size) | |
frame.paste(gif) | |
frame = np.array(frame) | |
frames.append(frame) | |
result = pixL().toThePixL(frames, pixel_size) | |
for frame in result: #Second Step: Adding Cartoon Effect to each frame | |
frame = Image.fromarray(frame) | |
frame = cv2.cvtColor(np.asarray(face2paint(model, frame)), cv2.COLOR_BGR2RGB) | |
frames = [] | |
for frame in result: #Third Step: Combining the frames into a GIF | |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
frame = Image.fromarray(frame) | |
frames.append(frame) | |
frames[0].save('cache.gif', append_images=frames, save_all=True, loop=1) | |
cache = Image.open('cache.gif') | |
return cache | |
def initilize(image,pixel_size,checkbox1): | |
if image.name.endswith('.gif'): | |
GIF(image.name,pixel_size) | |
else: | |
image = Image.open(image.name).convert("RGB") | |
image = cv2.cvtColor(np.asarray(face2paint(model, image)), cv2.COLOR_BGR2RGB) | |
if checkbox1: | |
result = model.Segmentation( | |
images=[image], | |
paths=None, | |
batch_size=1, | |
input_size=320, | |
output_dir='output', | |
visualization=True) | |
result = combine.combiner(images = pixL().toThePixL([result[0]['front'][:,:,::-1], result[0]['mask']], | |
pixel_size), | |
background_image = image) | |
else: | |
result = pixL().toThePixL([image], pixel_size) | |
return Image.fromarray(result) | |
inputs = ["file", | |
gr.Slider(4, 100, value=12, step = 2, label="Pixel Size"), | |
gr.Checkbox(label="Object-Oriented Inference", value=False)] | |
outputs = [gr.Image(type="pil",label="Front")] | |
gr.Interface(fn = initilize, | |
inputs = inputs, | |
outputs = outputs).launch() |