[ ]
Модератор форума: 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

Домашняя страница
 
flegontДата: Понедельник, 17.10.2022, 15:30 | Сообщение #31
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
7.30.411
7.30.411-x64
7.30.411-x64-Silero
Оф. сайт
 
BETERДата: Понедельник, 24.10.2022, 05:16 | Сообщение #32
Группа: Пользователи
Сообщений: 6
Статус: Offline
Такой вопрос: как получить итоговые аудиофайлы разделённые не по времени, а по главам. Желательно, что бы имена файла имели формат id ("Первые 20 символов из строки содержащей текст")

На выходе два файла с названиями: 1 (Глава 123) и 2 (Глава 124)
Имея файл формата epub где главы в отдельных файлах:
//переход на новую строку
//переход на новую строку
Глава 123
    Текст главы...
    Текст главы...
    Текст главы...

Глава 124
    Текст главы...
    Текст главы...
    Текст главы...
 
flegontДата: Понедельник, 24.10.2022, 10:24 | Сообщение #33
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Пока никак - скрипт Text to Speech.py сразу делит текст на абзацы, из которых делает маленькие аудиофайлы, а они уже объединяются в более крупные, по времени звучания.
Но, мысль очень интересная. Подумаю над этим, чтобы был режим деления текста изначально на главы, а потом озвучка отдельных глав.
 
tonio_kДата: Понедельник, 24.10.2022, 10:34 | Сообщение #34
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата flegont ()
Имея файл формата epub где главы в отдельных файлах:
что бы вы понимали, Демагог файлы epub не анализирует по тэгам. А удаляет все тэги и все что в них спрятано. Остаётся только текстовое тело самой книги. Так что открытый в окне Демагога книга epub это уже голый текстовый файл в формате [*. txt] на экране.
А вот из голого текста превратить в epub (даже с разбитием на главы), это Демагог может. Но опять же, в открытом окне Демагога будет голый текстовый файл, в том числе, если полученный epub будем открывать.

Цитата BETER ()
как получить итоговые аудиофайлы разделённые не по времени
Нужно предварительно вручную разбить текст книги на главы. Для этого в Демагоге есть встроенная функция Создать оглавление (на панели меню).
Есть готовый отдельный скрипт, который может автоматически это сделать, но я предпочитаю штатную функцию Демагога, т.к. в Демагоге это выглядит как диалог с предварительным показом ключевых строк, которые определились как признак начала главы. В этом окне диалога можно посмотреть и удалить на месте ошибочные строки. И сохранить главы как текстовые файлы.
После разбития текст на отдельные текстовые "главы" по схеме: один файл=одна глава. Осталось каждую главу озвучить как "отдельную книгу" указав время звучания 99999 минут. Вот так получаем (одна глава)=(один большой аудиофайл)

Цитата BETER ()
Первые 20 символов из строки содержащей текст

Вставить текст из книги (в нашем случае из теста главы) в название аудиофайла это можно сделать отдельным скриптом. Который будет из текстового файла брать первые n20 символов текста и переименовать аудиофайл вставляя в него n20 символов. Это простой скрипт, его легко написать и применить, если в папке есть аудиофайлы и равные им по количеству текстовые файлы.


Сообщение отредактировал tonio_k - Понедельник, 24.10.2022, 10:50
 
tonio_kДата: Понедельник, 24.10.2022, 14:16 | Сообщение #35
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата flegont ()
чтобы был режим деления текста изначально на главы
Можете попробовать мой скрипт взять за ориентир или за основу.
Прикрепления: -___.zip (1.7 Kb)
 
tonio_kДата: Понедельник, 24.10.2022, 15:59 | Сообщение #36
Группа: Пользователи
Сообщений: 139
Статус: Offline
Чуть доработал скрипт. Убрал не нужный диалог, сделал вывод файлов с такими же названиями, как в штатной функции Демагога: Закладки -> Создать оглавление
Прикрепления: 0156416.zip (1.8 Kb)
 
flegontДата: Вторник, 25.10.2022, 10:06 | Сообщение #37
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline

Цитата
tonio_k Чуть доработал скрипт

Да, спасибо, потестил. Это - работает. Хотя регулярка в скрипте не все типы названий глав ловит.
Постепенно прихожу к мысли, что в свое время в Демагоге в опции "Закладки - Создать оглавление" я перемудрил с регулярками для поиска названий глав. Слишком длинные и сложные получаются.

А ведь принцип-то простой:
1. Название главы - это одна строка в тексте, притом, не слишком длинная
2. Первое слово в этой строке: глава|раздел|параграф|... за которым следует число: арабское|римское|просто буквами
или число не более чем из 3 арабских цифр или 6 римских, за которыми следует точка и текст большими буквами
3. Ну, и еще какой-нибудь вариант для экзотических случаев

Это алгоритмизуется без всяких регулярок, и работать будет раз в 10 быстрее.
Такая вот тема для размышлений.
 
