gfpgan / app.py
lalashechka's picture
Update app.py
e1a3b29 verified
import gradio as gr
import requests
import time
import json
import os
import urllib.parse
import re
def convert_url_filename(url):
def encode_filename(match):
full_filename = match.group(1)
return urllib.parse.quote(full_filename)
new_url = re.sub(r'/([^/]+)$', lambda m: '/' + encode_filename(m), url)
return new_url
def process_image(image_path):
url_image = "https://lalashechka-gfpgan.hf.space/gradio_api/file=" + image_path
encoded_url_image = convert_url_filename(url_image)
print(encoded_url_image)
headers = {"accept": "*/*","accept-language": "en-US,en;q=0.9","cache-control": "no-cache","content-type": "application/json","origin": "https://replicate.com","pragma": "no-cache","priority": "u=1, i","referer": "https://replicate.com/","sec-ch-ua": '"Not;A=Brand";v="24", "Chromium";v="128"',"sec-ch-ua-mobile": "?0","sec-ch-ua-platform": '"Linux"',"sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-site","user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"}
data = {"model": "tencentarc/gfpgan","version": "0fbacf7afc6c144e5be9767cff80f25aff23e52b0708f17e20f9879b2f21516c","input": {"img": encoded_url_image}}
result = requests.post("https://homepage.replicate.com/api/prediction", json=data, headers=headers)
prediction_id = result.json()['id']
poll_url = f"https://homepage.replicate.com/api/poll?id={prediction_id}"
c = 0
while c < 20:
time.sleep(1)
r = requests.get(poll_url, headers=headers)
status = r.json()['status']
if r.json()['status'] == 'succeeded':
image_url = r.json()['output']
return image_url
else:
c += 1
continue
css = """
.gradio-container {
min-width: 100% !important;
}
#image_output {
height: 500px;
}
#generate {
width: 100%;
background: #e253dd !important;
border: none;
border-radius: 50px;
outline: none !important;
color: white;
}
#generate:hover {
background: #de6bda !important;
outline: none !important;
color: #fff;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Row():
with gr.Column():
image_input = gr.Image(show_download_button=False, interactive=True, label='Изображение:', elem_id='image_output', type='filepath')
text_button = gr.Button("Запустить нейросеть", variant='primary', elem_id="generate")
with gr.Column():
image_output= gr.Image(show_download_button=False, interactive=False, label='Результат:', type='filepath')
text_button.click(process_image, inputs=image_input, outputs=image_output)
demo.queue(default_concurrency_limit=12)
demo.launch()