import os import gradio as gr from gradio_client import Client, handle_file from themes import IndonesiaTheme # Impor tema custom dari themes.py from PIL import Image import random import tempfile # Untuk membuat file sementara import time # Untuk fungsi penundaan # Siapkan URL untuk permintaan API Virtual Try-On url_api = os.environ['url_api'] url_api2 = os.environ['url_api2'] url_api3 = os.environ['url_api3'] url_api4 = os.environ['url_api4'] url_api5 = os.environ['url_api5'] url_api6 = os.environ['url_api6'] url_api7 = os.environ['url_api7'] # Fungsi untuk memilih URL secara acak def get_random_api_url(): return random.choice([url_api, url_api2, url_api3, url_api4, url_api5, url_api6, url_api7]) # 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, garment_des, seed, randomize_seed, denoise_steps, is_checked, is_checked_crop): # Pilih URL secara acak selected_api_url = get_random_api_url() client = Client(selected_api_url) # Simpan gambar sementara person_img_path = save_temp_image(person_img) garment_img_path = save_temp_image(garment_img) # Pemanggilan API yang sudah disesuaikan dengan format baru result = client.predict( dict={ "background": handle_file(person_img_path), "layers": [], "composite": None # Menggunakan None sesuai dengan format yang diberikan }, garm_img=handle_file(garment_img_path), garment_des=garment_des, # Deskripsi pakaian dari input pengguna is_checked=is_checked, # Checkbox apakah checked atau tidak is_checked_crop=is_checked_crop, # Checkbox untuk cropping denoise_steps=denoise_steps, # Denoise steps slider seed=seed, api_name="/tryon" ) # Hapus file sementara setelah selesai os.remove(person_img_path) os.remove(garment_img_path) # Daftar kalimat acak yang menarik dan lucu compliments = [ "Anda tampak hebat dengan baju itu!", "Wow, Anda terlihat sangat memukau sekarang!", "Siap jadi pusat perhatian dengan outfit ini!", "Anda terlihat seperti bintang di red carpet!", "Baju ini benar-benar cocok dengan gaya Anda!", "Luar biasa! Anda terlihat seperti seorang model profesional!", "Siapa yang tidak terpesona melihat Anda sekarang?", "Gaya Anda sangat menakjubkan dengan pakaian ini!", "Perfect match! Anda terlihat menawan!", "Siap untuk sesi foto? Anda benar-benar keren!" ] # Mengembalikan hasil dan pesan pujian acak return result[0], random.choice(compliments), "Proses selesai." # Fungsi untuk menampilkan pesan popup dan menunda eksekusi def show_popup_and_wait(): gr.alert("Ruang ganti kami terbatas. Mohon menunggu antreannya.") time.sleep(60) # Menunggu selama 1 menit # 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 TokoBajuVirtual: # Tambahkan banner gr.HTML("""