Spaces:
Build error
Build error
File size: 6,227 Bytes
6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 1670477 6cb7e59 | 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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | import sys
import traceback
import logging
import warnings
import os
import gradio as gr
# Придушення попереджень
warnings.filterwarnings('ignore')
# Налаштування логування
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s',
handlers=[
logging.StreamHandler(sys.stdout),
logging.FileHandler('app_log.txt', mode='w')
]
)
logger = logging.getLogger(__name__)
# Безпечний імпорт модулів
try:
import torch
import torchaudio
import g4f
from transformers import pipeline
from TTS.api import TTS
from gtts import gTTS
logger.info("All modules imported successfully")
except Exception as e:
logger.error(f"Error importing modules: {e}")
logger.error(traceback.format_exc())
# Функція для перекладу через g4f
def neural_translate(text, target_language, source_language):
try:
prompt = f"Translate the following text from {source_language} to {target_language} keeping the original meaning and emotional tone: '{text}'"
response = g4f.ChatCompletion.create(
model="gpt-3.5-turbo", # Using 3.5-turbo instead of gpt-4 for better compatibility
messages=[{"role": "user", "content": prompt}],
stream=False
)
return response.strip()
except Exception as e:
logger.error(f"Помилка нейронного перекладу: {e}")
return text
# Функція для створення TTS з використанням gTTS
def gtts_synthesize(text, target_language, output_filename='output_gtts.wav'):
try:
# Створення TTS
tts = gTTS(text=text, lang=target_language)
tts.save(output_filename)
return output_filename
except Exception as e:
logger.error(f"Помилка gTTS: {e}")
return None
# Безпечна транскрипція
def safe_transcribe_audio(audio_path):
try:
asr = pipeline("automatic-speech-recognition", model="openai/whisper-tiny") # Using tiny model for faster loading
result = asr(audio_path)
return result['text']
except Exception as e:
logger.error(f"Помилка транскрипції: {e}")
return f"Помилка транскрипції: {str(e)}"
# Маппінг мов
LANGUAGE_MAP = {
'uk': 'ru', # Ukrainian -> Russian (closest in gTTS)
'zh-cn': 'zh-cn',
'hi': 'hi'
}
# Безпечний синтез мовлення
def safe_clone_and_synthesize(audio_path, source_language, target_language):
try:
# Перевірка вхідних даних
if not audio_path:
return None, "Помилка: Не завантажено аудіо", ""
# 1. Транскрипція аудіо
original_text = safe_transcribe_audio(audio_path)
logger.info(f"Транскрибований текст: {original_text}")
# 2. Нейронний переклад тексту
translated_text = neural_translate(original_text, target_language, source_language)
logger.info(f"Перекладений текст: {translated_text}")
# 3. Вибір методу синтезу
mapped_language = LANGUAGE_MAP.get(target_language, target_language)
# Спроба використати клонування голосу для підтримуваних мов
output_path = None
try:
logger.info("Attempting to use TTS for voice cloning")
tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts")
output_path = "output_cloned.wav"
tts.tts_to_file(
text=translated_text,
file_path=output_path,
speaker_wav=audio_path,
language=mapped_language
)
logger.info("Voice cloning successful")
except Exception as e:
logger.warning(f"Помилка клонування голосу: {e}. Використання gTTS.")
output_path = gtts_synthesize(translated_text, mapped_language)
logger.info("gTTS synthesis successful")
return output_path, original_text, translated_text
except Exception as e:
logger.error(f"Загальна помилка: {e}")
logger.error(traceback.format_exc())
return None, f"Помилка: {str(e)}", ""
# Інформація про можливі помилки
def show_error_info():
return """
# Важлива інформація!
Якщо ви отримали помилку, це може бути через:
1. Обмеження пам'яті в Hugging Face Spaces
2. Проблеми з моделлю TTS
Спробуйте використати менші аудіофайли або змінити налаштування.
"""
# Створення Gradio інтерфейсу
with gr.Blocks(title="VoiceClone Translator Pro") as demo:
gr.Markdown("# 🎙️ VoiceClone Translator Pro")
gr.Markdown(show_error_info())
with gr.Row():
input_audio = gr.Audio(label="Вхідне Аудіо", type="filepath")
source_language = gr.Dropdown(
label="Вхідна Мова",
choices=["en", "uk", "ru", "fr", "de", "es", "it", "pl", "hi", "zh-cn"],
value="en"
)
target_language = gr.Dropdown(
label="Цільова Мова",
choices=["en", "uk", "ru", "fr", "de", "es", "it", "pl", "zh-cn", "ja", "ko", "hi"],
value="en"
)
submit_btn = gr.Button("Клонувати та Перекласти")
with gr.Row():
output_audio = gr.Audio(label="Результат")
original_text = gr.Textbox(label="Оригінальний Текст")
translated_text = gr.Textbox(label="Перекладений Текст")
submit_btn.click(
safe_clone_and_synthesize,
inputs=[input_audio, source_language, target_language],
outputs=[output_audio, original_text, translated_text]
) |