File size: 2,727 Bytes
6d1d2e6 0b49beb 34caf6a 6d1d2e6 7eff961 6d1d2e6 34caf6a 1ecc27a 34caf6a 1ecc27a 34caf6a 1ecc27a 6d1d2e6 34caf6a 6d1d2e6 34caf6a 6d1d2e6 786c1d7 6d1d2e6 34caf6a 1ecc27a 34caf6a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
import os
import uuid
import gradio as gr
from gradio_client import Client
hf_token = os.environ.get('HF_TOKEN')
sdxl_client = Client("https://fffiloni-sdxl-dpo.hf.space/")
faceswap_client = Client("https://fffiloni-deepfakeai.hf.space/", hf_token=hf_token)
def get_sdxl(prompt_in):
sdxl_result = sdxl_client.predict(
prompt_in,
api_name="/infer"
)
return sdxl_result
def infer(portrait_in, prompt_in):
# Generate Image from SDXL
gr.Info("Generating SDXL image first ...")
# Keep trying the operation until it succeeds without raising an exception
while True:
try:
sdxl_result = get_sdxl(prompt_in)
break # Exit the while loop if the operation succeeded
except Exception as e:
print(f"Operation failed with error: {e}")
time.sleep(3) # Wait for 5 seconds before attempting again
unique_id = str(uuid.uuid4())
# Face Swap
gr.Info("Face swap your face on result ...")
faceswap_result = faceswap_client.predict(
portrait_in, # str (filepath or URL to image) in 'SOURCE IMAGE' Image component
sdxl_result, # str (filepath or URL to image) in 'TARGET IMAGE' Image component
unique_id, # str in 'parameter_12' Textbox component
["face_swapper", "face_enhancer"], # List[str] in 'FRAME PROCESSORS' Checkboxgroup component
"left-right", # str (Option from: ['left-right', 'right-left', 'top-bottom', 'bottom-top', 'small-large', 'large-small']) in 'FACE ANALYSER DIRECTION' Dropdown component
"none", # str (Option from: ['none', 'reference', 'many']) in 'FACE RECOGNITION' Dropdown component
"none", # str (Option from: ['none', 'male', 'female']) in 'FACE ANALYSER GENDER' Dropdown component
fn_index=1
)
return faceswap_result
css = """
#col-container{
margin: 0 auto;
max-width: 840px;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.HTML("""
<h2 style="text-align: center;">Portrait Maker</h2>
""")
with gr.Row():
with gr.Group():
with gr.Column():
portrait_in = gr.Image(label="Your face portrait", type="filepath")
prompt_in = gr.Textbox(label="Prompt to desired portrait using your own face")
submit_btn = gr.Button("Submit")
with gr.Column():
result = gr.Image(label="Result")
submit_btn.click(
fn = infer,
inputs = [
portrait_in,
prompt_in
],
outputs = [
result
]
)
demo.queue().launch() |