Как озвучить текст python
Перейти к содержимому

Как озвучить текст python

# Синтез речи

Познакомимся, как использовать Python для преобразования текста в речь с использованием кроссплатформенной библиотеки pyttsx3 . Этот пакет работает в Windows, Mac и Linux. Он использует родные драйверы речи, когда они доступны, и работает в оффлайн режиме.

Использует разные системы синтеза речи в зависимости от текущей ОС:

  • в Windows — SAPI5,
  • в Mac OS X — nsss,
  • в Linux и на других платформах — eSpeak.

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

  • можно посчитать, сколько слов сказано, и обрезать его,
  • можно проверить каждое слово и отрезать его, если есть неуместные слова.

Всегда обращайтесь к официальной документации для получения наиболее точной, полной и актуальной информации https://pyttsx3.readthedocs.io/en/latest/

# Установка пакетов в Windows

Используйте pip для установки пакета. В Windows, вам понадобится дополнительный пакет pypiwin32 , который понадобится для доступа к собственному речевому API Windows.

# Преобразование текста в речь

Для первой программой озвучивания текста используем код:

В примере программы даны две фразы на английском и на русском языке. Существует голосовой набор по умолчанию, поэтому вам не нужно выбирать голос. В зависимости от версии windows будет озвучена соответствующая фраза. Например для английской версии windows услышим: "I can speak!"

# Доступные синтезаторы по умолчанию

Доступные голоса будут зависеть от версии установленной систем. Вы можете получить список доступных голосов на вашем компьютере. Обратите внимание, что голоса, имеющиеся у вас на компьютере, могут отличаться от чьей-либо машины.

У каждого голоса есть несколько параметров, с которыми можно работать:

  • id (идентификатор в операционной системе),
  • name (имя),
  • languages (поддерживаемые языки),
  • gender (пол),
  • age (возраст).

У активного движка есть стандартный параметр ‘voices’, где содержится список всех доступных этому движку голосов. Получить список доступных голосов можно так:

Результат будет примерно таким:

Как видите, в Windows для большинства установленных голосов MS SAPI заполнены только «Имя» и ID.

# Установка дополнительных голосов в Windows

При желании можно установить дополнительные языковые пакеты согласно инструкции https://support.microsoft.com/en-us/help/14236/language-packs#lptabs=win10

Для этого выполните указанные ниже действия.

Нажмите кнопку Пуск , затем выберите Параметры > Время и язык > Язык.

В разделе Предпочитаемые языки выберите Добавить язык.

tts_language

В разделе Выберите язык для установки выберите или введите название языка, который требуется загрузить и установить, а затем нажмите Далее.

В разделе Установка языковых компонентов выберите компоненты, которые вы хотите использовать на языке.

tts_language_install

ВНИМАНИЕ: отключите первый пакет: "Install language pack and set as my Windows display language""Установите языковой пакет и установите мой язык отображения Windows"

tts_language_install_uncheck

Иначе переустановиться язык отображения операционной системы.

Нажмите Установить.

После установки нового языкового пакета перезагрузка не требуется. Запустив код проверки установленных языков. Новый язык должен отобразиться в списке.

Не все языковые пакеты поддерживают синтез речи. Для этого опция Speech должны быть в описании установки.

# Выбор голоса

Установить голос можно методом setProperty() . Например, используя голосовые идентификаторы, найденные ранее, вы можете настроить голос. В примере показано, как настроить один голос, чтобы сказать что-то, а затем использовать другой голос из другого языка, чтобы сказать что-то другое.

В Windows идентификатором служит адрес записи в системном реестре:

# Как озвучить системное время в Windows

Пример консольного приложения которое будет называть неточное время может быть реализованно следующим кодом:

Привер риложения которое каждую минуту проговаривает текущее время по системным часам. Точнее, оно сообщает время при каждой смене минуты. Например, если вы запустите скрипт в 14:59:59, программа заговорит через секунду.

Программа будет отслеживать и называть время, пока вы не остановите ее сочетанием клавиш Ctrl+C в Windows.

Посмотрите на алгоритм: чтобы уловить смену минуты, следим за значением секунд и ждем, когда оно будет равно нулю. После этого объявляем время и, чтобы поберечь ресурсы производительности, отправляем программу спать на 55 секунд. После этого она снова начнет проверять текущее время и ждать нулевой секунды.

