Deddy's picture
Update app.py
ba2358b verified
raw
history blame
5.57 kB
import os
import gradio as gr
import requests
import json
from PIL import Image
import tempfile
from themes import IndonesiaTheme # Impor tema custom dari themes.py
# Siapkan URL untuk permintaan API
api_url = "https://kwai-kolors-kolors-virtual-try-on.hf.space/queue/join?__theme=system"
# Fungsi untuk menyimpan gambar sementara ke file
def save_temp_image(image_array):
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png")
image = Image.fromarray(image_array.astype('uint8'))
image.save(temp_file.name)
return temp_file.name
# Fungsi untuk memanggil API Virtual Try-On
def virtual_tryon(person_img, garment_img, seed, randomize_seed):
# Simpan gambar sementara
person_img_path = save_temp_image(person_img)
garment_img_path = save_temp_image(garment_img)
payload = json.dumps({
"data": [
{
"path": person_img_path,
"url": f"https://deddy-toko-baju-virtual-gratis.hf.space/file={person_img_path}",
"size": None,
"orig_name": os.path.basename(person_img_path),
"mime_type": None,
"is_stream": False,
"meta": {
"_type": "gradio.FileData"
}
},
{
"path": garment_img_path,
"url": f"https://deddy-toko-baju-virtual-gratis.hf.space/file={garment_img_path}",
"size": None,
"orig_name": os.path.basename(garment_img_path),
"mime_type": None,
"is_stream": False,
"meta": {
"_type": "gradio.FileData"
}
},
seed,
randomize_seed
],
"event_data": None,
"fn_index": 2, # Indeks API yang sesuai
"trigger_id": 26,
"session_hash": "l8hba3fqoe8" # Hash session harus diperbarui jika berubah
})
headers = {
'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0'
}
# Kirim permintaan API
response = requests.post(api_url, headers=headers, data=payload)
if response.status_code == 200:
result = response.json()
# Mengambil hasil dari API
return result['data'][0], seed, "Proses selesai."
else:
return None, seed, f"Error: {response.status_code}"
# Fungsi untuk memuat deskripsi dari file
def load_description(fp):
with open(fp, 'r', encoding='utf-8') as f:
content = f.read()
return content
# Path untuk contoh gambar
example_path = os.path.join(os.path.dirname(__file__), 'assets')
# Daftar gambar pakaian contoh
garm_list = os.listdir(os.path.join(example_path, "cloth"))
garm_list_path = [os.path.join(example_path, "cloth", garm) for garm in garm_list]
# Daftar gambar orang contoh
human_list = os.listdir(os.path.join(example_path, "human"))
human_list_path = [os.path.join(example_path, "human", human) for human in human_list]
# CSS untuk styling antarmuka
css = """
#col-left, #col-mid, #col-right {
margin: 0 auto;
max-width: 400px;
padding: 10px;
border-radius: 15px;
background-color: #f9f9f9;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
#banner {
width: 100%;
text-align: center;
margin-bottom: 20px;
}
#run-button {
background-color: #ff4b5c;
color: white;
font-weight: bold;
padding: 10px;
border-radius: 10px;
cursor: pointer;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
#footer {
text-align: center;
margin-top: 20px;
color: silver;
}
"""
# Membuat antarmuka Gradio dengan tema IndonesiaTheme
with gr.Blocks(css=css, theme=IndonesiaTheme()) as app:
# Tambahkan banner
gr.HTML("""
<div style='text-align: center;'>
<img src='https://i.ibb.co.com/BgBLhSW/banner.jpg' alt='Banner' style='width: 100%; height: auto;'/>
</div>
""")
# Ganti judul
gr.Markdown("<h1 style='text-align: center;'>Selamat Datang Pelanggan Tercinta!โค๏ธ Senang dapat melayani Anda.. </h1>")
# Layout utama
with gr.Row():
with gr.Column(elem_id="col-left"):
gr.Markdown("### Unggah Foto Anda")
person_img = gr.Image(label="Foto Orang", type="numpy")
gr.Examples(inputs=person_img, examples=human_list_path, examples_per_page=8)
with gr.Column(elem_id="col-mid"):
gr.Markdown("### Unggah Foto Pakaian")
garment_img = gr.Image(label="Foto Pakaian", type="numpy")
gr.Examples(inputs=garment_img, examples=garm_list_path, examples_per_page=8)
with gr.Column(elem_id="col-right"):
result_img = gr.Image(label="Hasil", show_share_button=False)
seed = gr.Slider(label="Token-Slider", minimum=0, maximum=999999, step=1, value=0)
randomize_seed = gr.Checkbox(label="Random Token", value=True)
seed_used = gr.Number(label="Token Terpakai")
result_info = gr.Textbox(label="Jawaban CS Kami")
run_button = gr.Button(value="โญ Mulai Ganti Pakaian โญ", elem_id="run-button")
run_button.click(fn=virtual_tryon, inputs=[person_img, garment_img, seed, randomize_seed], outputs=[result_img, seed_used, result_info])
# Tambahkan footer di bagian bawah
gr.HTML("""
<footer id="footer">
Transfer Energi Semesta Digital ยฉ 2024 __drat. | ๐Ÿ‡ฎ๐Ÿ‡ฉ Untuk Indonesia Jaya!
</footer>
""")
# Menjalankan aplikasi
if __name__ == "__main__":
app.launch()