ukrainian-tts / app.py
Yurii Paniv
Add accented text as output
a575152
raw history blame
No virus
3.91 kB
import tempfile
import gradio as gr
from datetime import datetime
from enum import Enum
from ukrainian_tts.tts import TTS
from torch.cuda import is_available
class StressOption(Enum):
AutomaticStress = "Автоматичні наголоси (за словником) 📖"
AutomaticStressWithModel = "Автоматичні наголоси (за допомогою моделі) 🧮"
class VoiceOption(Enum):
Olena = "Олена (жіночий) 👩"
Mykyta = "Микита (чоловічий) 👨"
Lada = "Лада (жіночий) 👩"
Dmytro = "Дмитро (чоловічий) 👨"
Olga = "Ольга (жіночий) 👩"
print(f"CUDA available? {is_available()}")
badge = (
"https://visitor-badge-reloaded.herokuapp.com/badge?page_id=robinhad.ukrainian-tts"
)
ukr_tts = TTS(use_cuda=is_available())
def tts(text: str, voice: str, stress: str):
print("============================")
print("Original text:", text)
print("Voice", voice)
print("Stress:", stress)
print("Time:", datetime.utcnow())
autostress_with_model = (
True if stress == StressOption.AutomaticStressWithModel.value else False
)
voice_mapping = {
VoiceOption.Olena.value: "olena",
VoiceOption.Mykyta.value: "mykyta",
VoiceOption.Lada.value: "lada",
VoiceOption.Dmytro.value: "dmytro",
VoiceOption.Olga.value: "olga",
}
speaker_name = voice_mapping[voice]
text_limit = 7200
text = (
text if len(text) < text_limit else text[0:text_limit]
) # mitigate crashes on hf space
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
_, text = ukr_tts.tts(text, speaker_name, autostress_with_model, fp)
return fp.name, text
with open("README.md") as file:
article = file.read()
article = article[article.find("---\n", 4) + 5::]
iface = gr.Interface(
fn=tts,
inputs=[
gr.components.Textbox(
label="Input",
value="Введіть, будь ласка, своє р+ечення.",
),
gr.components.Radio(
label="Голос",
choices=[option.value for option in VoiceOption],
value=VoiceOption.Olena.value,
),
gr.components.Radio(
label="Наголоси",
choices=[option.value for option in StressOption],
value=StressOption.AutomaticStress.value
),
],
outputs=[
gr.components.Audio(label="Output"),
gr.components.Textbox(label="Наголошений текст"),
],
title="🐸💬🇺🇦 - Coqui TTS",
description="Україномовний🇺🇦 TTS за допомогою Coqui TTS (щоб вручну поставити наголос, використовуйте + перед голосною)",
article=article + f'\n <center><img src="{badge}" alt="visitors badge"/></center>',
examples=[
[
"Введіть, будь ласка, своє речення.",
VoiceOption.Olena.value,
StressOption.AutomaticStress.value,
],
[
"Введіть, будь ласка, своє речення.",
VoiceOption.Mykyta.value,
StressOption.AutomaticStress.value,
],
[
"Вв+едіть, будь ласка, св+оє реч+ення.",
VoiceOption.Dmytro.value,
StressOption.AutomaticStress.value,
],
[
"Привіт, як тебе звати?",
VoiceOption.Olga.value,
StressOption.AutomaticStress.value,
],
[
"Договір підписано 4 квітня 1949 року.",
VoiceOption.Lada.value,
StressOption.AutomaticStress.value,
],
],
)
iface.launch(enable_queue=True)