1 апреля 2014 в 10:46

Голосовое управление медиацентром из песочницы

Пожалуй, мечта всех писателей-фантастов с момента возникновения научной фантастики как таковой — голосовое управление компьютером. Что ещё, как не живой диалог с машиной, позволяет имитировать наличие у последней искуственного интеллекта и даёт основания рассчитывать на то, что кофемолки рано или поздно сойдут с ума, захватят мир и посадят ничтожных людишек в матрицу?

Первые попытки реализовать распознавание речи происходили ещё в середине прошлого столетия, а с распространением персональных компьютеров естественным оказалось желание использовать для этого процесса их мощности. Помнится, лет 15 назад уже существовали программы для Windows, позволявшие создавать макросы, соответствующие голосовым командам. С их помощью я повергал гостей в священный трепет, когда в ответ на просьбу пройти на три буквы Windows завершала работу и уступала место классической надписи «теперь питание компьютера можно отключить». В основе работы этих программ лежало сравнение принятых команд с записанными заранее. Сравнение это происходило с помощью анализа звуковых волн, а минус данного подхода очевиден — команды надо произносить с одной и той же интонацией и, желательно, в одном и том же состоянии сознания.

image
Картинка по запросу «голосовое управление компьютером». Харрисон Форд как бы говорит нам «enhance 34 to 36», что бы это ни значило...

Более логичный подход — анализ фонетических особенностей произнесённой фразы и попытка сопоставить каждое из слов со словарём, что снижает влияние на результат распознавания таких особенностей, как манера речи и даже некоторые «фефекты фикции». Так как же качественно распознать русскую речь? Первым на ум приходит Google, предоставляющий соответствующий API. Некоторые даже вполне удачно интегрируют использование данного API в свой «умный дом» — скрипт отправляет корпорации добра каждую услышанную фразу, после чего пытается сравнить распознанный текст с одной из заданных команд. Естественно, этот вариант я сразу отмёл, иначе придётся отключать систему каждый раз, когда мне надо будет обсудить как лучше избавиться от трупа. Более того, неизвестно сколько продлится эта халява и не решит ли Google внезапно заблокировать этот сервис.

Поэтому, когда я однажды понял, что хочу разговаривать со своим HTPC, я обратился к оффлайновым системам распознавания. Начал я с одной из самых популярных — CMU Sphinx. Первой фразой, которую я снова и снова пытался донести до неё, была «включи свет!». Предоставляю лог моего тестирования:

рай
размышляя
и умеет выпить пинту
тогда наверху трупа опыта
правда нос водкой миру
опять и опять
тот факт
пять
об этом
сперва это утро
вот тут


То есть, как генератор текстов песен для Земфиры, может, и сойдёт, но для полноценного использования не годится. Адаптация акустической модели и ограничение словаря не слишком улучшили ситуацию.

В этот момент, я пришёл к выводу, что пока что самый вменяемый способ организовать голосовое управление — это вести переговоры с бездушной железкой на языке наиболее предполагаемого противника. Не секрет, что английский язык проще русского во многих отношениях, в том числе и фонетически, что для нас особенно важно. А необходимый для распознавания английской речи функционал уже присутствует в последних версиях Windows. «Позвольте, но мы оксфордов не кончали! » — возразит кто-то из читателей. И правильно делали. Воронежский строительный техникум гораздо лучше подготовит к жизни в реальном мире. А наличие идеального прононса, как выяснилось, вовсе не нужно. Если компьютеры будущего понимают даже невнятный бубнёж Харрисона Форда, то чем мы хуже? Например, мой акцент представляет собой смесь Бората и какого-нибудь безумного русского генерала из голливудского трэш-фильма, в чём можно убедиться, посмотрев видео ниже. Я даже не поленился сделать субтитры, потому что сам с трудом понимаю, что я там несу.



Как это работает?


В качестве «прокладки» между пользователем и Windows Speech Recognition используется продукт под названием VoxCommando (~27$). Эта программа используя средства Windows распознаёт фразу и сравнивает её с командами, заданными пользователем. Благодаря ограничению словаря, точность распознавания близка к 100%.

