В двух предыдущих частях нашего обзора мы описали современные системы распознавания речи для Linux и попытались установить и настроить одну из них — CMU Sphinx. В заключительной части попробуем использовать наши наработки на практике, прикрутив движок Pocketsphinx к Android-устройству и контроллеру умного дома. Стоит сразу предупредить — для выполнения всех описанных ниже действий необходимо базовое знание Java.

 

Оборудование и софт

Для организации голосового управления мы будем использовать установленное и настроенное ранее ПО — CMU Sphinx, дешевый Android-смартфон c установленным приложением Veravoice (см. далее) и ноутбук Dell Inspiron с Debian 8 на борту. И, что самое интересное, контроллер умного дома — специальное устройство, создающее беспроводную сеть, подобную Wi-Fi-сети, но использующую более низкие частоты. С виду оно напоминает обычный Wi-Fi-роутер и выступает в качестве посредника между ПДУ (в нашем случае смартфоном) и управляемым устройством. Подробнее о технологии, используемой в контроллерах умного дома, можно почитать тут. В данном обзоре мы не будем касаться вопросов настройки подобных устройств. Отметим лишь, что они подключаются к домашней локальной сети, как и роутеры, и ровно так же управляются из браузера. Цель обзора — не демонстрация возможностей контроллеров и уж тем более не их реклама. Просто без этого класса устройств не обойтись, как ни крути.

Целью автора было не создание умного дома. Это дорого и непрактично в рамках обычной квартиры. Автор стремился показать работоспособность CMU Sphinx. Показать, что системы распознавания речи для Linux ничуть не хуже проприетарных справляются с задачами распознавания русской речи и голосового управления оборудованием. Смартфон будет выступать в качестве универсального пульта дистанционного (до 300 м) управления техникой. Ноутбук был использован для обкатки CMU Sphinx и ее настройки, но управлять техникой легче с помощью смартфона, поэтому задача — перенести опыт и технологии с мобильного компьютера на мобильный телефон, при этом немного доработав софт под Android. Однако никто не запрещает тебе использовать для голосового управления ноутбук, например.

Сначала прикрутим к нашему смартфону движок Pocketsphinx — реализацию CMU Sphinx для Android. У Pocketsphinx есть версия для Windows Phone и порт под iOS. Главное преимущество этого способа перед облачным распознаванием речи (с помощью Google ASR или Yandex SpeechKit) в полной автономности, а также в скорости и точности распознавания. К тому же это дешевле — не нужно каждый раз обращаться к серверам и уж тем более создавать эти серверы.

Сразу следует отметить, что преимущества можно считать таковыми только с учетом специфики оборудования (телевизор, например). Также нужно понимать, что в этом случае у нас будет строго определенный словарь и грамматика. Для распознавания произвольного текста (к примеру, для набора СМС-сообщения или поискового запроса) лучше использовать онлайн-способ.

Смартфон гораздо удобней ноутбука, когда дело касается голосового управления
Смартфон гораздо удобней ноутбука, когда дело касается голосового управления

INFO


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

Матчасть

Задача — создать голосовой ПДУ для техники, работающий быстро и точно с расстояния в несколько метров, который при необходимости активируется голосом и работает даже на дешевых Android-устройствах с устаревшими версиями мобильной ОС. На практике это выглядит так: голосом активируется микрофон, далее произносится название нужного устройства (в нашем случае телевизор). Приложение Veravoice распознаёт голос и включает либо выключает в зависимости от их текущего состояния наши устройства. Также приложение может получать от устройств состояние и дополнительную информацию, такую как прогноз погоды или новости.

INFO


Автор статьи выражает огромную благодарность пользователю GitHub Дмитрию Чечёткину, автору приложения Veravoice, в котором реализована львиная доля всех наработок и способов взаимодействия с CMU Sphinx. Скачать версию приложения для Android можно отсюда.

Исходники Veravoice открыты. Благодаря этому задача упростилась на порядок. Дмитрий совместил API Pocketsphinx с Android SDK, в результате получилось вполне работоспособное приложение. С помощью этого приложения можно реализовать многие вещи, доступные лишь в дорогих системах умного дома. Если в каждой комнате повесить по дешевому смартфону, можно вечером, придя с работы, скомандовать: «Умный дом! Свет! Телевизор!» — и включить нужное оборудование, узнать прогноз погоды или температуру в помещении.

Pocketsphinx хорош еще и тем, что исходники его открыты и в нем реализована поддержка голосовой активации, как говорится, «из коробки». Микрофон будет активироваться либо голосом, либо нажатием на иконку микрофона, либо просто касанием рукой экрана. Экран может быть полностью выключенным.

Русская языковая модель и грамматика пользовательских запросов прикручиваются к движку довольно просто. Об этом написано в предыдущей части нашего обзора. Здесь мы остановимся лишь на некоторых мелких, но важных деталях. Самое главное, что наше приложение будет распознавать именно то, чему мы его обучим, и не более того. Лишнего не выдаст. Напомним, Pocketsphinx использует грамматику запросов JSGF — расшифровывается как Java Speech Grammar Format, или формат грамматики речи JavaScript. Разработан компанией Sun Microsystems, открытый, принят W3C в качестве стандарта. По сути, это представление грамматики того или иного языка в виде исходного кода. JSGF используется многими проектами распознавания речи, в том числе проприетарными. Он гибок и позволяет описать все необходимые варианты фраз, которые будет произносить пользователь. В нашем случае это будут названия устройств. Выглядит примерно так:

<commands> = телевизор | включить | погода;

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

#JSGF V1.0;
grammar commands;
public <command> = <commands>+;
<commands> = лампа | монитор | температура;

Знак плюса означает, что пользователь может назвать не одно, а несколько устройств подряд. Veravoice получает список устройств от контроллера умного дома (см. далее) и формирует такую грамматику в классе Grammar. Грамматика — это то, ЧТО может говорить пользователь. Чтобы научить Pocketsphinx тому, КАК он будет произносить что-либо, необходимо обучить его правильно понимать произношение слов. В этом нам поможет транскрипция. Это называется словарь. Транскрипции описываются с помощью специального синтаксиса. Пример:

умный  uu m n ay j
дом  d oo m

В принципе, ничего сложного. Двойная гласная в транскрипции обозначает ударение. Двойная согласная — мягкую согласную, за которой идет гласная. Все возможные комбинации для всех звуков русского языка можно найти в самой языковой модели. Понятно, что заранее описать все транскрипции в приложении невозможно, потому что никому заранее не известны названия, которые пользователь даст своим устройствам. Поэтому в Veravoice подобные транскрипции генерируются на лету. Реализуется это через JavaScript-класс PhonMapper, который может получать на вход строчку и генерировать для нее правильную транскрипцию. Подробности тут.

Транскрипция — очень важная часть всего процесса
Транскрипция — очень важная часть всего процесса
 

Собственно процесс

Научить движок распознавания речи все время «слушать эфир» и ждать произнесения заранее заданной фразы (или фраз), при этом отсеивая все другие звуки и речь — не то же самое, что описать грамматику и просто включить микрофон.

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

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

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

Вариант 2. Купи одну статью

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


Комментарии

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Как работает Linux: от нажатия кнопки включения до рабочего стола

Лучший способ понять, как работает операционная система, — это проследить поэтапно ее загр…