Для дальнейшего изучения библиотеки pyttsx3 вы можете заглянуть в англоязычную документацию, в том числе справку по классу и примеры.

# Упражнения tkinter

  1. Напишите программу часы, которая показывает текущее время и имеет кнорку, при нажатии на которую можно ушлышать текуще время.
  2. Внесите измеения с программу что бы при произненсении времени программа корректно склоняла слова: "часы" и "минуты".
  3. Добавьте с помощью радиокнопки выбор языка озвучки часов.

# Озвучиваем текст из файла

Не будем довольствоваться текстами в коде программы — пора научиться брать их извне. Тем более, это очень просто. В папке, где хранится только что рассмотренный нами скрипт, создайте файл test.txt с текстом на русском языке и в кодировке UTF-8. Теперь добавьте в конец кода такой блок:

Открываем файл на чтение, передаем содержимое в переменную data, затем воспроизводим голосом все, что в ней оказалось, и закрываем файл.

# Упражнения tkinter

  1. Напишите программу текстовым полем и кнопкой которая будет озвучивать написанное.
  2. Добавьте меню выбора голоса с возможностью управлять такими параметрами, как высота голоса, громкость и скорость речи.

# Модуль Google TTS — голоса из интернета

Google предлагает онлайн-озвучку текста с записью результата в mp3-файл. Это не для каждой задачи:

  • постоянно нужен быстрый интернет;
  • нельзя воспроизвести аудио средствами самого gtts;
  • скорость обработки текста ниже, чем у офлайн-синтезаторов.

Что касается голосов, английский и французский звучат очень реалистично. Русский голос Гугла — девушка, которая немного картавит и вдобавок произносит «ц» как «ч». По этой причине ей лучше не доверять чтение аудиокниг, имен и топонимов.

Еще один нюанс. Когда будете экспериментировать с кодом, не называйте файл «gtts.py» — он не будет работать! Выберите любое другое имя, например use_gtts.py.

Для работы необходимо установить пакет:

Простейший код, который сохраняет текст на русском в аудиофайл:

После запуска этого кода в директории, где лежит скрипт, появится запись. Для воспроизведения в питоне придется использовать pygame или pyglet.

Speech AI с Python & Google API

image

Совсем недавно пришла в голову идея сделать «говорилку» на русском языке. В голове была простенькая схема наподобие:

1) Распознать речь с микрофона
2) Придумать более — менее разумный ответ.
В этом пункте можно сделать много интересного.
Например реализовать управление чем — нибудь физическим и не очень.
3) Преобразовать этот самый ответ в речь и воспроизвести.

Самое интересное, что для всех этих пунктов нашлись библиотеки под Python, чем я и воспользовался.

В итоге получилась связка, практически не зависящая от выбранного в качестве разговорного языка.

Распознавание речи

SpeechRecognition

Эта библиотека представляет из себя обвертку над многими популярными сервисами / библиотеками распознавания речи.
Т.к. из всех представленных в списке библиотеки сервисов первым заработал Google Speech Recognition, им я и воспользовался в дальнейшем.

Обработка речи

ChatterBot

Библиотека использует методы машинного обучения. Обучение происходит на наборах данных в формате диалогов.

Процесс обучения в библиотеке chatterbot

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

Для английского языка там есть хороший набор обучающих классов, один из которых берет диалоги из Ubuntu Dialog Corpus, а другой из Twitter’a.

К сожалению, для русского языка я не нашел альтернатив Ubuntu Dialog Corpus (такого же объема). Хотя тот же TwitterTrainer должен работать.

В порядке эксперимента я попробовал использовать при обучении диалоги из первого тома Воины и Мира.

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

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

Еще библиотека chatterbot предоставляет набор «Логических модулей» (LogicAdapter). При помощи которых можно например фильтровать ответ, научить бота считать или говорить текущее время.

Библиотека довольно гибкая, позволяет писать свои классы для обучения и логические модули.

Синтезирование и воспроизведение речи

Google Text to Speech

