В первой части нашего туториала мы рассмотрели основные системы распознавания речи для Linux. Сегодня попробуем применить их на практике. В эксперименте участвовали: система распознавания речи CMU Sphinx версии 4, ноутбук Dell Inspiron с ALT Linux Кентавр 7.0.5 и микрофон Shure.

Сайт проекта CMU Sphinx — отсюда стоит начинать работу
Сайт проекта CMU Sphinx — отсюда стоит начинать работу
 

Начало

Меня очень вдохновило одно видео о создании умного дома, где управление осуществлялось с помощью голосовых команд. В голове сразу появились идеи: установка будильника голосовой командой непосредственно на телефон, управление торрент-клиентом, прогноз погоды голосом, последние новости, управление Smart TV голосом и т. д. и т. п. Реальность оказалась куда прозаичнее и суровее.

INFO


Все действия возможны только в консоли! Пока нет достаточно удобного GUI для настройки CMU Sphinx.

Сразу о главном: современное состояние систем распознавания речи для Linux не позволяет в данный момент полноценно работать с компонентами умного дома. Особенно все плохо с русским языком. Но кое-что все же удалось сделать.

Начать следует, несомненно, с самого главного — установки и настройки системы распознавания речи. Я выбрал CMU Sphinx, поскольку это самый «опенсорсный тру-вариант» из всех имеющихся на данный момент. К сожалению, в Рунете крайне мало вменяемой документации по CMU Sphinx, разве что несколько тем на русском форуме VoxForge. Англоязычная же документация, наоборот, достаточно подробно и детально описывает процесс установки и настройки.

Установим CMU Sphinx. Напомню, что она состоит из нескольких компонентов:

  • Pocketsphinx — библиотека распознавания, написанная на си;
  • Sphinxtrain — инструменты для работы с акустическими моделями;
  • Sphinxbase — библиотека для работы с двумя первыми компонентами;
  • Sphinx4 — собственно сама система распознавания речи, написанная на Java.

Определим также, что такое «акустическая модель» и «языковая модель». Акустическая модель позволяет оценить распознавание речевого сегмента с точки зрения схожести на звуковом уровне. Для каждого звука изначально строится сложная статистическая модель, которая описывает произнесение этого звука в речи. Языковая же модель позволяет определить наиболее вероятные словесные последовательности. Сложность построения языковой модели во многом зависит от конкретного языка.

Итак, скачиваем CMU Sphinx с официального сайта. В репозиториях большинства дистрибутивов Linux есть лишь безнадежно устаревшая ветка Sphinx3. Поэтому будем собирать из исходников (проверь репозитории своего дистрибутива: в последних версиях Fedora и Ubuntu могут быть актуальные версии). При необходимости вместо Pocketsphinx, написанного на cи, ты можешь использовать Sphinx4, написанный на Java, подробности тут.

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

# ./configure make
# checkinstall

И не забудь после установки выполнить:

# ldconfig

Иногда возникает ошибка Failed to open audio device(/dev/dsp): No such file or directory. Это значит, что поддержка OSS в ядре не включена. Необходимо включить ее — смотри FAQ на сайте CMU Sphinx.

Все получится, но не с первого раза...
Все получится, но не с первого раза…
 

Тестируем Sphinx

По умолчанию Sphinx предлагает нам проверить работу на базовом примере, а именно распознать фразу «go forward ten meters». Воспользуемся утилитой пакетного распознавания pocketsphinx_batch. В составе Sphinx также есть инструмент распознавания речи с микрофона pocketsphinx_continuous (синтаксис ее схож с pocketsphinx_batch). Для удобства работы лучше всего использовать отдельную директорию. Синтаксис команды таков:

# pocketsphinx_batch -argfile argfile 2>./errors

argfile — это имя файла в текущей директории, содержащего все аргументы. Также мы используем стандартную утилиту stderr для удобства перенаправления вывода. Вот содержимое нашего файла argfile:

-hmm /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k
-lm /usr/local/share/pocketsphinx/model/lm/en/turtle.DMP
-dict /usr/local/share/pocketsphinx/model/lm/en/turtle.dic
-cepdir /home/saint/sphinx
-ctl ctlfile
-cepext .raw
-adcin true
-hyp outname

Значение строк файла следующее:

  • -hmm — путь к директории, содержащей файлы акустической модели (шаблоны отдельных звуков);
  • -lm — путь к файлу триграммной языковой модели. Можешь почитать про это;
  • -dict — путь к файлу словаря произношения;
  • -cepdir — путь к каталогу со звуковыми файлами;
  • -ctl — файл с именами обрабатываемых файлов. Файл goforward.raw мы возьмем из комплекта исходников Pocketsphinx;
  • -cepext — расширение обрабатываемых файлов;
  • -adcin — указатель принадлежности обрабатываемого файла к raw;
  • -hyp — имя файла, в который будет выводиться распознанный текст.

WARNING


Если ты вносишь -cepdir в файл аргументов, то сокращенный путь ~/sphinx обрабатывается неправильно: приходится писать полный путь. Если ты будешь прописывать аргумент после команды, то можешь использовать сокращенный путь!

Аргументы с путями к файлам моделей необходимо указывать обязательно. Помни, что многие параметры заданы по умолчанию (смотри man stderr (1)). Поэтому для работы с файлом *.raw необходимо принудительно указать расширение, иначе будет использован параметр по умолчанию — расширение mfc, а таких файлов у нас в базовом примере, естественно, нет — будут возникать ошибки.

В итоге исполнения у нас в файле outname будет следующее содержимое:

go forward ten meters (goforward -26532)

Параллельно можешь глянуть, откомпилировать и запустить в директории с файлом goforward.raw аналогичную программу, написанную на си разработчиками CMU Sphinx. Вот инструкция. Я же решил не мудрствовать лукаво и воспользовался для записи консольной утилитой Sox (есть практически во всех дистрибутивах). Записывать звук будем следующим образом (предварительно изучив man):

$ rec -r 16k -e signed-integer -b 16 -c 1 filename.wav

Прерывание записи по <Ctrl + C&qt;. У меня Sox при этом ругался на невозможность использования частоты дискретизации:

Can’t set sample rate 16000; using 48000.

На самом деле это не так — все в порядке с частотой дискретизации.

Обучаем CMU Sphinx
Обучаем CMU Sphinx
 

Адаптация звуковой модели

Адаптация звуковой модели — это попытка улучшить распознавание для конкретного голоса, произношения, акцента или окружающей среды. Создаем в отдельной директории файлы arctic20.fileids и arctic20.transcription. Скачать пример можно отсюда. Далее необходимо надиктовать английские предложения из файла arctic20.txt по следующей схеме: arctic_0001.wav...arctic_0020.wav, то есть по одному файлу на предложение. Для упрощения записи я воспользовался скриптом:

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Оставить мнение

Check Also

Хроники битвы при Denuvo. Как «непробиваемая» игровая защита EA Origin оказалась пробиваемой

Защита от пиратства Denuvo пришла на смену SecuROM и связана с одним действующим лицом – Р…