u2net_portrait / app.py
wahaha's picture
init
01740ec
import os
import gradio as gr
import sys
sys.path.insert(0, 'U-2-Net')
from skimage import io, transform
import numpy as np
from PIL import Image
from utils.face_seg import FaceSeg
import cv2
import requests
import base64
from io import BytesIO
segment = FaceSeg()
def profuai(im_path, out_path):
r = requests.post(
'http://nebula.cs.ualberta.ca/predict',
files={
'file': open(im_path, 'rb'),
},
headers={'Host': 'nebula.cs.ualberta.ca', 'Origin': 'http://nebula.cs.ualberta.ca','Referer':'http://nebula.cs.ualberta.ca/',
'X-Requested-With':'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'}
)
#print(r)
if (r.status_code == 200):
data = r.text
#data:image/png;base64,
a = data[len("data:image/png;base64,"):]
missing_padding = 4 - len(a) % 4
if missing_padding:
a += '=' * missing_padding
img = Image.open(BytesIO(base64.urlsafe_b64decode(a)))
# print(a)
img.save(out_path, quality=80)
else:
raise Exception('error 1001')
def process(im):
image = cv2.imread(im.name)
matte = segment.get_mask(image)
if len(image.shape) == 2:
image = image[:, :, None]
if image.shape[2] == 1:
image = np.repeat(image, 3, axis=2)
elif image.shape[2] == 4:
image = image[:, :, 0:3]
matte = np.repeat(np.asarray(matte)[:, :, None], 3, axis=2) / 255
foreground = image * matte + np.full(image.shape, 255) * (1 - matte)
cv2.imwrite(im.name, foreground)
profuai(im.name, im.name)
return Image.open(im.name)
title = "U-2-Net"
description = "Gradio demo for U-2-Net, https://github.com/xuebinqin/U-2-Net"
article = ""
gr.Interface(
process,
[gr.inputs.Image(type="file", label="Input")
],
[gr.outputs.Image(type="pil", label="Output")],
title=title,
description=description,
article=article,
examples=[],
allow_flagging=False,
allow_screenshot=False
).launch(enable_queue=True,cache_examples=True)