Эта библиотека умеет преобразовывать строку в mp3 файл с речью. Т.к. за этой библиотекой стоит Google, то на выбор имеется много языков, включая русский.

Создание аудиокниг с помощью Python

Как вы, возможно, уже знаете, Python – замечательный язык программирования, потому что он позволяет нам делать практически все! Это также означает, что мы можем создавать собственное программное обеспечение. В этом уроке мы узнаем, как синтезировать речь, научим Python читать PDF-файлы и даже переведем и озвучим их!

Итак, Python должен прочитать нам PDF-файл и перевести его. Сначала мы попытаемся создать аудиокнигу на английском языке. Таким образом, первое, что мы должны сделать, – это извлечь текст из PDF. Для этого нам понадобится модуль tika. Как обычно, чтобы установить tika, нужно поколдовать с pip.

Tika — это модуль, используемый для обнаружения и извлечения контента. После установки нужно импортировать объект parser .

Далее нам понадобится метод from_file() , принимающий два аргумента. Первый аргумент принимает имя PDF-файла, второй (дополнительный) – тип искомых данных. Если не указать второй аргумент, будет произведён поиск всех типов данных: от метаданных до самого контента. Здесь meta вернёт метаданные, text – текст, а параметр xmlContent – XML данные.

Теперь, получив все данные, мы должны извлечь текст. Это можно сделать, выбрав content в нашем raw :

Проблема модуля Tika заключается в том, что при слишком большом количестве страниц всё может сломаться. Поэтому мы воспользуемся другим методом. Если PDF-файл довольно короткий, определённо стоит воспользоваться Tika. Однако, вы также можете использовать модуль PyPDF2.

Первым делом откроем наш документ и прочитаем его, используя метод open() и класс PdfFileReader() . Метод open() принимает два аргумента: имя файла и режим чтения. Здесь rb означает “чтение бинарного файла” (“read binary”). Затем класс PdfFileReader принимает pdf_document .

Далее мы определяем количество страниц методом numPages . Нам это понадобится для цикла for , который будет итерироваться от страницы 1 до последней.

Затем мы начинаем цикл for для счета страниц.

Теперь нам нужно получить одну страницу с помощью getPage() и извлечь из неё текст методом extractText() .

Вызовем init() , чтобы инициализировать модуль.

Мы можем настроить голос, громкость и скорость при помощи engine.getProperty() . Метод setProperty() принимает два аргумента: свойство, которое необходимо изменить, и его новое значение. В нашем случае установлен женский голос ( voices[1].id ) с максимальной громкостью (1) и темпом 128.

Чтобы синтезировать речь и прочитать текст вслух, воспользуемся методом engine.say() .

Весь код будет выглядеть как-то так:

В данном примере у нас был английский текст, озвученный на английском. Теперь же мы попробуем перевести текст на другой язык и прослушать перевод. В этом случае первая часть кода остаётся неизменной – это всё, что касается работы с pdf. Но в начале цикла for мы кое-что изменим: добавим перевод и произведём чтение на нужном нам языке.

Первым делом установим googletrans.

Теперь мы можем приступить к переводу текста.

Далее вызываем Translator() .

Мы воспользуемся методом translate() . В его синтаксисе первый аргумент принимает текст на перевод, а второй – язык, на который мы хотим перевести. В данном случае текст переводится на французский ( ‘fr’ ).

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

Таким образом мы переведем и сохраним результат в переменной translated_2 . Теперь нам нужен модуль, который будет переводить и сохранять озвученный текст в mp3. Тут нам пригодятся gTTS и PlaySound:

У класса gtts.gTTS() есть несколько аргументов. Однако мы будем использовать только два: первый аргумент – это текст, который нужно прочитать, а второй – язык, на котором будет прочитан текст. Мы будем читать текст на французском языке ( fr ).

Причина, по которой мы используем здесь gTTS вместо pyttsx3, заключается в более естественном звучании: когда текст читается на французском языке с помощью gTTS, это будет звучать так, как будто текст читает француз, а не носитель английского языка.

Далее мы сохраним озвученный текст в формате mp3. Назовем его text.mp3:

Чтобы проиграть сохранённый mp3, используем playsound() :

Получится примерно следующий код:

python books logo

Английский для программистов

Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *