ReconMadeIt commited on
Commit
8d02254
·
verified ·
1 Parent(s): b7d1301

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -21
app.py CHANGED
@@ -4,62 +4,80 @@ import torch
4
  import scipy.io.wavfile
5
  import threading
6
  import asyncio
 
7
  from telegram import Update
8
  from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
9
 
10
- # 1. Загрузка модели
11
  model_name = "facebook/mms-tts-che"
12
  model = VitsModel.from_pretrained(model_name)
13
  tokenizer = AutoTokenizer.from_pretrained(model_name)
14
 
15
  def tts_chechen_logic(text):
16
- inputs = tokenizer(text.lower(), return_tensors="pt")
 
 
 
17
  with torch.no_grad():
18
  output = model(**inputs).waveform
19
 
20
  sampling_rate = model.config.sampling_rate
21
  audio_data = output.squeeze().numpy()
22
- file_path = "voice.wav"
23
  scipy.io.wavfile.write(file_path, rate=sampling_rate, data=audio_data)
24
  return sampling_rate, audio_data, file_path
25
 
26
- # --- БЛОК TELEGRAM БОТА ---
 
27
  TG_TOKEN = "8287698372:AAEwoOWgQWHbeyDmJdN0B-OpKpy7-TARHMg"
28
 
29
  async def handle_tg_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
30
  if not update.message or not update.message.text:
31
  return
 
 
32
  try:
 
33
  _, _, file_path = tts_chechen_logic(update.message.text)
 
34
  with open(file_path, 'rb') as audio:
35
  await context.bot.send_voice(chat_id=update.effective_chat.id, voice=audio)
 
36
  except Exception as e:
37
- print(f"Ошибка бота: {e}")
38
 
39
- def start_bot():
40
- # Создаем приложение внутри потока
41
- app = ApplicationBuilder().token(TG_TOKEN).build()
42
- app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_tg_message))
43
-
44
- print("--- ЗАПУСК БОТА В ПОТОКЕ ---")
45
- # Используем этот метод для запуска в контейнерах
46
- app.run_polling(close_loop=False, drop_pending_updates=True)
 
 
 
 
 
47
 
48
- # Запускаем поток
49
- threading.Thread(target=start_bot, daemon=True).start()
50
- # --------------------------
 
51
 
52
- # Интерфейс Gradio
53
  def gradio_interface(text):
54
  sr, audio, _ = tts_chechen_logic(text)
55
  return (sr, audio)
56
 
57
  demo = gr.Interface(
58
  fn=gradio_interface,
59
- inputs=gr.Textbox(label="Текст на чеченском"),
60
- outputs=gr.Audio(label="Голос"),
61
- title="NoxchiynAz TTS"
 
62
  )
63
 
64
  if __name__ == "__main__":
65
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
4
  import scipy.io.wavfile
5
  import threading
6
  import asyncio
7
+ import os
8
  from telegram import Update
9
  from telegram.ext import ApplicationBuilder, ContextTypes, MessageHandler, filters
10
 
11
+ # 1. Загрузка модели Meta для чеченского языка
12
  model_name = "facebook/mms-tts-che"
13
  model = VitsModel.from_pretrained(model_name)
14
  tokenizer = AutoTokenizer.from_pretrained(model_name)
15
 
16
  def tts_chechen_logic(text):
17
+ # Очистка текста: убираем лишние пробелы и приводим к нижнему регистру
18
+ clean_text = text.strip().lower()
19
+ inputs = tokenizer(clean_text, return_tensors="pt")
20
+
21
  with torch.no_grad():
22
  output = model(**inputs).waveform
23
 
24
  sampling_rate = model.config.sampling_rate
25
  audio_data = output.squeeze().numpy()
26
+ file_path = "voice_msg.wav"
27
  scipy.io.wavfile.write(file_path, rate=sampling_rate, data=audio_data)
28
  return sampling_rate, audio_data, file_path
29
 
30
+ # --- БЛОК ТВОЕГО TELEGRAM БОТА ---
31
+ # Твой НОВЫЙ токен
32
  TG_TOKEN = "8287698372:AAEwoOWgQWHbeyDmJdN0B-OpKpy7-TARHMg"
33
 
34
  async def handle_tg_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
35
  if not update.message or not update.message.text:
36
  return
37
+
38
+ print(f"📩 Получен текст: {update.message.text}")
39
  try:
40
+ # Генерируем голос
41
  _, _, file_path = tts_chechen_logic(update.message.text)
42
+ # Отправляем аудио файл
43
  with open(file_path, 'rb') as audio:
44
  await context.bot.send_voice(chat_id=update.effective_chat.id, voice=audio)
45
+ print("✅ Голосовое сообщение отправлено!")
46
  except Exception as e:
47
+ print(f"Ошибка при обработке: {e}")
48
 
49
+ def run_bot_forever():
50
+ try:
51
+ # Настройка асинхронного запуска бота
52
+ loop = asyncio.new_event_loop()
53
+ asyncio.set_event_loop(loop)
54
+
55
+ app = ApplicationBuilder().token(TG_TOKEN).build()
56
+ app.add_handler(MessageHandler(filters.TEXT & (~filters.COMMAND), handle_tg_message))
57
+
58
+ print("🚀 Бот запущен внутри Space и готов к работе 24/7!")
59
+ app.run_polling(drop_pending_updates=True, close_loop=False)
60
+ except Exception as e:
61
+ print(f"🔥 Ошибка запуска бота: {e}")
62
 
63
+ # Запуск бота в отдельном потоке (фоновый режим)
64
+ t = threading.Thread(target=run_bot_forever, daemon=True)
65
+ t.start()
66
+ # ---------------------------------
67
 
68
+ # Интерфейс для сайта (Gradio)
69
  def gradio_interface(text):
70
  sr, audio, _ = tts_chechen_logic(text)
71
  return (sr, audio)
72
 
73
  demo = gr.Interface(
74
  fn=gradio_interface,
75
+ inputs=gr.Textbox(label="Введите текст на чеченском (нохчийн мотт)"),
76
+ outputs=gr.Audio(label="Результат озвучки"),
77
+ title="NoxchiynAz TTS",
78
+ description="Ваш персональный бот для озвучки чеченского текста."
79
  )
80
 
81
  if __name__ == "__main__":
82
+ demo.launch(server_name="0.0.0.0", server_port=7860)
83
+