Altnbek commited on
Commit
30e4e32
·
verified ·
1 Parent(s): c093dec

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +172 -0
  2. requirements.txt +13 -0
app.py ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py - Переводчик аудио (Английский -> Русский) с качественным TTS
2
+ import torch
3
+ import gradio as gr
4
+ import numpy as np
5
+ import soundfile as sf
6
+ import librosa
7
+ import tempfile
8
+ import os
9
+ from transformers import (
10
+ WhisperProcessor,
11
+ WhisperForConditionalGeneration,
12
+ pipeline # Для модели перевода
13
+ )
14
+
15
+ print("🔄 Загружаю модели...")
16
+
17
+ # === 1. WHISPER: ТРАНСКРИПЦИЯ АНГЛИЙСКОЙ РЕЧИ ===
18
+ print("1. Загружаю Whisper для транскрипции...")
19
+ whisper_processor = WhisperProcessor.from_pretrained("openai/whisper-small")
20
+ whisper_model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")
21
+ whisper_model.config.forced_decoder_ids = whisper_processor.get_decoder_prompt_ids(
22
+ language="english",
23
+ task="transcribe"
24
+ )
25
+
26
+ # === 2. МОДЕЛЬ ПЕРЕВОДА: АНГЛИЙСКИЙ -> РУССКИЙ ===
27
+ print("2. Загружаю модель перевода Helsinki-NLP/opus-mt-en-ru...")
28
+ translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-ru")
29
+
30
+ print("✅ Все модели загружены!")
31
+
32
+ def translate_english_audio(audio_file):
33
+ """Основная функция: транскрибирует английское аудио и переводит текст"""
34
+ try:
35
+ if audio_file is None:
36
+ return None, "Загрузите аудиофайл"
37
+
38
+ print("\n" + "="*50)
39
+ print("🎤 Начинаю обработку...")
40
+
41
+ # ШАГ 1: Транскрибируем аудио в английский текст
42
+ print("1. Транскрибирую аудио (Whisper)...")
43
+ audio_data, sample_rate = sf.read(audio_file)
44
+
45
+ if len(audio_data.shape) > 1:
46
+ audio_data = audio_data.mean(axis=1)
47
+
48
+ if sample_rate != 16000:
49
+ audio_data = librosa.resample(audio_data, orig_sr=sample_rate, target_sr=16000)
50
+ sample_rate = 16000
51
+
52
+ input_features = whisper_processor(
53
+ audio_data,
54
+ sampling_rate=sample_rate,
55
+ return_tensors="pt"
56
+ ).input_features
57
+
58
+ with torch.no_grad():
59
+ predicted_ids = whisper_model.generate(
60
+ input_features,
61
+ language="english",
62
+ task="transcribe",
63
+ max_length=448
64
+ )
65
+
66
+ english_text = whisper_processor.batch_decode(predicted_ids, skip_special_tokens=True)[0].strip()
67
+ print(f" Английский текст: '{english_text}'")
68
+
69
+ if not english_text:
70
+ return None, "Не удалось распознать речь"
71
+
72
+ # ШАГ 2: Переводим текст на русский
73
+ print("2. Перевожу текст (opus-mt-en-ru)...")
74
+ translation_result = translator(english_text[:512])
75
+ russian_text = translation_result[0]['translation_text'].strip()
76
+ print(f" Русский текст: '{russian_text}'")
77
+
78
+ if not russian_text:
79
+ return None, "Ошибка перевода"
80
+
81
+ # ШАГ 3: Синтезируем русскую речь с помощью Silero TTS
82
+ print("3. Синтезирую русскую речь (Silero TTS)...")
83
+ # Загружаем модель Silero
84
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
85
+ model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
86
+ model='silero_tts',
87
+ language='ru',
88
+ speaker='ru_v3')
89
+ model.to(device)
90
+
91
+ # Выбираем голос (можно изменить: aidar, baya, kseniya, xenia, random)
92
+ speaker = 'aidar'
93
+ # Генерируем речь
94
+ with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
95
+ audio_path = f.name
96
+ model.save_wav(text=russian_text,
97
+ speaker=speaker,
98
+ sample_rate=48000,
99
+ audio_path=audio_path)
100
+
101
+ print("✅ Обработка завершена!")
102
+ print("="*50)
103
+
104
+ # Возвращаем путь к аудиофайлу и переведённый текст
105
+ return audio_path, f"EN: {english_text}\n\nRU: {russian_text}"
106
+
107
+ except Exception as e:
108
+ print(f"❌ Ошибка: {str(e)}")
109
+ import traceback
110
+ traceback.print_exc()
111
+ return None, f"Ошибка: {str(e)}"
112
+
113
+ # === ИНТЕРФЕЙС GRADIO ===
114
+ print("Создаю интерфейс...")
115
+ with gr.Blocks(title="🎙️ Переводчик аудио EN->RU", theme=gr.themes.Soft()) as demo:
116
+ gr.Markdown("# 🎙️ Переводчик аудио (Англи��ский → Русский)")
117
+ gr.Markdown("Загрузите аудио с английской речью → Получите перевод на русском с качественным синтезом речи")
118
+
119
+ with gr.Row():
120
+ with gr.Column():
121
+ audio_input = gr.Audio(
122
+ label="🎤 Загрузите аудио на английском",
123
+ type="filepath",
124
+ sources=["upload"]
125
+ )
126
+
127
+ process_btn = gr.Button(
128
+ "🚀 Перевести аудио",
129
+ variant="primary",
130
+ size="lg"
131
+ )
132
+
133
+ with gr.Column():
134
+ audio_output = gr.Audio(
135
+ label="🔊 Результат на русском (Silero TTS)",
136
+ type="filepath"
137
+ )
138
+
139
+ text_output = gr.Textbox(
140
+ label="📝 Текст перевода",
141
+ lines=5,
142
+ interactive=False
143
+ )
144
+
145
+ # Информация
146
+ gr.Markdown("---")
147
+ gr.Markdown("""
148
+ ### 🔧 Технологии:
149
+ - **Распознавание речи:** Whisper (OpenAI)
150
+ - **Перевод текста:** Helsinki-NLP/opus-mt-en-ru
151
+ - **Синтез речи:** Silero TTS (высокое качество для русского)
152
+
153
+ ### 💡 Советы:
154
+ - Используйте аудио с чёткой английской речью
155
+ - Оптимальная длина: 5-30 секунд
156
+ - Поддерживаемые форматы: WAV, MP3, FLAC
157
+ """)
158
+
159
+ # Обработчик
160
+ process_btn.click(
161
+ fn=translate_english_audio,
162
+ inputs=[audio_input],
163
+ outputs=[audio_output, text_output]
164
+ )
165
+
166
+ # === ЗАПУСК ===
167
+ print("Запускаю приложение...")
168
+ try:
169
+ demo.launch(debug=True, share=True)
170
+ except Exception as e:
171
+ print(f"Ошибка при запуске: {e}")
172
+ demo.launch(debug=True, share=False)
requirements.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Основные библиотеки
2
+ torch>=2.0.0
3
+ torchaudio>=2.0.0
4
+ gradio>=4.0.0
5
+
6
+ # Обработка аудио и ML
7
+ transformers>=4.30.0
8
+ soundfile>=0.12.0
9
+ librosa>=0.10.0
10
+ numpy>=1.21.0
11
+
12
+ # Для Silero TTS
13
+ gdown>=4.7.0 # Может потребоваться для загрузки моделей