Editing-Tools / image_editing.py
ahmedghani's picture
added more tools
c92867b
import os
import sys
from pathlib import Path
import torch
from basicsr.archs.rrdbnet_arch import RRDBNet
from gfpgan import GFPGANer
from realesrgan import RealESRGANer
import numpy as np
import cv2
from PIL import Image
from rembg import remove
# DeOldify
os.system("hub install deoldify==1.2.0")
import paddlehub as hub
hub.server_check()
colorize_model = hub.Module(name='deoldify')
highres_model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
bg_upsampler = RealESRGANer(
scale=4,
model_path='https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth',
model=highres_model,
tile=400,
tile_pad=10,
pre_pad=0,
half=True
)
upsampler = GFPGANer(
model_path='https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth',
upscale=4,
arch='clean',
channel_multiplier=2,
bg_upsampler=bg_upsampler,
device="cuda" if torch.cuda.is_available() else "cpu",
)
os.makedirs("deoldify", exist_ok=True)
os.makedirs("gfpganOutput", exist_ok=True)
os.makedirs("greyscale", exist_ok=True)
os.makedirs("rembg", exist_ok=True)
def restore_image(image):
_, _, output = upsampler.enhance(cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR), has_aligned=False, only_center_face=False, paste_back=True)
image = Image.fromarray(cv2.cvtColor(output, cv2.COLOR_BGR2RGB))
return image
def edit_image(image, option):
tools = ["High Res", "Colorize", "Greyscale", "Remove Background"]
if option == tools[0]:
restore_image(image).save("gfpganOutput/output.png")
return './gfpganOutput/output.png', './gfpganOutput/output.png'
elif option == tools[1]:
image.convert("L").save("deoldify/input.png", "PNG", quality=80, optimize=True)
colorize_model.predict("deoldify/input.png")
return './output/DeOldify/'+Path('deoldify/input.png').stem+".png", './output/DeOldify/'+Path('deoldify/input.png').stem+".png"
elif option == tools[2]:
image.convert('L').save("greyscale/output.png")
return './greyscale/output.png', './greyscale/output.png'
elif option == tools[3]:
remove(image).save("rembg/output.png")
return './rembg/output.png', './rembg/output.png'