Преобразователь текста в речь на Arduino Uno

Система преобразования текста в речь (Text-to-speech system – TTS) преобразует обычный текст в человеческую речь. В настоящее время подобные системы находят широкое применение – в общественном транспорте, голосовых помощниках, смартфонах, навигационных меню автомобилей и т.д. Подобная система есть даже в известном редакторе Microsoft Word – в нем вы можете прослушать написанный текст.

В данной статье мы рассмотрим создание преобразователя текста в речь на основе платы Arduino Uno.

Внешний вид преобразователя текста в речь на основе платы Arduino Uno

Общие принципы создания системы преобразования текста в речь

Первым шагом в создании системы преобразования текста в речь является предварительная обработка, или нормализация. На этом шаге осуществляется преобразование символов, чисел и аббревиатур в слова, которые понимает машина (микроконтроллер). Например, в результате данной операции символ ‘?’ преобразуется в последовательность слов “question mark”.

На втором шаге в подобных системах осуществляется преобразование нормализованного текста в фонемные или фонетические интерпретации (представления). Фонемы представляют собой маленькие части разговорных слов, то есть это звуки, которые формируют предложения. Этот шаг достаточно важен – он нужен для того чтобы машина могла говорить слова так же, как и человек.

Заключительным шагом в подобных системах является синтез фонем в разговорный голос. Этот шаг можно осуществить различными способами, например, при помощи записи человеческого голоса для различных слов/фраз или с помощью генерации основных звуковых частот и объединения их в фонемы. Также может использоваться способ копирования разговорного механизма человека.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Громкоговоритель.
  3. Усилитель (можно использовать схему, приведенную в данной статье).
  4. Стабилизированный источник питания.
  5. Соединительные провода.

Схема проекта

В нашем проекте преобразования текста в речь на основе платы Arduino Uno мы использовали схему усилителя (чтобы получить чистый звук и снизить уровень шумов), приведенную на следующем рисунке. Усилитель построен на основе микросхемы LM386. Потенциометр 100 кОм в схеме усилителя служит для настройки качества звука.

Схема усилителя а основе микросхемы LM386

Но вы можете использовать любой свой похожий усилитель (если он у вас имеется).

Схема преобразователя текста в речь на основе платы Arduino Uno представлена на следующем рисунке.

Схема преобразователя текста в речь на основе платы Arduino Uno

В представленной схеме необходимо подать питающее напряжение на схему усилителя, а цифровой контакт 3 платы Arduino подключить к резистору 10 кОм. Землю Arduino необходимо подключить к общей земле схемы. Отрицательный контакт громкоговорителя подключается к земле (общему проводу) схемы, а его положительный контакт – к конденсатору 220 мкФ.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный текст программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Программа для нашего преобразователя текста в речь на основе Arduino будет достаточно простой поскольку мы будем использовать специальную библиотеку для этих целей. Эта библиотека называется Talkie и ее можно добавить в менеджер библиотек Arduino IDE. Чтобы сделать это, откройте пункт меню Sketch->Include Library->Manage Libraries.

Открытие менеджера библиотек в Arduino IDE

После выполнения этой команды у вас откроется менеджер библиотек. Введите в его строке поиска Talkie и потом нажмите кнопку установки библиотеки.

Поиск и установка библиотеки Talkie

Библиотека Talkie очень удобна для решения нашей задачи. Она содержит более 1000 слов и команд, а также несколько примеров, демонстрирующих ее работу.

Вы можете попробовать некоторые из команд, присутствующих в этой библиотеке. Для этого откройте Documents\Arduino\libraries\Talkie\src, после этого откройте заголовочные файлы, из которых вы можете взять необходимые вам команды предупреждений/уведомлений. Существуют и другие библиотеки для преобразования текста в речь: jscrane TTS library, google TTS library и т.д. Вы также можете попробовать и их если у вас возникнет такое желание.

Первым делом в программе подключим заголовочные файлы библиотек. Talkie.h используется для инициализации библиотеки и установки режима работы на вывод данных для цифрового контакта 3 платы Arduino. Vocab_US_Large.h используется для работы с используемыми нами предупреждениями/уведомлениями (alerts), а Vocab_Special.h используется для работы с используемыми нами паузами.

Затем определим объект ‘voice’ для использования команд работы со звуком.

Далее в функции void loop() первой командой будет voice.say(spPAUSE2) – с ее помощью реализуется небольшая пауза между звуковыми сообщениями. Следующие команды позволяют произвести с помощью громкоговорителя следующую последовательность слов: DANGER DANGER STORM IN THE NORTH.

После того как вы соберете схему, загрузите программу в плату Arduino и подадите питание на схему вы услышите передаваемую нами в программе фразу (предупреждение). Если качество звука не очень хорошее, отрегулируйте его с помощью потенциометра в схеме усилителя. Также убедитесь в том, что на плату Arduino подается питание, а ее земля подключена к общей земле схемы.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
1 029 просмотров


Комментарии

Преобразователь текста в речь на Arduino Uno — 4 комментария

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

    • Ну я точно ни у кого не крал, я все сам перевожу.
      На самоделкине статья похожая, но немного другая и она переведена с сайта instructables.com, а я оттуда не перевожу - просто с сайта instructables.com переводят очень многие, а я не хочу участвовать в этой "социалистической" гонке кто быстрее переведет и размещать то, что уже есть в сети на русском - в этом нет особого смысла, я считаю. Поэтому я перевожу статьи с других сайтов, менее раскрученных чем instructables.com (но от этого не менее качественных).
      То, что библиотека только для английского языка - я думал это понятно исходя из текста статьи, не стал отдельно акцентировать на этом внимание.

      • А где узнать, какие слова находятся и какие можно использовать в библиотеке talkie? Возможно ли как-то добавить слова в библиотеку?

        • Скачайте архив с этой библиотекой по адресу - https://www.arduino.cc/reference/en/libraries/talkie/. В этом архиве заходите в папку "src" и там увидите файлы с наборами доступных звуков: Vocab_AstroBlaster, Vocab_Soundbites и т.д. В них и содержатся все слова, которые может произносить библиотека. Чтобы добавить слова в библиотеку, нужно по аналогии с данными, содержащимися в этих файлах, записать массивы шестнадцатеричных чисел для своих новых слов. Но каким образом сформировать эти массивы, я не знаю

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

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