К VoxCommando прилагается большое количество полезных плагинов, в том числе и для XBMC, который был мне особенно интересен. Кроме XBMC-плагина, также заслуживают внимания:
  • плагин для EventGhost — использую для отправки IR-сигналов управления телевизором и ресивером.
  • плагин произвольных HTTP-запросов — обращаюсь к API яндексовского переводчика, того самого, который перевёл «snake scale» как «змея масштаба».
  • также есть плагины для Vera и X10, позволяющие управлять домашней автоматизацией, например, освещением.

image
Настройка голосовых команд. Левое окно — список команд и соответствующие им фразы и их вариации. Правое — редактор текущей команды со списком необходимых действий (в данном случае — обращение к XBMC с использованием JSON-RPC API).

VoxCommando позволяет использовать Text-to-Speech-движки, установленные в системе, поэтому можно попытаться организовать полноценный диалог с машиной. Я на этом внимание не заострял, только лишь научил барышню отвечать «I am» на вопрос «Who's your daddy?» и на этом успокоился.

Микрофон


Ещё один важный вопрос — выбор микрофона. Тем, кто когда-либо сталкивался с распознаванием речи, известно, что лучше всего для этого подходит головная гарнитура. Но отдавать приказы искусственному интеллекту, нацепив на голову ворох проводов и пластмассы, как-то ни разу не киберпанково — в любом фантастическом фильме вас за такое засмеют. Некоторые довольно успешно используют Kinect или такую штуку, как The Voice Tracker, но у этих девайсов достаточно недостатков — довольно сильно ограничена дальность качественного восприятия речи, высокая зависимость от фоновых шумов, ложные срабатывания от воспроизводимого в данный момент контента. Вполне возможна ситуация, когда главный герой какой-нибудь мелодрамы во время признания в любви случайно произнесёт название музыкального альбома в стиле порно-грайнд, а медиацентр воспримет это как недвусмысленный сигнал, что пора прикоснуться к прекрасному.

В поисках решения этой проблемы я наткнулся на Amulet Remote. С виду это обычный MCE-пульт, но кроме инфракрасного передатчика он содержит в себе ещё и беспроводной микрофон, активирующийся при приведении устройства в вертикальное положение.

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

Несмотря на некоторые недоработки (небольшое по сравнению с обычными пультами время автономной работы и проблемы с обучаемостью), думаю, это самое удачное устройство для голосового управления HTPC на данный момент. Сейчас Amulet Remote предлагается за 69 долларов, но так как производитель высылает свою продукцию только в США, для доставки придётся воспользоваться услугами компании-посредника. Качество распознавания с использованием Amulet Remote на очень высоком уровне, да оно и не удивительно — устройство разработано в Ирландии и, по всей видимости, прошло жёсткое стресс-тестирование ирландским акцентом.

Заключение


Описанный выше вариант вполне можно использовать не только для того, чтобы контролировать медиацентр, но и для управления различными системами «умного дома», а также для большинства других задач, требующих автоматизации, будь то обращение к некоему веб-сервису, запуск приложения или отправка ИК-сигнала. Например, с помощью голосовой команды можно узнать погоду или включить кондиционер. Разве что за пивом послать пока не получится, но будем надеятся на дальнейшие шаги технического прогресса в этом направлении.
Сергей @sergemoose
карма
3,0
рейтинг 0,0
Самое читаемое

