towhee
/
anime-transfer-gradio
copied
3 changed files with 77 additions and 1 deletions
@ -1,2 +1,27 @@ |
|||||
# anime-transfer-gradio |
|
||||
|
# Operator: anime-transfer-gradio |
||||
|
|
||||
|
Author: shiyu22 |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
Use gradio to call [style-transfer-animegan](https://towhee.io/filip-halt/style-transfer-animegan). |
||||
|
|
||||
|
## Interface |
||||
|
|
||||
|
```python |
||||
|
__init__(self) |
||||
|
``` |
||||
|
|
||||
|
None |
||||
|
|
||||
|
```python |
||||
|
__call__(self, source: str = 'upload') |
||||
|
``` |
||||
|
|
||||
|
Args: |
||||
|
|
||||
|
- dource: |
||||
|
- image soure for input image, defauts to 'upload', you can also change to 'webcam'. |
||||
|
|
||||
|
- supported types: str |
||||
|
|
||||
|
@ -0,0 +1,51 @@ |
|||||
|
import gradio |
||||
|
import numpy |
||||
|
from PIL import Image |
||||
|
from pathlib import Path |
||||
|
|
||||
|
from towhee.operator import Operator |
||||
|
from towhee import pipeline |
||||
|
|
||||
|
class AnimeTransferGradio(Operator): |
||||
|
""" |
||||
|
AnimeTransferGradio operator |
||||
|
""" |
||||
|
def __init__(self) -> None: |
||||
|
super().__init__() |
||||
|
|
||||
|
def __call__(self, source: str = 'upload') -> None: |
||||
|
interface = gradio.Interface(self.trans_img, [gradio.inputs.Image(type="pil", source=source), |
||||
|
gradio.inputs.Radio(["celeba", "facepaintv1","facepaintv2", "hayao", "paprika", 'shinkai'])], |
||||
|
gradio.outputs.Image(type="pil"), allow_flagging='never', allow_screenshot=False) |
||||
|
interface.launch(enable_queue=True) |
||||
|
|
||||
|
@staticmethod |
||||
|
def trans_img(input, version): |
||||
|
trans_pipeline = 'filip-halt/style-transfer-animegan' |
||||
|
|
||||
|
# Resizing the image while keeping aspect ratio. |
||||
|
size = (512, 512) |
||||
|
input.thumbnail(size, Image.ANTIALIAS) |
||||
|
# Saving image to file for input. Very low chance of concurrent file saves during the time |
||||
|
# between saving and taking first step of pipeline, so avoiding locks for now. In addition, |
||||
|
# current gradio is set to queue so there will never be parallel runs for this. |
||||
|
path = str(Path.cwd() / 'test.jpg') |
||||
|
input.save(path) |
||||
|
|
||||
|
if version == 'celeba': |
||||
|
x = pipeline(trans_pipeline, tag='celeba')(path) |
||||
|
elif version == 'facepaintv1': |
||||
|
x = pipeline(trans_pipeline, tag='facepaintv1')(path) |
||||
|
elif version == 'facepaintv2': |
||||
|
x = pipeline(trans_pipeline, tag='facepaintv2')(path) |
||||
|
elif version == 'hayao': |
||||
|
x = pipeline(trans_pipeline, tag='hayao')(path) |
||||
|
elif version == 'paprika': |
||||
|
x = pipeline(trans_pipeline, tag='paprika')(path) |
||||
|
elif version == 'shinkai': |
||||
|
x = pipeline(trans_pipeline, tag='shinkai')(path) |
||||
|
|
||||
|
# Converting from channel-first, [0,1] value RGB, numpy array to PIL image. |
||||
|
x = numpy.transpose(x[0][0], (1, 2, 0)) |
||||
|
x = Image.fromarray((x * 255).astype(numpy.uint8)) |
||||
|
return x |
Loading…
Reference in new issue