[ ]
Модератор форума: flegont  
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Demagog TTS
Demagog TTS
flegontДата: Четверг, 22.07.2021, 01:25 | Сообщение #1
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Начало темы здесь (ссылка на архивную копию форума mytts.info)

 (44,0 Mb) архивная копия начала текущей ветки с форума mytts.info - для офлайн просмотра и поиска по всем страницам


 Скачать Demagog.zip

Домашняя страница
 
BETERДата: Пятница, 28.10.2022, 15:31 | Сообщение #46
Группа: Пользователи
Сообщений: 6
Статус: Offline
Цитата flegont ()
Технология "развертки цикла" в последовательность вызовов model.save_wav,
Можно попробовать отправлять по фрагментам, пока не закончит - новый не отправлять. Если и так виснит, то можно после сохранения файла убивать процесс model.save_wav
 
flegontДата: Пятница, 28.10.2022, 19:25 | Сообщение #47
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Помог перенос 2 строчек внутрь цикла по фрагментам:
...
device = torch.device('cuda')

for i in range(m, n):
    ...
    model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")
    model.to(device)
    audio_paths = model.save_wav(ssml_text=a, speaker = speaker, sample_rate=rate, put_accent=put_accent, put_yo=put_yo)
    WaitUntilAccess(audio_paths, time_to_wait)
...


Т.е. при работе с cuda перед озвучкой очередного фрагмента надо заново инициализировать модель. Уж не знаю, почему. А это - довольно длительно и убивает весь выигрыш от использования видеокарты. Озвучка рассказа В. Журавлевой "Нахалка":

CPU: 1 мин 22 сек
CUDA: 1 мин 42 сек  shok

Ситуация в точности совпала с описанной на Хабре в одном из комментариев к статье о голосах Silero: Почему на видеокарте получается даже дольше?! Ответ: Ой, не знаю, честно говоря, мы на видеокартах публичные модели не тестировали...
Что ж...
Отрицательный результат - тоже результат (с)
 
flegontДата: Суббота, 29.10.2022, 22:25 | Сообщение #48
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Цитата
tonio_k: протестируйте у себя на вашем мощном ПК, есть ли вообще опережение скорости создания аудио перед длиной воспроизведения аудио плюс! время на работу словарей для каждого абзаца

Ноутбук MSI Katana 11th Gen Intel® Core™ i7-11800H @ 2.30GHz, RAM 16Gb
Windows 10 Home 64 bit
Текст "Нахалка.txt"
Словари: 01_numbers.rex; 09_Орфоэпия.dic
Выполнялся скрипт Text to Aloud.py с вставками для замера времени и подсчета средних значений (сек) на 1 фрагмент

# Python>TAtimetest.py

применение словарей 9.27338373093378
создание аудио 0.9043059576125372
чтение вслух 49.06066167922247

Замечание. Вместо функции  model.save_audio() в этом скрипте используется model.apply_tts() - созданное аудио не записывается в файл, а запоминается в переменной, которая потом читается вслух.
 
flegontДата: Воскресенье, 30.10.2022, 11:37 | Сообщение #49
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Тот же тест на слабом ноуте Acer Travel Mate B1 Intel ® Celeron ® N4120 CPU @ 1.10GHz, RAM 4Gb
Замер среднего времени: секунд / 1 фрагмент читаемого текста

# Python>TAtimetest.py

применение словарей 33.095999218168714
создание аудио 8.893268403552828
чтение вслух 50.99063183012463
 
flegontДата: Понедельник, 07.11.2022, 14:58 | Сообщение #50
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Попробовал погонять свою сборку Demagog-x64-Silero от 03.11.22 на английских текстах.

Выявилась интересная подробность, на русскоязычных текстах такого не наблюдалось.
Если озвучиваемый фрагмент текста, вместе с добавленными в него тегами  ssml, был заведомо меньше 1000 символов, то всё равно временами возникала ошибка. Всегда одного вида, например:

Text may be too long. Tensor a 5016 is large then tensor b 5000 ...

Тензор с именем "a" всегда получался чуть больше 5000, а тензор "b" - ровно 5000. Как будто модели не хватало зарезервированного места для неких промежуточных данных. Я вставил в скрипт команду для печати каждого озвучиваемого фрагмента в окне Статистики, и смотрел: есть ли особенности во фрагментах, приводящих к ошибке?

