TTS-WebUI-KH / app.py
khanrina's picture
Update app.py
b0f1f09 verified
Raw
History Blame Contribute Delete
1.83 kB
import gradio as gr
import torch
from transformers import VitsModel, AutoTokenizer
import scipy.io.wavfile as wavfile
# ៑. αž‘αžΆαž‰αž™αž€αž˜αŸ‰αžΌαžŠαŸ‚αž› TTS αž—αžΆαžŸαžΆαžαŸ’αž˜αŸ‚αžšαžšαž”αžŸαŸ‹ Meta
model_name = "facebook/mms-tts-khm"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = VitsModel.from_pretrained(model_name)
def tts_khmer(text):
# αž”αŸ†αž›αŸ‚αž„αž’αž€αŸ’αžŸαžšαžαŸ’αž˜αŸ‚αžšαž‘αŸ…αž‡αžΆ Inputs αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΌαžŠαŸ‚αž›
inputs = tokenizer(text, return_tensors="pt")
# αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αž‘αŸαž„
with torch.no_grad():
output = model(**inputs).waveform
# αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž˜αŸ’αžšαž„αŸ‹αž‘αŸ…αž‡αžΆ File αžŸαŸ†αž‘αŸαž„ WAV
sampling_rate = model.config.sampling_rate
audio_data = output.numpy().squeeze()
output_path = "khmer_output.wav"
wavfile.write(output_path, rate=sampling_rate, data=audio_data)
return output_path
# ្. αž”αž„αŸ’αž€αžΎαžαž•αŸ’αž‘αžΆαŸ†αž„ WebUI αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆαžαŸ’αž˜αŸ‚αžš
interface = gr.Interface(
fn=tts_khmer,
inputs=gr.Textbox(
label="αžœαžΆαž™αž’αžαŸ’αžαž”αž‘αž‡αžΆαž—αžΆαžŸαžΆαžαŸ’αž˜αŸ‚αžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡",
value="αžŸαž½αžŸαŸ’αžαžΈ! αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž˜αž€αž€αžΆαž“αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž’αžαŸ’αžαž”αž‘αž‘αŸ…αž‡αžΆαžŸαŸ†αž‘αŸαž„αž“αž·αž™αžΆαž™αŸ”"
),
outputs=gr.Audio(label="αž›αž‘αŸ’αž’αž•αž›αžŸαŸ†αž‘αŸαž„αžαŸ’αž˜αŸ‚αžš"),
title="Khmer TTS Demo (Meta MMS)",
description="αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸαžŸαŸ’αžαžŸαžΆαž€αž›αŸ’αž”αž„αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž’αž€αŸ’αžŸαžšαžαŸ’αž˜αŸ‚αžšαž‘αŸ…αž‡αžΆαžŸαŸ†αž‘αŸαž„ AI αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Meta MMS-TTS"
)
if __name__ == "__main__":
interface.launch(server_name="0.0.0.0")