insideman's picture
Update app.py
2d93d36 verified
import gradio as gr
from huggingface_hub import InferenceClient
import PIL.Image
import io
import base64
client = InferenceClient(
model="Kwai-Kolors/Kolors-Virtual-Try-On"
)
def virtual_try_on(person_image, garment_image):
"""
Process the virtual try-on request
Args:
person_image: PIL Image of the person
garment_image: PIL Image of the garment
Returns:
PIL Image of the result
"""
try:
# Convert images to base64
person_bytes = io.BytesIO()
garment_bytes = io.BytesIO()
person_image.save(person_bytes, format='PNG')
garment_image.save(garment_bytes, format='PNG')
person_base64 = base64.b64encode(person_bytes.getvalue()).decode('utf-8')
garment_base64 = base64.b64encode(garment_bytes.getvalue()).decode('utf-8')
# Make API request
response = client.post(
json={
"inputs": [
{"image": person_base64},
{"image": garment_base64}
]
}
)
# Eğer response bytes ise doğrudan kullan, değilse base64'ten decode et
if isinstance(response, bytes):
result_bytes = response
else:
result_bytes = base64.b64decode(response)
# Convert response to image
result_image = PIL.Image.open(io.BytesIO(result_bytes))
return result_image, "Success"
except Exception as e:
return None, f"Error: {str(e)}"
# Create Gradio interface
demo = gr.Interface(
fn=virtual_try_on,
inputs=[
gr.Image(type="pil", label="Person Image"),
gr.Image(type="pil", label="Garment Image")
],
outputs=[
gr.Image(type="pil", label="Result"),
gr.Text(label="Status")
],
title="Virtual Try-On API",
description="Upload a person image and a garment image to see how the garment would look on the person."
)
if __name__ == "__main__":
demo.launch()