ReconMadeIt commited on
Commit
83af10e
·
verified ·
1 Parent(s): 18a43d0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -13
app.py CHANGED
@@ -1,24 +1,69 @@
1
  import gradio as gr
2
  from transformers import AutoTokenizer, VitsModel
3
  import torch
 
 
 
 
 
 
4
 
5
- # Load model and tokenizer
6
- model = VitsModel.from_pretrained("facebook/mms-tts-che")
7
- tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-che")
 
8
 
9
- def tts_chechen(text):
10
- inputs = tokenizer(text, return_tensors="pt")
 
11
  with torch.no_grad():
12
  output = model(**inputs).waveform
13
- return (model.config.sampling_rate, output.squeeze().numpy())
 
 
 
 
 
 
14
 
15
- # Gradio UI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  iface = gr.Interface(
17
- fn=tts_chechen,
18
- inputs=gr.Textbox(label="Nhập tiếng Chechen"),
19
- outputs=gr.Audio(label="Giọng đọc Chechen"),
20
- title="TTS Chechen - MMS by Meta",
21
- description="Chuyển văn bản tiếng Chechen thành giọng nói"
22
  )
23
 
24
- iface.launch()
 
1
  import gradio as gr
2
  from transformers import AutoTokenizer, VitsModel
3
  import torch
4
+ import scipy.io.wavfile
5
+ import os
6
+ import threading
7
+ import asyncio
8
+ from telegram import Update
9
+ from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
10
 
11
+ # 1. Загрузка модели и токенайзера
12
+ model_name = "facebook/mms-tts-che"
13
+ model = VitsModel.from_pretrained(model_name)
14
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
15
 
16
+ # Функция генерации звука
17
+ def tts_chechen_logic(text):
18
+ inputs = tokenizer(text.lower(), return_tensors="pt")
19
  with torch.no_grad():
20
  output = model(**inputs).waveform
21
+
22
+ # Сохраняем во временный файл для Telegram
23
+ sampling_rate = model.config.sampling_rate
24
+ audio_data = output.squeeze().numpy()
25
+ file_path = "voice.wav"
26
+ scipy.io.wavfile.write(file_path, rate=sampling_rate, data=audio_data)
27
+ return sampling_rate, audio_data, file_path
28
 
29
+ # --- БЛОК TELEGRAM БОТА ---
30
+ TG_TOKEN = "8287698372:AAHjHaJVy_DajLqQhs08rNHn_22H--AUopQ"
31
+
32
+ async def handle_tg_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
33
+ user_text = update.message.text
34
+ try:
35
+ # Генерируем звук
36
+ _, _, file_path = tts_chechen_logic(user_text)
37
+ # Отправляем в чат
38
+ with open(file_path, 'rb') as audio:
39
+ await context.bot.send_voice(chat_id=update.effective_chat.id, voice=audio)
40
+ except Exception as e:
41
+ print(f"Ошибка бота: {e}")
42
+
43
+ def run_bot():
44
+ # Создаем новый цикл событий для бота в отдельном потоке
45
+ loop = asyncio.new_event_loop()
46
+ asyncio.set_event_loop(loop)
47
+ app = ApplicationBuilder().token(TG_TOKEN).build()
48
+ app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_tg_message))
49
+ app.run_polling()
50
+
51
+ # Запускаем бота "в фоне"
52
+ threading.Thread(target=run_bot, daemon=True).start()
53
+ # --------------------------
54
+
55
+ # Функция для интерфейса Gradio
56
+ def gradio_interface(text):
57
+ sr, audio, _ = tts_chechen_logic(text)
58
+ return (sr, audio)
59
+
60
+ # Настройка внешнего вида сайта
61
  iface = gr.Interface(
62
+ fn=gradio_interface,
63
+ inputs=gr.Textbox(label="Введите текст на чеченском", placeholder="Мадарра язъе..."),
64
+ outputs=gr.Audio(label="Озвучка"),
65
+ title="NoxchiynAz Чеченский синтез речи",
66
+ description="Бот в Telegram: @твой_ник_бота (работает 24/7)"
67
  )
68
 
69
+ iface.launch()