1) В таких фрагментах было много сокращений, содержащих точки. Тут как бы всё понятно - лишние точки в середине предложения.
Английские / американские тексты вообще пестрят подобными сокращениями: Mr. Mrs. Ms. Prof. M.D. Ph.D. Sc.D. и т.д. Что такое S.C. в первом абзаце рассказа O.Henry "Jeff Peters as a Personal Magnet"? Это штат Южная Каролина - кто бы мог подумать?  

После раскрытия всех сокращений в тексте с помощью соответствующего словарика, рассказ О.Генри озвучился успешно. Настала пора попробовать на целой книжке, уже другого автора. Сперва все шло хорошо, потом... блымс! см. выше. Что ж такого на этот раз?!

2) Сбойный фрагмент на экране выглядел странно - обилие кавычек " будто таракан наследил. Вот оно что! Прямая речь в английском выделяется на письме кавычками. Весь фрагмент представлял из себя оживленный диалог главных героев. Тогда я применил ко всей книжке dic-словарик из одного правила: *"*= и запустил озвучку заново. Вот теперь всё прошло без запинки.

Donald Westlake "The Hot Rock". 8,62 авторских листов
Время озвучки: 30 мин. 40 сек.

Вывод: для моделей Silero в тексте желательно оставлять только Cyr / Lat символы и существенные знаки препинания: . ! ? , ; : - – влияющие на произношение. При этом знаки . ! ? уместны лишь в конце предложения. Кавычки, скобки и прочий мусор следует безжалостно удалять.
 
dlr56686681Дата: Четверг, 17.11.2022, 21:38 | Сообщение #51
Группа: Пользователи
Сообщений: 2
Статус: Offline
Цитата flegont554Попробовал погонять свою сборку Demagog-x64-Silero от 03.11.22 на английских текстахПопробовал часик послушать и так и не смог привыкнуть. До этого слушал Edge TTS Michele
 
flegontДата: Пятница, 18.11.2022, 10:21 | Сообщение #52
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline

Цитата
так и не смог привыкнуть

Ну, дикторы в публичных моделях Silero TTS - уж какие есть, английских аж 118 штук  Так понимаю, что нанимать профессиональных чтецов для обучения моделей, ребятам из Silero - покамест не по карману.

А привычка, да - великое дело, тут ничего не скажешь.
 
Pin240Дата: Вторник, 22.11.2022, 21:40 | Сообщение #53
Группа: Пользователи
Сообщений: 104
Статус: Offline
Цитата flegont ()
Вывод: для моделей Silero в тексте желательно оставлять только Cyr / Lat символы и существенные знаки препинания: . ! ? , ; : - – влияющие на произношение. При этом знаки . ! ? уместны лишь в конце предложения. Кавычки, скобки и прочий мусор следует безжалостно удалять.

Я когда свою обертку делал Сразу все лишние символы в топку отправил. Были моменты когда были тексты без  знаков препинания, с переводом строк- как итог получал слишком много символов на входе но это тоже уже подправил
 
flegontДата: Среда, 23.11.2022, 11:43 | Сообщение #54
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
# Получить информацию об алфавите модели

import torch

local_file = 'model.pt'  # модель Silero для некоторого языка

model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")

print(model.symbols)

Результаты, для Russian и English:

_~|!+,-.:;?абвгдежзийклмнопрстуфхцчшщъыьэюяё–…

_~| !"',-.:;?abcdefghijklmnopqrstuvwxyz


Всё, что не входит в этот перечень - надо удалять.

А для английского оказалось, что и разрешенный символ " надо убирать.
Прямая речь в английском закавычивается, и при том может состоять из нескольких предложений, типа:
"Sentence one. Sentence two. Sentence three. Sentence four."
Вот на таких вывертах и возникает ошибка Perhaps text too long, хотя он <1000 символов, включая теги ssml.
А некоторые английские авторы помечают прямую речь знаком " только в начале, типа:
"Oh, my God! I say

Дескать, и так всё понятно  biggrin
А как на это отреагирует модель...  surprised
Так что двойную кавычку - долой!
 
