File size: 2,442 Bytes
ff52f5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d7479d
00c85d6
 
ff52f5f
 
00c85d6
 
 
 
 
ff52f5f
 
 
 
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
import streamlit as st

from mulyavin_aa import langdetector
from mulyavin_aa import translator
from kuznetsov_av import text_to_speech_converter

LANG_DETECTOR = "LANG_DETECTOR"
TRANSLATOR = "TRANSLATOR"
TEXT_TO_SPEECH = "TEXT_TO_SPEECH"
SPEAKER_DATASET = "SPEAKER_DATASET"


@st.cache_resource
def load_models() -> dict:
    """
    Получение справочника моделей
    :return: Справочник моделей
    """
    models = dict()
    models[LANG_DETECTOR] = langdetector.load_text_detection_model()
    models[TRANSLATOR] = translator.load_text_translator_model()
    models[TEXT_TO_SPEECH] = text_to_speech_converter.load_model()
    models[SPEAKER_DATASET] = text_to_speech_converter.load_speaker_dataset()

    return models


def page_one():
    """
    Основная программа
    """

    models = load_models()

    # Оформление заголовка
    st.header('Домашнее задание', divider='gray')

    input_text = st.text_area(
        'Введите текст на русском или английском языке и нажмите кнопку генератора:')

    if st.button('Генерировать!!!'):
        # Определение языка
        text_lang = langdetector.lang_detect(input_text, models[LANG_DETECTOR])
        if text_lang not in ['ru', 'en']:
            st.error('Язык текста не может быть определен')
            return

        # Перевод языка если не en
        if text_lang in ['ru']:
            input_text = translator.translate_to_en(input_text, models[TRANSLATOR])

        st.subheader('Озвученный текст на английском языке', divider='gray')

        st.text(input_text)

        # Преобразование текста в речь
        with st.status('Пожалуйста подождите, идет преобразование текста в речь...') as status:
            audio_data, sampling_rate = text_to_speech_converter.text_to_speech(
                input_text, models[TEXT_TO_SPEECH], models[SPEAKER_DATASET])
            status.update(label='Преобразование завершено. Для прослушивания нажмите кнопку воспроизведения.', state='complete')
        
        st.audio(data=audio_data, sample_rate=sampling_rate)


page_one()