Комментарии (15)

  • +3
    Я наверное чего то не понимаю, но зачем голосовое управление, если для него все равно придется искать пульт.
    • +1
      Для сокращения времени поиска конкретного исполнителя в своей музыкальной библиотеке, например. Все необходимые действия на кнопки пульта не повесишь, каким бы «умным» он не был. Ну а вызов переводчика во время просмотра фильма и вовсе будет крайне трудно реализовать по-другому.
  • 0
    А ложных срабатываний нет?
    В фильме сказали Stop и фильм выключили?
    • 0
      Именно поэтому я и использую пульт, микрофон в котором активируется акселерометром. Те, кто пользуются, например Voice Tracker, который активен постоянно, жалуются на случайные срабатывания. Один из способов борьбы с этим — использование специальных префиксов для команд («computer, stop») или команд, активирующих и деактивирующих распознавание(например, «listen» и «don't listen»).
  • 0
    Идея и реализация на высоте. Вот только никогда не понимал смысла в голосовом управлении, ну если только в Google Glass. Мне проще кнопку нажать, чем слово сказать :).
    • 0
      Частично согласен. Естественно, нажать кнопку проще, чем сказать «стоп» или «пауза», но вот когда хочется посмотреть определённый фильм или сериал, найти конкретного музыкального исполнителя или альбом, да даже просто перемотать фильм на половину — быстрее и проще это сделать голосом. Тут удобство именно в комбинации данных подходов, поэтому мне и кажется, что пульт с микрофоном — в этом случае самое идеальное решение.
      Ну да, и ещё это просто прикольно, своеобразная тренировка командного голоса. :)
      • 0
        Как дополнительный функционал — это очень круто.
  • +1
    Опять Windows… :(

    А скином не поделитесь?
    А когда вы просите показать непросмотренные серии футурамы что происходит? Каким плагином пользуетесь?
    • 0
      Скин — это стандартный Aeon Nox. На мой взгляд — самый удачный скин для XBMC. Хочу обратить внимание, что он, к сожалению, плохо совместим с последними версиями XBMC, поэтому до сих пор пользуюсь старенькой Gotham Alpha 2.
      Непросмотренные серии — это smart playlist (video-playlists-new smart playlist). Этот инструмент позволяет создавать плейлисты на основе системы правил. VoxCommando закидывает такой плейлист (предварительно подставив в него аргументы голосовой команды, в данном случае название шоу «Futurama») в папку, где XBMC их обычно хранит, а затем посылает команду «открыть».
  • 0
    Довольно интересное решение, но меня больше интересует медиацентр. Могли бы рассказать побольше о HTPC? На каком железе, Какой формфактор имеет, и особенности внутреннего ПО. Что хотели бы улучшить. Понравился внешний вид и скорость работы. Спасибо
    • 0
      Конфигурация HTPC:
      — неттоп Zotac Zbox AD02 ZBOX-AD02-E на AMD E-350 (очень красивая и элегантная коробочка, не стыдно поставить на видное место рядом с телевизором)
      — Windows 7
      — XBMC 13.0-APLHA2 (скин Aeon Nox)
      — Описанный выше VoxCommando
      — IR-приёмник/blaster USB-UIRT
      — EventGhost — для дружбы пульта с XBMC и для отправки IR-сигналов через USB-UIRT (например, для одновременного включения/выключения ТВ и ресивера)

      Вроде всё :)

      В принципе, конфигурация полностью устраивает в таком виде, единственная проблема — изредка обнаруживаю подвисания, когда включаю телевизор после долгого перерыва (сам HTPC совсем не выключаю). Кого тут винить — винду, XBMC или железо — сказать сложно. Не то, что бы сильно раздражало, но огорчает. Старенький Istar Mini HD работал стабильнее, но после всех «плюшек» XBMC возвращаться к нему нет желания.
  • 0
    Воронежский строительный техникум гораздо лучше подготовит к жизни в реальном мире.

    Привет Воронежскому строительному техникуму! Подтверждаю, парни оттуда готовы к любым жизненным ситуациям! :)
  • 0
    самое удачное устройство для голосового управления HTPC на данный момент

    Не соглашусь. Самое удачное — это телефон =)
    Если бы у меня была такая потребность, я бы настроил таскер. Плагин AutoVoice нормально работает с русским через Google API. Через мод Google Search API к Xposed framework встраивается прям в Google Search и перехватывает распознанные команды. Команды можно настраивать с переменными. Те же самые перемотать на Х минут, или установить громкость на Х. Мод GoogleOfflineVoice заставляет распознавать речь оффлайн без подключенного интернета, при условии скаченных голосовых пакетов, но проще конечно с инетом. Функция AutoVoice Continous позволяет выделять из сплошного потока слов только нужные фразы через Regex. Распознанные команды передаются EventGhost на компе через AutoRemote.
    А активировать распознавание речи можно несколькими способами… Кнопка на Bluetooth гарнитуре; Open Mic+ for Google Now , который позволяет запускать поиск даже при выключенном экране при помощи любой фразы (у меня было настроено на «слушай команду»); ну или пока экзотический способ с кнопки на pebble, которые всегда на руке… =)
  • 0
    А не логичнее как-то совместить распознавание голосовых команд с тем же Kinect'ом? — Речь считается командой, только если сопровождается определённым жестом.

    Пассы руками и заклинания — чистая магия :-D
    • 0
      Идея сама по себе неплохая, но, судя по отзывам владельцев Kinect, для распознавания речи он далеко не идеален — неэффективен на больших расстояниях, ловит посторонние шумы и т.д.

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