flegontДата: Вторник, 25.10.2022, 14:36 | Сообщение #38
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Продолжение, на тему регулярок, ищущих названия глав.
Упростил до двух основных форм. В Python это выглядит так:

import re
from profiles.mygui import *

p0 = r'(^\s*(часть|глава|параграф|part|chapter|paragraph)\s.*$)'
p1 = r'(^\s*\d{1,2}\.\s[A-ZА-ЯЁ\d«»"\(\)\!\?\x20\,\.\-…–—]+$)'


# пример 1

s = WText(1)
d = re.split(p1, s, 0, re.MULTILINE)


# ответ готов!
# список d содержит названия глав и их содержимое
# элемент 0 - текст до 1-й главы
# элемент 1 - заголовок 1-й главы
# элемент 2 - текст 1-й главы

# и т.д.

Теперь надо бы разобраться: как заранее определить, какого типа заголовки глав имеются в тексте, чтобы применять нужную регулярку:
глава какой-то текст в любом регистре
или
номерглавы. КАКОЙ-ТО ТЕКСТ В ВЕРХНЕМ РЕГИСТРЕ
 
tonio_kДата: Вторник, 25.10.2022, 15:01 | Сообщение #39
Группа: Пользователи
Сообщений: 139
Статус: Offline
Цитата flegont ()
какого типа заголовки глав имеются в тексте, чтобы применять нужную регулярку:
Применить первую регулярку и подсчитать количество замен
Применить вторую регулярку и подсчитать количество замен
Каких замен больше, ту и применить.
Что бы потом возмущаться, что автор в тексте применил оба варианта обозначения глав biggrin

Как вариант можно провести поверхностный сбор статистики:
У меня есть база большого количества текстовых файлов. Может сделать скрипт, который будет открывать файл, получать из него строки с информацией о главах и выводить:

название файла
Строки похожие на Главы по первому алгоритму
Строки похожие на Главы по второму алгоритму

Полученный текст уже проанализировать на ложные срабатывания или, возможно, пропуски. В любом случае, именм название файла, можно его открыть и проанализировать.


Сообщение отредактировал tonio_k - Вторник, 25.10.2022, 15:06
 
flegontДата: Вторник, 25.10.2022, 15:12 | Сообщение #40
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Цитата
tonio_k Каких замен больше, ту и применить.

Да, это работает. Получаем список d и проверяем len(d)  ok 

Кстати, обнаружил, что re.split не любит символ |
Поэтому правило p0 приходится разбивать на несколько:
p00 = r'(^\s*глава\s.*$)'
p01 = r'(^\s*часть\s.*$)'
p02 = r'(^\s*параграф\s.*$)'
и т.п.

Иначе re.split начинает делить и названия глав. Что-то вроде:
Глава первая, в которой герои знакомятся с волшебником
Глава первая
Глава
None
None
...
(текст 1-й главы)
umnik
 
flegontДата: Вторник, 25.10.2022, 18:27 | Сообщение #41
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
UPD:
Комбинируя питоновские фишки с идеей tonio_k о вставке символа-разделителя:

import re
from profiles.mygui import *

p0 = r'(^\s*(часть|глава|параграф|part|chapter|paragraph)\s.*$)'
p1 = r'(^\s*(\d{1,2}|[IVXLC]{1,8}\.\s[A-ZА-ЯЁ\d«»"\(\)\!\?\x20\,\.\-…–—]+$)'

s = WText(1)

s = re.sub(p0, r'•\1', s, 0, re.MULTILINE+re.IGNORECASE)  # глава ... название (без учета рег.)
s = re.sub(p1, r'•\1', s, 0, re.MULTILINE)  # НОМЕР. НАЗВАНИЕ (номер: араб. или рим.)

d = re.split(r'•', s, 0, re.MULTILINE)

8 строчек на деление текста на главы  smile
 
tonio_kДата: Среда, 26.10.2022, 00:37 | Сообщение #42
Группа: Пользователи
Сообщений: 139
Статус: Offline
Тут на 4пда задали вопрос о чтении текста голосом Silero с экрана. Т.к. это не sapi5, то принцип: 1 минута на словари, 10 минут прослушать, 1 минута на словари, 10 минут слушать для Silero не сработает, т.к. на само формирование аудиофайлов для ПК в комплектации «для мажоров» может уйти несколько минут.
Поэтому вероятное решение вопроса - распараллелить задачу

