Spaces:
Running
Running
Upload app.py
Browse files
app.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
import gc
|
| 2 |
import json
|
| 3 |
import re
|
|
@@ -59,7 +60,7 @@ DEFAULT_TTS_MODEL_CFG = [
|
|
| 59 |
|
| 60 |
# Конфигурация для F5-TTS_RUSSIAN (русский)
|
| 61 |
RUSSIAN_TTS_MODEL_CFG = [
|
| 62 |
-
"hf://Misha24-10/F5-TTS_RUSSIAN/model_240000_inference.safetensors",
|
| 63 |
"hf://Misha24-10/F5-TTS_RUSSIAN/vocab.txt",
|
| 64 |
json.dumps(dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)),
|
| 65 |
]
|
|
@@ -402,6 +403,12 @@ with gr.Blocks() as app_multistyle:
|
|
| 402 |
outputs=[speech_type_rows[i], speech_type_names[i], speech_type_audios[i], speech_type_ref_texts[i], speech_type_languages[i]],
|
| 403 |
)
|
| 404 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 405 |
def make_insert_speech_type_fn(index):
|
| 406 |
def insert_speech_type_fn(current_text, speech_type_name):
|
| 407 |
current_text = current_text or ""
|
|
@@ -483,6 +490,7 @@ with gr.Blocks() as app_multistyle:
|
|
| 483 |
)
|
| 484 |
|
| 485 |
def validate_speech_types(gen_text, regular_name, *args):
|
|
|
|
| 486 |
speech_types_available = set()
|
| 487 |
if regular_name:
|
| 488 |
speech_types_available.add(regular_name)
|
|
@@ -861,4 +869,65 @@ if __name__ == "__main__":
|
|
| 861 |
if not USING_SPACES:
|
| 862 |
main()
|
| 863 |
else:
|
| 864 |
-
app.queue().launch()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
```python
|
| 2 |
import gc
|
| 3 |
import json
|
| 4 |
import re
|
|
|
|
| 60 |
|
| 61 |
# Конфигурация для F5-TTS_RUSSIAN (русский)
|
| 62 |
RUSSIAN_TTS_MODEL_CFG = [
|
| 63 |
+
"hf://Misha24-10/F5-TTS_RUSSIAN/F5TTS_v1_Base/model_240000_inference.safetensors",
|
| 64 |
"hf://Misha24-10/F5-TTS_RUSSIAN/vocab.txt",
|
| 65 |
json.dumps(dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)),
|
| 66 |
]
|
|
|
|
| 403 |
outputs=[speech_type_rows[i], speech_type_names[i], speech_type_audios[i], speech_type_ref_texts[i], speech_type_languages[i]],
|
| 404 |
)
|
| 405 |
|
| 406 |
+
gen_text_input_multistyle = gr.Textbox(
|
| 407 |
+
label="Text to Generate",
|
| 408 |
+
lines=10,
|
| 409 |
+
placeholder="Enter the script with speaker names (or emotion types) at the start of each block, e.g.:\n\n{Regular} Привет, я хочу заказать пиццу.\n{Surprised} What, no pepperoni?\n{Sad} Я так хотел пиццу...\n{Angry} Ты что, шутишь?\n{Whisper} Ладно, я уйду.\n{Shouting} Почему так всегда?!",
|
| 410 |
+
)
|
| 411 |
+
|
| 412 |
def make_insert_speech_type_fn(index):
|
| 413 |
def insert_speech_type_fn(current_text, speech_type_name):
|
| 414 |
current_text = current_text or ""
|
|
|
|
| 490 |
)
|
| 491 |
|
| 492 |
def validate_speech_types(gen_text, regular_name, *args):
|
| 493 |
+
speech_type_names_list = args[:max_speech_types]
|
| 494 |
speech_types_available = set()
|
| 495 |
if regular_name:
|
| 496 |
speech_types_available.add(regular_name)
|
|
|
|
| 869 |
if not USING_SPACES:
|
| 870 |
main()
|
| 871 |
else:
|
| 872 |
+
app.queue().launch()
|
| 873 |
+
```
|
| 874 |
+
|
| 875 |
+
### Изменения
|
| 876 |
+
1. **Обновлён `RUSSIAN_TTS_MODEL_CFG`**:
|
| 877 |
+
- Путь к модели изменён на `"hf://Misha24-10/F5-TTS_RUSSIAN/F5TTS_v1_Base/model_240000_inference.safetensors"`, чтобы соответствовать расположению файла в папке `F5TTS_v1_Base`.
|
| 878 |
+
- Путь к `vocab.txt` остался `"hf://Misha24-10/F5-TTS_RUSSIAN/vocab.txt"`, так как вы подтвердили его наличие в корне.
|
| 879 |
+
- Конфигурация модели осталась без изменений, так как она соответствует документации.
|
| 880 |
+
|
| 881 |
+
2. **Исправлен `NameError`**:
|
| 882 |
+
- В блоке `app_multistyle` цикл для привязки кнопок `speech_type_insert_btns` перемещён после определения `gen_text_input_multistyle`, чтобы избежать ошибки `NameError`.
|
| 883 |
+
|
| 884 |
+
### Что делать дальше
|
| 885 |
+
1. **Замените `app.py`**:
|
| 886 |
+
- Сохраните код выше как `app.py`, заменив существующий файл в вашем проекте.
|
| 887 |
+
|
| 888 |
+
2. **Очистите кэш**:
|
| 889 |
+
- Удалите кэш Hugging Face, чтобы избежать проблем с ранее загруженными файлами:
|
| 890 |
+
```bash
|
| 891 |
+
rm -rf ~/.cache/huggingface/
|
| 892 |
+
```
|
| 893 |
+
|
| 894 |
+
3. **Запустите приложение**:
|
| 895 |
+
- Выполните:
|
| 896 |
+
```bash
|
| 897 |
+
python app.py
|
| 898 |
+
```
|
| 899 |
+
- Проверьте консоль. Ожидаемый вывод: `F5-TTS_RUSSIAN loaded successfully.`. Если появляется ошибка `404`, уточните, пожалуйста, точное расположение файла `model_240000_inference.safetensors` в репозитории (например, если он в другой подпапке).
|
| 900 |
+
|
| 901 |
+
4. **Протестируйте генерацию**:
|
| 902 |
+
- В интерфейсе выберите язык `ru` в поле `language_input` (вкладка "Basic-TTS") или `language_chat` (вкладка "Voice-Chat").
|
| 903 |
+
- Загрузите референсное аудио на русском языке (WAV или MP3, до 12 секунд).
|
| 904 |
+
- Введите текст с ударениями, например: `{Regular} Прив+ет, как дел+а?`.
|
| 905 |
+
- Нажмите "Synthesize" (или "Generate Multi-Style Speech" для мультистилевой генерации) и проверьте, генерируется ли русская речь.
|
| 906 |
+
|
| 907 |
+
### Если проблема сохраняется
|
| 908 |
+
Если модель всё ещё не загружается или не говорит по-русски:
|
| 909 |
+
1. **Проверьте консоль**: Если появляется ошибка `404`, проверьте точный путь к файлу `model_240000_inference.safetensors` на [Hugging Face](https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN/tree/main). Если он в другой папке, обновите путь в `RUSSIAN_TTS_MODEL_CFG`.
|
| 910 |
+
2. **Попробуйте другой чекпоинт**: Если `model_240000_inference.safetensors` не работает, попробуйте `model_240000.pt`:
|
| 911 |
+
```python
|
| 912 |
+
RUSSIAN_TTS_MODEL_CFG = [
|
| 913 |
+
"hf://Misha24-10/F5-TTS_RUSSIAN/F5TTS_v1_Base/model_240000.pt",
|
| 914 |
+
"hf://Misha24-10/F5-TTS_RUSSIAN/vocab.txt",
|
| 915 |
+
json.dumps(dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)),
|
| 916 |
+
]
|
| 917 |
+
```
|
| 918 |
+
3. **Проверьте язык**: Убедитесь, что в интерфейсе выбран `ru`. Для отладки добавьте в функцию `infer` перед `if language == "ru":`:
|
| 919 |
+
```python
|
| 920 |
+
print(f"Language selected: {language}, using model: {'F5-TTS_RUSSIAN' if language == 'ru' else model}")
|
| 921 |
+
```
|
| 922 |
+
Проверьте, что выводится в консоли.
|
| 923 |
+
4. **Проверьте референсное аудио**: Убедитесь, что аудио на русском языке.
|
| 924 |
+
|
| 925 |
+
### Дополнительно
|
| 926 |
+
- **Ударения**: Для лучшего качества русской речи добавляйте ударения в текст (например, `молок+о`). Если хотите автоматизировать этот процесс, могу предложить интегрировать библиотеку `ruaccent` для автоматической расстановки ударений. Напишите, если это нужно.
|
| 927 |
+
- **Логи**: Если ошибка сохраняется, предоставьте новый лог консоли, а также:
|
| 928 |
+
- Какой текст вы вводите.
|
| 929 |
+
- Какое референсное аудио используете (на русском или нет).
|
| 930 |
+
- Какой язык выбран в интерфейсе.
|
| 931 |
+
- На каком языке генерируется аудио.
|
| 932 |
+
|
| 933 |
+
Если всё сработает, дайте знать, чтобы я мог подтвердить, что проблема решена!
|