Spaces:
Running
on
Zero
Running
on
Zero
File size: 3,768 Bytes
4d849cc 499a43a 4d849cc 499a43a 43e252d 4d849cc 499a43a 4d849cc 43e252d 4d849cc 499a43a 4d849cc 499a43a 4d849cc 499a43a 4d849cc 499a43a 8a7fed3 4d849cc 499a43a 4d849cc 499a43a 4d849cc 499a43a 43e252d 4d849cc 499a43a 4d849cc |
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 79 80 |
import spaces
import tempfile
import gradio as gr
from f5_tts.api import F5TTS # f5_tts'in kurulu ve erişilebilir olduğunu varsayıyoruz
from huggingface_hub import hf_hub_download
import os
# Kullanılabilir model varyantlarını tanımla
VARIANTS = ["orkhon_tts"]
models = {}
# TTS modellerini yükle
# Bu döngü, VARIANTS listesini (şu anda sadece "orkhon_tts") yineler
# ve karşılık gelen F5TTS modelini yükler.
# Hugging Face Hub'dan model kontrol noktasını ve kelime dağarcığı dosyasını almak için
# hf_hub_download kullanır.
# Model özelse kimlik doğrulama için HF_TOKEN ortam değişkeni kullanılır.
for variant in VARIANTS:
models[variant] = F5TTS(
ckpt_file=hf_hub_download("hcsolakoglu/Orkhon-TTS", f"{variant}.pt", token=os.getenv("HF_TOKEN")),
vocab_file=hf_hub_download("hcsolakoglu/Orkhon-TTS", "vocab.txt", token=os.getenv("HF_TOKEN"))
)
@spaces.GPU # Bu fonksiyonun Hugging Face Spaces'ta varsa GPU'da çalışması gerektiğini belirten dekoratör
def generate(text, ref_audio, variant, progress=gr.Progress()):
"""
Seçilen F5TTS model varyantını kullanarak metinden konuşma üretir.
Args:
text (str): Sentezlenecek giriş metni.
ref_audio (str): Ses klonlama için referans sesin dosya yolu.
variant (str): Kullanılacak TTS model varyantı (örn. "orkhon_tts").
progress (gradio.Progress, optional): Gradio ilerleme izleyicisi. Varsayılan gr.Progress().
Returns:
str: Üretilen WAV ses dosyasının dosya yolu.
"""
# Seçilen varyant için F5TTS API örneğini al
api = models[variant]
# Üretilen sesi kaydetmek için geçici bir dosya oluştur
# delete=False önemlidir çünkü Gradio'nun bu dosyaya fonksiyon döndükten sonra erişmesi gerekir.
# Gradio geçici dosyaların temizlenmesini halledecektir.
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
# TTS çıkarımını gerçekleştir
api.infer(
ref_file=ref_audio, # Referans sesin yolu
ref_text="", # Referans metin (ASR kullanılırsa veya model tarafından gerekmiyorsa boş olabilir)
gen_text=text, # Konuşma üretilecek metin
progress=progress, # İlerleme izleyicisini API'ye ilet
file_wave=f.name, # Çıktı WAV dosyasını kaydetme yolu
nfe_step=64 # nfe_step değerini maksimuma (64) ayarla
)
print(f"Üretilen ses şuraya kaydedildi: {f.name}") # Geçici dosyanın yolunu günlüğe kaydet
return f.name # Üretilen ses dosyasının yolunu döndür
# Gradio arayüzünü oluştur
with gr.Blocks() as demo:
# Başlık ve açıklama için Markdown
gr.Markdown("# Demo for Orkhon-TTS\n\nTry out [Orkhon-TTS](https://huggingface.co/hcsolakoglu/Orkhon-TTS)")
# Giriş bileşenleri
textbox = gr.Textbox(label="Sentezlenecek Metin")
audio = gr.Audio(label="Referans Ses (ses klonlama için)", type="filepath")
variant_radio = gr.Radio(choices=VARIANTS, value=VARIANTS[0], label="Model Varyantını Seçin")
# Üretimi tetikleme düğmesi
btn = gr.Button("Konuşma Üret", variant="primary")
# Çıkış bileşeni
output_audio = gr.Audio(label="Sentezlenmiş Konuşma Çıktısı", type="filepath")
# Düğme için tıklama eylemini tanımla
# Düğmeye tıklandığında, 'generate' fonksiyonunu
# 'textbox', 'audio' ve 'variant_radio' değerleriyle giriş olarak çağır.
# 'generate' çıktısı 'output_audio' içinde görüntülenecektir.
btn.click(generate, [textbox, audio, variant_radio], outputs=[output_audio])
# Birden fazla isteği işlemek için demoyu kuyruğa al ve başlat
demo.queue().launch() |