Для примера: в сборке "Демагог одной кнопкой" для ivona есть скрипт, который запускал 2 копии Демагога.
1 копия только отслеживала текущий озвучиваемый абзац (на самом деле мониторил папку в ожидании файла 0001-done.wav, как обнаружил, то удалял его и выделял следующий абзац).
2 копия с опрережением записывала абзацы в аудио. А скрипт Pwershell мониторил папку, пока не появится 5-ый аудифайл по порядку и как только его обнаружил, начинал озвучивать вслух аудио 0001.wav, как озвучил, переименовал файл 0001.wav в 0001-done.wav, тем самым давая команду 1 копии, что надо поменять выделеный абзац.
Для Silero 2 копия Демагога не требуется, т.к. питон и так параллельно работает. Тут вопрос в параллельном озвучивании создаваемых wav. У меня это в скрипте для pwershell было реализовано.
Он из себя представлял строки с 0001. wav до n абзацев в книги после предварительного прогона скриптом по разрезанию больших абзацев.
Тут нужно ещё добавить запоминание последнего места прерывания и автоматического продолжение с последнего места прерывания.
А сначала протестируйте у себя на вашем мощном ПК, есть ли вообще опережение скорости создания аудио перед длиной воспроизведения аудио плюс! время на работу словарей для каждого абзаца. Может шкурка выделки не стоит, и мощности не хватает для реализации такого алгоритма?


Сообщение отредактировал tonio_k - Среда, 26.10.2022, 00:39
 
BETERДата: Среда, 26.10.2022, 04:10 | Сообщение #43
Группа: Пользователи
Сообщений: 6
Статус: Offline
Цитата tonio_k ()
мощности не хватает для реализации такого алгоритма?
Такое ощущение, что сейчас обработка идёт на процессоре. По идее можно попробовать штатными средствами использовать ускорение gpu, ну или не штатными через cuda или vulcan
 
flegontДата: Среда, 26.10.2022, 09:38 | Сообщение #44
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
Открою маленькую и не страшную тайну  smile
Скрипт на питон для Demagog-x64-Silero, читающий голосами Silero с экрана - у меня есть.
Читает текст фрагментами <= 1000 символов, с выделением читаемого фрагмента и прокруткой текста - всё, как положено.
При этом никакие временные файлы wav не создаются, преобразование текста в звук идет напрямую.

На ноуте MSI Katana пауза перед чтением очередного фрагмента от 2 до 5 сек, с подключенным словарем орфоэпии.
На школьном ноуте Acer Travel Mate B1 соответственно от 10 до 25 сек.

Да, нынешняя сборка работает исключительно на процессоре. Чтобы задействовать видеокарту, надо переделывать сборку, с заменой  pytorch на вариант, работающий не с процессором, а с одной из версий cuda. Хрен его знает, какая версия  cuda соответствует. Да и у большинства пользователей нет компа с мощной видюхой.

Кстати, разработчики Silero обещали ускорить работу своих моделей еще в 3-5 раз. Вроде уже получается, но пока с потерей качества, потому, мол, и не выкладывают новые версии. Ждем, надеемся...
 
flegontДата: Пятница, 28.10.2022, 09:23 | Сообщение #45
V.I.P.
Группа: Модераторы
Сообщений: 141
Статус: Offline
1) Хотя чтение вслух с экрана голосами Silero имеет пока лишь теоретическое значение, но вот этот скрипт Text to Aloud, если кому интересно. Он использует данные из файла slr.@, который создается при выполнении основного скрипта озвучки Text to Speech.py.

С помощью Text to Speech.py можно просто менять настройки голосов, без создания аудио-файлов:
- ввести новые значения параметров
- нажать кнопку "Сохранить изменения"
- нажать "Esc" для выхода

После этого можно запускать чтение вслух с экрана: Text to Aloud.py

!! Работает на сборке Demagog-x64-Silero от 20.10.2022 - там во встроенный питон добавлена библиотека sounddevice для чтения аудио, сформированного не в wav-файле, а в памяти компьютера.

2) Убил вчера полдня на эксперименты с pytorch, ориентированным на работу с видеокартой. Разработчики торч ныне предлагают лишь 2 версии: для cuda11.3. и cuda11.6 - соответственно 3 Гб и 4.5 Гб места на жестком диске   shok
Опробовал обе.

Я то думал, что укажу model.device('cuda') и все заработает. Ага...
Из всего множества подготовленных текстовых фрагментов, конвертируется в wav только первый.
Получив на озвучку в цикле следующий фрагмент, функция model.save_wav зависает намертво.
Технология "развертки цикла" в последовательность вызовов model.save_wav, использованная ув. tonio_k в его сборке Demagog_for_models_silero - тоже не помогает. Точно так же, озвучивается лишь первый фрагмент и всё виснет.
Так же ведет себя и функция model.apply_tts - для получения аудио в переменную.

Вообще-то, разрабы Silero признавались, что выпуская публичные версии своих голосов, НЕ тестировали модели на видеокартах, только на cpu - уж очень торопились. Так что, может они где-то ошиблись. А может, я чего-то не понимаю

Во всяком случае, первый и единственный wav-файл при озвучке на видеокарте, появлялся в папке temp - мгновенно.
 
MyTTS (форум) » Программы, использующие синтез речи в Windows » Demagog » Demagog TTS
Поиск:

Общение