В первой части нашего туториала мы рассмотрели основные системы распознавания речи для 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

WTF is APT? Продвинутые атаки, хитрости и методы защиты

Наверняка ты уже читал о масштабных сетевых атаках, от которых пострадали банки, крупные п…