tonio_kДата: Среда, 23.11.2022, 16:50 | Сообщение #55
Группа: Пользователи
Сообщений: 139
Статус: Offline
Можно в скрипт добавить (через регулярные выражения)
Код
[^_~|!+,-.:;?а-яё–…]+

проверку текста на недопустимые символы на этапе, когда уже все словари отработали. С выводом сообщения:
В тексте найдены недопустимые символы:
список символов
которые могут привести к ошибке записи в аудио. Очистить текст от символов? Да/Нет. Если нет, то прервать записи и пусть эти символы в log.txt сохраняться и откроются в окне 0-статистика что бы их изучить можно было.
 
flegontДата: Среда, 23.11.2022, 17:04 | Сообщение #56
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Согласен, такая опция будет полезна. Подумаю над реализацией.
 
tonio_kДата: Среда, 23.11.2022, 17:15 | Сообщение #57
Группа: Пользователи
Сообщений: 139
Статус: Offline
Дополнение.
Лучше не символы выводить, а символы в составе слова (если он не отдельно стоящий) для удобного поиска. Примерно в таком виде:
Сло́во [о́]
Де́лô [е́ô]
 
flegontДата: Среда, 23.11.2022, 22:08 | Сообщение #58
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
"Правка - Найти / Заменить - Шаблон REX - Подсчитать"

# Подсчет совпадений в "Efremov_Tais-Afinskaya.MFWeIg.281283.fb2"

[^_~|!+,-.:;?а-яё–…\s]+ - 1039

# Подсчет совпадений в "Pereslegin_S._Vtoraya_Mirovaya_Voyina_M.fb2"

[^_~|!+,-.:;?а-яё–…\s]+ - 8670

В книжке средних размеров недопустимых символов > 1000, а в толстой книжке > 8000
Выдавать их список на просмотр - нерационально, избыточная информация.
Проще одним махом удалить все недопустимые и сообщить количество удаленных.

P.S. В список разрешенных символов надо включать пробел. В английской модели пробел стоит на 4 месте в model.symbols, а в русской - в конце, и его не видно при print(model.symbols)
 
tonio_kДата: Четверг, 24.11.2022, 07:36 | Сообщение #59
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата flegont ()
В книжке средних размеров недопустимых символов > 1000, а в толстой книжке > 8000
Это после применения словарей?

Тут надо уточнить:
1) символы просто недопустимые, или реально приводят к ошибке записи в аудио?
2) если приводят к ошибке, то лучше все же предупредить, чем крах получить.
3) принудительно удалить "ВСЕ недопустимые символы", мне кажется, это должен быть контролируемый процес. Удаление символов внутри слова ломает слово. Значит надо это слово в словари пользователю вносить.
Если делать проверку на символы ПЕРЕД словарями, то она может быть не эффективна, т.к. замена этого символа может оказаться в пользовательском
словаре.


Сообщение отредактировал tonio_k - Четверг, 24.11.2022, 07:50
 
flegontДата: Четверг, 24.11.2022, 09:15 | Сообщение #60
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Пока я знаю только 2 символа, которые у меня приводили к ошибке записи аудио.
1. "  - только для английских голосов
2. символ с кодом 2  - образовался в большом количестве после copy/paste из pdf-файла, открытого в браузере, в окно Демагога. На экране ничем не отличался от пробела и разрывал слова там, где в pdf были переносы слов.

Оба символа были удалены через Найти / Заменить - Заменить все.

В общем, да, я согласен: процесс должен быть контролируемым, ведь символ 2 я нашел чисто случайно, а так бы неизвестно, сколько времени возился бы. Но пользователя надо предупредить, что выполняется экстраординарная проверка, чтоб был готов к обилию инфы в окне Статистики. Т.о. эта проверка должна быть не автоматической, а по требованию пользователя. Так сказать, тотальный обыск текста  smile 

P.S. Хотелось бы знать, почему модели в основном сами игнорируют символы вне своего алфавита, типа скобок разного вида, но вдруг сбиваются на служебных символах, типа #2, в то время, как служебные #13#10 (возврат каретки, перевод строки) воспринимают нормально.
 
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Demagog TTS
Поиск:

Общение