from utils import *
taskType = "3"
temp_examples = get_temps_examples(taskType)
user_examples = get_user_examples(taskType)
showcase_examples = get_showcase_examples(taskType)
user_recorder = UserRecorder()
# 当试用次数耗尽,显示的信息
no_more_attempts = "Sorry, You've used all trial attempts. Please enter your token to continue..."
# Description
title = r"""
Selfit AI App: Product poster background generation
"""
description = r"""
Go to HeyBeauty for Faster and Free AI App! 🤗 .
Official 🤗 Gradio demo for Product poster background generation.
1. Please wait for a while after submitting the task, you will get the result within 30 seconds.
2. Share app with your friends and enjoy! 😊.
"""
css = """
.gradio-container {width: 85% !important}
"""
def onClick(temp_image, user_image, caption_text, request: gr.Request):
print("======> temp_image ", type(temp_image), temp_image)
print("======> user_image ", type(user_image))
print("======> caption_text ", type(caption_text))
if temp_image is None:
yield None, "please choose a template background!!!"
return None, "please choose a template background!!!"
try:
client_ip = request.client.host
x_forwarded_for = dict(request.headers).get('x-forwarded-for')
if x_forwarded_for: client_ip = x_forwarded_for
if not check_region_warp(client_ip):
return None, "Failed !!! Our server is under maintenance, please try again later"
_, total_n, _ = user_recorder.get_record(client_ip)
if total_n>=LimitTask:
print(no_more_attempts)
yield None, no_more_attempts
return None, "no_more_attempts"
upload_url = upload_user_img(client_ip, user_image)
if len(upload_url)==0:
yield None, "fail to upload"
return None, "fail to upload"
taskId = publicSelfitTask(upload_url, temp_image, caption_text)
if not taskId:
yield None, "fail to public task..."
return None, "fail to public task..."
# taskId = "95a19e33-1ff5-446e-ac37-d3a8dd59eba8-e1"
max_try = 30
wait_s = 3
time.sleep(5)
for i in range(max_try):
time.sleep(wait_s)
taskStatus = getTaskRes(taskId)
if taskStatus is None: continue
user_recorder.save_record(taskStatus, ip=client_ip)
status = taskStatus['status']
if status in ['FAILED', 'CANCELLED', 'TIMED_OUT', ]:
yield None, f"task failed, query {i}, status {status}"
return None, f"task failed, query {i}, status {status}"
elif status in ['IN_QUEUE', 'IN_PROGRESS', 'IN_QUEUE', ]:
yield None, f"task is on processing, query {i}, status {status}"
elif status=='COMPLETED':
out = taskStatus['output']['job_results']['output1']
yield out, f"task is COMPLETED"
return out, f"{i} task COMPLETED"
yield None, "fail to query task.."
return None, "fail to query task.."
except Exception as e:
print(e)
# raise e
yield None, "fail to create task"
return None, "fail to create task"
def onLoad(request: gr.Request):
client_ip = request.client.host
x_forwarded_for = dict(request.headers).get('x-forwarded-for')
if x_forwarded_for:
client_ip = x_forwarded_for
his_datas, total_n, msg = user_recorder.get_record(client_ip)
left_n = max(0, LimitTask-total_n)
his_datas.append(msg)
his_datas.append(f"Submit ({left_n} attempts left)")
return his_datas
with gr.Blocks(css=css) as demo:
gr.Markdown(title)
gr.Markdown(description)
with gr.Row():
with gr.Column():
with gr.Column():
temp_image = gr.Image(sources='clipboard', type="filepath", label="Choose a template",
value=temp_examples[0][0])
temp_example = gr.Examples(inputs=[temp_image],
examples_per_page=9, examples=temp_examples)
with gr.Column():
with gr.Column():
user_image = gr.Image(value=None, type="numpy", label="product photo")
caption_text = gr.Textbox(value="", interactive=True,
label='English caption text(optional)')
with gr.Column():
with gr.Column():
res_image = gr.Image(label="generate image", value=None, type="filepath")
info_text = gr.Textbox(value="", interactive=False,
label='runtime information')
run_button = gr.Button(value="Submit")
MK01 = gr.Markdown()
with gr.Column():
show_case = gr.Examples(
examples=showcase_examples,
inputs=[temp_image, user_image, res_image, ],
label=None
)
with gr.Tab('history'):
with gr.Row():
MK02 = gr.Markdown()
with gr.Row():
his_input1 = gr.HTML()
his_output1 = gr.HTML()
with gr.Row():
his_input2 = gr.HTML()
his_output2 = gr.HTML()
with gr.Row():
his_input3 = gr.HTML()
his_output3 = gr.HTML()
run_button.click(fn=onClick, inputs=[temp_image, user_image, caption_text],
outputs=[res_image, info_text], concurrency_limit=50)
demo.load(onLoad, inputs=[], outputs=[his_input1, his_output1,
his_input2, his_output2, his_input3, his_output3,
MK02, run_button])
if __name__ == "__main__":
demo.queue(max_size=50)
# demo.queue(concurrency_count=60)
# demo.launch(server_name='0.0.0.0', server_port=225)
demo.launch(server_name='0.0.0.0')