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


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

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

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

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

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

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

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

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

  1. Плата Arduino Uno (купить на AliExpress) (Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158).
  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 подается питание, а ее земля подключена к общей земле схемы.

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

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

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

Комментарии

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

  1. Здравствуйте, понравился проект, довольно интересный, хотелось бы попробовать сделать. Читал комментарии люди пишут про то чтобы добавить дисплей, кнопки. Но как по мне даже с такими доработками схема довольно маленькая получается и немного скучноватая. Может есть у кого какие-нибудь идеи чтобы добавить побольше какой-нибудь периферии? Мне в голову пришел еще Bluetooth модуль, чтобы скетчи можно было закачивать без посредственного включения Arduino в пк. Буду рад почитать ваши варианты что еще добавить (без подключения микрофона идеи хотелось бы).

    • Добрый вечер. Ну можете еще датчик температуры добавить и в зависимости от его показаний издавать соответствующие звуки. )) Можете еще добавить загрузку данных/логов проекта в какое-нибудь облачный сервис в сети, например, ThingSpeak или Google Firebase. Кстати, на нашем сайте есть статья про беспроводное программирование платы Arduino Uno по Bluetooth.

      • Подскажите. Нужно чтобы озвучивал реальное время. Допустим я к uno подключу модуль реального времени, или GPS модуль. Есть вариант, чтобы от каждые пол часа проговаривал, "сегодня такая дата, такое время" Сложно реализовать?

        • Не очень сложно, но программа будет достаточно объемная. Для каждой даты и каждого времени, которое хотите озвучивать, нужно будет завести свой собственный звук и будет куча условий в программе. Я бы такой проект лучше через какой-нибудь веб-сервис делал, вы бы передавали ему время, а он бы уже делал все остальное.
          Также могу порекомендовать на нашем сайте нужный вам функционал на основе платы Raspberry Pi.

  2. Помогите пожалуйста, собрал схему данную сначала для теста в Proteus. Использую тот код что здесь представлен, однако на динамике слышен только что-то типо треска, пробовал другие примеры из данной библиотеки, но всё по прежнему типо треска. Подскажите в чём может быть дело?

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

      • Обычной топовый звук через tone() транслирует нормально. Динамик рабочий но вот текст что в коде не озвучивает, библиотека тоже обновлена

        • Программа настолько проста, что я даже не знаю где тут может быть ошибка. Может все таки динамик у вас некоторые частоты не воспроизводит, поэтому и слышен и треск когда вы пытаетесь воспроизводить с его помощью звуки голоса? Все таки частоты тоновых звуков отличаются от частот обычного голоса. Вы пробовали через динамик воспроизводить речь или музыку?

  3. Подскажите пожалуйста, для данного проекта если сделать питание к примеру от батарейки он будет также работать? Просто появилось идея сделать еще пару кнопок с другими текстовыми данными. И можно ли так чтобы здесь по кнопкам выбирался отдельный текст для озвучки?

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

  4. А подскажите пожалуйста, что еще можно сюда добавить чтобы проект стал интересней. Не супер сложное и замудренное. Может настройки еще какие.

    • Ну можно добавить экран какой-нибудь чтобы на него информацию выводить о воспроизводимом звуке, а выбор воспроизводимого звука можно сделать с помощью любого устройства ввода: обычные кнопки, клавиатура 4х4, по сигналам с какого-нибудь датчика и т.д.

  5. какой смысл в "говорящем" устройстве, если оно говорит на тарабарском языке?

    • Ну что можно поделать с тем что подобную библиотеку для русского языка ещё никто не сделал. Можете подобный вопрос задать куда нибудь повыше и поднять тему насчёт того, что в нашей стране IT технологии не развиваются должным образом

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

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

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

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

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

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