Меню Рубрики

Голосовое управление компьютером linux

Управляем Linux-десктопом с помощью голосовых команд

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

Чтобы научить Linux понимать проговариваемые слова, применяются системы распознавания речи (CMU), наиболее известная и работоспособная из которых носит имя Sphinx. Разработкой этого движка занимается университет Карнеги-Меллона, хотя отдельные доработки также производили сотрудники Массачусетского технологического института и корпорация Sun Microsystems. Качество распознавания «Сфинкса» еще далеко от идеала, он постоянно дает сбои и совершенно не способен разобрать слитную речь. Однако его возможностей вполне достаточно для организации системы исполнения простых голосовых команд, что и демонстрируют такие проекты, как Gnome Voice Control и PerlBox.

Альтернатива Sphinx — движок Julius японского происхождения. По качеству распознавания Julius не уступает Sphinx, однако имеет два изъяна: а) отсутствие хорошей акустической модели для английского языка (для русского более-менее нормальной нет и для Sphinx), что означает гораздо более низкое качество распознавания (в конце статьи я расскажу, как обойти эту проблему), и б) он использует внешний движок генерации акустической модели (обучения) HTK, разрабатываемый под руководством Microsoft в Кэмбридже (а это значит, что движок хоть и открыт, но использовать его можно только в личных целях).

Для систем синтеза существует масса различных оберток, упрощающих использование. Для Sphinx это уже не развиваемый PerlBox и созданный в рамках Google Summer Of Code апплет для среды Gnome под названием Gnome Voice Control. Отличная графическая оболочка для Julius — программа Simon, написанная с использованием библиотеки Qt4.

Пингвин! Лежать!

Перед тем, как перейти к установке и настройке системы распознавания речи следует уяснить, что ни один из открытых движков, будь то Sphinx, Julius или какой-то менее известный проект, не способен на 100% верно разобрать речь, даже если она будет принадлежать актеру с хорошо поставленным голосом. Однако при правильной тренировке программы (которая также включает в себя и подгонку под особенности произношения конкретного человека) ее вполне можно научить корректно распознавать простые двух-словные команды почти в 100% случаев.

И вот здесь нас ждет очень неприятный сюрприз: наиболее известная и распространенная CMU Sphinx (которая, кстати, имеет целых четыре параллельно развиваемых версии, одна из которых написана на Java) до сих пор находится в стадии «вечной альфы», пользоваться которой (не говоря уже о тренировке) обычному пользователю довольно затруднительно. Существует, конечно, утилита Gnome Voice Control, существенно упрощающая процесс общения с программой, но работает она только в Gnome. Поэтому мы воспользуемся Julius, который хоть и имеет некоторые проблемы, но очень прост в использовании.

Julius есть в репозиториях многих дистрибутивов, поэтому его не придется собирать из исходников. В Ubuntu для установки достаточно выполнить команду:

Чтобы научить Julius понимать английский язык, понадобятся файлы акустической модели, содержащие статистическое представление звуков, которые может воспринимать движок. Акустическая модель строится путем обработки звуковых файлов (с начитанными человеком фрагментами текстов) специальными программами (например, из пакета HTK). Наиболее правильно самому наговорить эти фрагменты и, таким образом, научить движок распознавать свой голос (в том числе, интонацию и ошибки произношения) и словосочетания, которые нужны именно вам. Тогда процент правильного распознавания будет стремиться к значению 100. Однако все это сложно, требует определенной подготовки и времени, поэтому пока мы ограничимся акустической моделью, распространяемой с сайта www.voxforge.org. Для этого надо установить пакет julius-voxforge:

Теперь можно приступить к настройке, которая фактически включает в себя только процесс создания словаря: списка слов, который должен уметь распознавать движок, и объяснение того, как эти слова могут между собой сопоставляться. Нужно это для двух целей: во-первых, движок должен знать произношение слов и понимать их, а во-вторых, сократив словарь всего до нескольких фраз, мы значительно повысим качество распознавания. Для простоты возьмем стандартные словари, распространяемые вместе с пакетом julius-voxforge:

Просмотрев файл sample.voca, вы заметите, что он содержит совсем небольшой список слов, таких как call, get, dial и т.д., а также их фонетическое представление (что-то вроде транскрипции), файл sample.grammar содержит правила, в каких комбинациях эти слова могут быть использованы. Не беспокойтесь, если он кажется непонятным, это нормально :).

Попробуем изменить файлы так, чтобы подогнать их под нашу задачу, которой будет… допустим, управление аудиоплеером. Итак, откройте файл sample.voca и добавьте в него следующее (удалив прежнее содержимое):

В файл sample.grammar поместите строку:

Все это значит, что движок должен понимать словосочетания, которые состоят из: тишина (NS_B), слов «do» (ID), «play», «next», «prev» или «silence» (COMMAND), тишина (NS_E). Говоря проще, вы можешь сказать «Do play», и машина вас поймет, в то время как слова «Hello World» будут для него инопланетным языком. Хорошая особенность короткого словаря в том, что, даже если вы скажете что-то вроде «Du pray», движок, скорее всего, распознает это как «Do play», а не как-нибудь иначе (в английском десятки и сотни слов звучат почти одинаково).

Теперь, не выходя из каталога, выполните команду для генерации файлов sample.dfa sample.term и sample.dict:

Это все. Можете протестировать julius с помощью команды:

После появления строки » >>» начинайте говорить определенные выше фразы. Чтобы движок правильно их понял, говорите слитно, как это делают англоговорящие (голоса которых и были использованы для создания акустической модели voxforge), без перерыва между словами. При таком способе произношения движок работает на удивление хорошо, лично у меня ни одного сбоя на 10 фраз. Если вы полуте худшие результаты, стоит поработать над произношением и купить хороший микрофон.

Конечно, пока от программы мало толку, поэтому мы должны создать Dialog manager, то есть, программу (скрипт), которая будет отвечать за перевод голосовых команд в команды на исполнение. К счастью, сделать это просто, достаточно прицепить на выход Julius стандартный ввод скрипта, который будет обрабатывать печатаемые программой фразы. Например, скрипт для управления audacious на языке python может выглядеть так:

Сохраните его под именем command.py и запускайте julius следующим образом:

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

Источник

Разбираемся с современными системами распознавания речи в Linux

Содержание статьи

Человека всегда привлекала идея управлять машиной естественным языком. Возможно, это отчасти связано с желанием человека быть НАД машиной. Так сказать, чувствовать свое превосходство. Но основной посыл — это упрощение взаимодействия человека с искусственным интеллектом. Управление голосом в Linux с переменным успехом реализуется без малого уже четверть века. Давай разберемся в вопросе и попробуем сблизиться с нашей ОС настолько, насколько это только возможно.

Суть дела

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

Следует различать собственно системы распознавания речи (перевод речи в текст или в команды), такие как, например, CMU Sphinx, Julius, а также приложения на основе этих двух движков, и голосовые ассистенты, ставшие популярными с развитием смартфонов и планшетов. Это, скорее, побочный продукт систем распознавания речи, дальнейшее их развитие и воплощение всех удачных идей распознавания голоса, применение их на практике. Для Linux-десктопов таких пока мало.

Надо понимать, что движок распознавания речи и интерфейс к нему — это разные вещи. Таков базовый принцип архитектуры Linux — разделение сложного механизма на более простые составные части. Самая сложная работа ложится на плечи движков. Обычно это скучная консольная программа, работающая незаметно для пользователя. Пользователь же взаимодействует в основном с программой-интерфейсом. Создать интерфейс несложно, поэтому основные усилия разработчики направляют именно на разработку открытых движков распознавания речи.

Что было раньше

Исторически сложилось так, что все системы работы с речью в Linux развивались не спеша и скачкообразно. Причина не в криворукости разработчиков, а в высоком уровне вхождения в среду разработки. Написание кода системы для работы с голосом требует высокой квалификации программиста. Поэтому, перед тем как начать разбираться с системами работы с речью в Linux, необходимо сделать небольшой экскурс в историю. Была когда-то в IBM такая чудесная операционная система — OS/2 Warp (Merlin). Вышла она в сентябре далекого уже 1996 года. Кроме того, что она обладала очевидными преимуществами перед всеми остальными операционками, OS/2 была укомплектована весьма продвинутой системой распознавания речи — IBM ViaVoice. Для того времени это было очень круто, учитывая, что ОС работала на системах с 486-м процессором с объемом ОЗУ от 8 Мбайт (!).

Как известно, OS/2 проиграла битву Windows, однако многие ее компоненты продолжили существовать независимо. Одним из таких компонентов стала та самая IBM ViaVoice, превратившаяся в самостоятельный продукт. Так как IBM всегда любила Linux, ViaVoice была портирована на эту ОС, что дало детищу Линуса Торвальдса самую передовую для своего времени систему распознавания речи.

К сожалению, судьба ViaVoice сложилась не так, как хотели бы линуксоиды. Сам движок распространялся бесплатно, но его исходники оставались закрытыми. В 2003 году IBM продала права на технологию канадо-американской компании Nuance. Nuance, разработавшая, пожалуй, самый успешный коммерческий продукт для распознавания речи — Dragon Naturally Speeking, здравствует и ныне. На этом бесславная история ViaVoice в Linux практически закончилась. За то короткое время, что ViaVoice была бесплатной и доступной линуксоидам, к ней разработали несколько интерфейсов, таких, например, как Xvoice. Однако проект давно заброшен и ныне практически неработоспособен.

OS/2 Warp — система, которую мы потеряли

Xakep #206. Ключ от всех дверей

Что сегодня?

Сегодня все гораздо лучше. В последние годы, после открытия исходников Google Voice API, ситуация с развитием систем распознавания речи в Linux значительно улучшилась, выросло качество распознавания. Например, проект Linux Speech Recognition на основе Google Voice API показывает очень неплохие результаты для русского языка. Все движки работают примерно одинаково: сначала звук с микрофона устройства юзера попадает в систему распознавания, после чего либо голос обрабатывается на локальном устройстве, либо запись отправляется на удаленный сервер для дальнейшей обработки. Второй вариант больше подходит для смартфонов или планшетов. Собственно, именно так и работают коммерческие движки — Siri, Google Now и Cortana.

Из всего многообразия движков для работы с человеческим голосом можно выделить несколько активных на данный момент.

WARNING

CMU Sphinx

Большая часть разработки CMU Sphinx ведется в университете Карнеги — Меллона. В разное время над проектом работали и Массачусетский технологический институт, и покойная ныне корпорация Sun Microsystems. Исходники движка распространяются под лицензией BSD и доступны как для коммерческого, так и для некоммерческого использования. Sphinx — это не пользовательское приложение, а, скорее, набор инструментов, который можно применить в разработке приложений для конечных пользователей. Sphinx сейчас — это крупнейший проект по распознаванию речи. Он состоит из нескольких частей:

  • Pocketsphinx — небольшая быстрая программа, обрабатывающая звук, акустические модели, грамматики и словари;
  • библиотека Sphinxbase, необходимая для работы Pocketsphinx;
  • Sphinx4 — собственно библиотека распознавания;
  • Sphinxtrain — программа для обучения акустическим моделям (записям человеческого голоса).

Проект развивается медленно, но верно. И главное — его можно использовать на практике. Причем не только на ПК, но и на мобильных устройствах. К тому же движок очень хорошо работает с русской речью. При наличии прямых рук и ясной головы можно настроить распознавание русской речи с помощью Sphinx для управления домашней техникой или умным домом. По сути, можно обычную квартиру превратить в умный дом, чем мы и займемся во второй части этого обзора. Реализации Sphinx имеются для Android, iOS и даже Windows Phone. В отличие от облачного способа, когда работа по распознаванию речи ложится на плечи серверов Google ASR или Яндекс SpeechKit, Sphinx работает точнее, быстрее и дешевле. И полностью локально. При желании можно научить Sphinx русской языковой модели и грамматике пользовательских запросов. Да, придется немного потрудиться при установке. Равно как и настройка голосовых моделей и библиотек Sphinx — занятие не для новичков. Так как основа CMU Sphinx — библиотека Sphinx4 — написана на Java, можно включать ее код в свои приложения для распознавания речи. Конкретные примеры использования будут описаны во второй части нашего обзора.

VoxForge

Особо выделим понятие речевого корпуса. Речевой корпус — это структурированное множество речевых фрагментов, которое обеспечено программными средствами доступа к отдельным элементам корпуса. Иными словами — это набор человеческих голосов на разных языках. Без речевого корпуса невозможна работа ни одной системы распознавания речи. В одиночку или даже небольшим коллективом создать качественный открытый речевой корпус сложно, поэтому сбором записей человеческих голосов занимается специальный проект — VoxForge.

Любой, у кого есть доступ к интернету, может поучаствовать в создании речевого корпуса, просто записав и отправив фрагмент речи. Это можно сделать даже по телефону, но удобней воспользоваться сайтом. Конечно, кроме собственно аудиозаписи, речевой корпус должен включать в себя дополнительную информацию, такую как фонетическая транскрипция. Без этого запись речи бессмысленна для системы распознавания.

VoxForge — стартовый портал для тех, кто хочет внести свой вклад в разработку открытых систем распознавания речи

HTK, Julius и Simon

HTK — Hidden Markov Model Toolkit — это инструментарий для исследования и разработки средств распознавания речи с использованием скрытых марковских моделей, разрабатывается в Кембриджском университете под патронажем Microsoft (Microsoft когда-то выкупила этот код у коммерческого предприятия Entropic Cambridge Research Laboratory Ltd, а затем вернула его Кембриджу вместе с ограничивающей лицензией). Исходники проекта доступны всем желающим, но использование кода HTK в продуктах, предназначенных для конечных пользователей, запрещено лицензией.

Однако это не означает, что HTK бесполезен для Linux-разработчиков: его можно использовать как вспомогательный инструмент при разработке открытых (и коммерческих) средств распознавания речи, что и делают разработчики открытого движка Julius, который разрабатывается в Японии. Julius лучше всего работает с японским языком. Великий и могучий тоже не обделен, ведь в качестве голосовой базы данных используется все тот же VoxForge.

Возможности HTK и Julius активно используются в приложении Simon. Проект запущен еще в 2007 году и до сих пор пребывает в перманентной бете. Движок использует библиотеки KDE, CMU Sphinx и/или Julius и акустические модели проекта VoxForge. Есть версии для Windows и Linux. Разработка Simon ведется в рамках проекта KDE в составе рабочей группы KDE Accessibility. Последняя версия Simon — 0.4.1 — вполне себе юзабельное приложение для бета-версии.

В Simon включены инструменты для создания голосовых и акустических моделей, распознавания речи и организации управления голосом. Кроме управления десктопом, Simon может использоваться для аутентификации голосом, голосового управления роботами и устройствами. Главный приоритет разработчики отдают предоставлению средств для работы на компьютере людей с ограниченными возможностями.

Помимо описанных выше, существуют и другие проекты по распознаванию речи, такие как Kaldi, наработки которого используются сейчас в других проектах. Однако в рамках данного обзора мы не будем их касаться. И дело не в том, что они не заслуживают внимания, а в том, что большинство из них скорее мертвы, чем живы. Более-менее активно развиваются лишь Sphinx и его производные, Simon, HTK и Julius. Смотри подробности на сайте Саймона.

Саймон говорит и выглядит довольно прилично

Лучшие друзья человека

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

Условно все голосовые ассистенты можно разделить на две группы: те, которые так или иначе используют Google Voice API, и остальные. Остальные — это, например, ставшая уже знаменитой Cortana от Microsoft, которая, по слухам, скоро станет доступна для Android и iOS, что теоретически означает возможность портирования ее и на чистый Linux-десктоп. Или Siri — детище Apple, которое яблочная компания оберегает от любого стороннего использования как зеницу ока.

После открытия компанией Google своего API для работы с голосом персональные ассистенты для Linux начали появляться один за другим.

Вот правда. Именно так

Linux Speech Recognition

В начале 2013 года, после закрытого бета-тестирования был переведен в разряд свободных проект по созданию системы распознавания речевых команд на базе Google Voice API. Система позволяет через управление голосом запускать программы, выполнять операции с файлами, открывать сайты, находить ответы на произвольные вопросы, создавать электронные письма, диктовать текст документов, запускать приложения и так далее.

Вначале проект развивался независимым энтузиастом для организации речевого управления Ubuntu, но в текущем виде его код не привязан к особенностям данной системы и может быть использован в любых дистрибутивах. Код проекта написан на языке Python и открыт под лицензией GPLv3. Распознавание речи реализовано через обращение к Google Voice API, который демонстрирует достаточно неплохие результаты для русского языка. Вся дополнительная инфа тут.

Можно установить в Ubuntu и пользоваться. Удобно, быстро

Hound

Этот голосовой ассистент, хоть и создан для Android, а не для Linux, все же заслуживает упоминания в нашем обзоре. Дело в том, что в тестах на распознавание речи этот помощник обгоняет и Siri, и Google Now, справляясь с поставленными задачами значительно эффективнее и быстрее. Самое ценное в нем то, что он воспринимает фразы именно так, как пользователь их произносит, то есть тебе не придется как-то специально формулировать свои вопросы, чтобы ассистент их понял.

Пока проект находится на стадии беты и доступен только по инвайтам и только владельцам Android-девайсов, находящимся на территории США. Разработчики обещают выпустить версии для iOS после окончания бета-тестирования. Будет ли версия для десктопов, пока неизвестно. Проект развивается уже девять лет и, по словам разработчиков, достаточно стабилен для повседневного использования. Русского языка, вестимо, нет.

Как отмечает издание The Verge, Hound пока еще не может полностью заменить Google Now или Siri, из-за того что недостаточно «персонализирован».

Hound работает почти так же, как и Google Now, только лучше

Betty

Это голосовой ассистент для консоли Linux. Он переводит английские слова в команды в терминале и выполняет их. Если ты фанат тру-линукса, то это решение для тебя. Страница проекта на GitHub гласит: «Миссия Betty — в предоставлении пользователю естественного языка общения с компьютером». Ведь наверняка у тебя бывали ситуации, когда при работе в командной строке ты не мог вспомнить синтаксис той или иной команды и лез в интернет за помощью. С Betty такой проблемы больше не будет.

Например, если ты забыл, как разархивировать файлы в терминале, тебе достаточно сказать по-английски «Betty uncompress archive.tar.gz» («Бетти, разархивируй файл archive.tar.gz»), и файл и правда разархивируется. Проверено автором этой статьи.

К сожалению, Betty пока не понимает русскую речь, да и набор команд у нее довольно ограничен, но разработка идет уже больше двух лет, и довольно активно, так что логично ожидать в будущем появление большего количества доступных команд.

Вот часть команд, которые Betty версии 0.1.8 понимает уже сейчас:

  • count (подсчет, например количества символов и слов в файле);
  • config (смена имени пользователя);
  • datetime (вывод текущего времени и даты);
  • поиск (внутри файлов);
  • web (запросы, скачивание файлов, поиск информации в Сети и прочее);
  • операции с папками и файлами (архивирование/разархивирование файлов, вычисление размера файлов, изменение прав доступа и другие);
  • пользовательские команды (вывод имени пользователя, IP-адреса, имена залогинившихся в машину пользователей и так далее).

Список команд постоянно увеличивается. Над проектом работает уже семнадцать разработчиков из пяти стран. Полный список команд Betty ты можешь найти на странице проекта на GitHub.

Betty создана гиками для гиков. И работает, как гик

Sirius

Жемчужиной среди остальных можно назвать Sirius — новое и весьма амбициозное решение от группы разработчиков Clarity Lab из университета Мичигана. Несмотря на сходство названия с Siri, проект не имеет с ней ничего общего. Sirius уже может гораздо больше, чем его аналоги. Разработку Sirius взяли под свое крыло Google, DARPA, ARM, министерство обороны США и Американский национальный научный фонд. Исходники распространяются под лицензией BSD. Система основана на нескольких свободных проектах по распознаванию речи, таких как Sphinx, Kaldi, Protobuf, Speeded Up Robust Features (SURF, работает на базе OpenCV). Таким образом, в Sirius воплотилось все то лучшее, что было разработано в сфере распознавания речи за последние 35 лет.

В состав пакета входит приложение Sirius, которое можно установить в Ubuntu, веб-фронтенд для браузера и набор базовых библиотек с реализацией различных алгоритмов поиска и распознавания. В основном код написан на С++, но для работы требуется много внешних компонентов на Java. В качестве базы данных для формирования ответов используется Википедия, а для распознавания речи — наработки проектов Sphinx, Kaldi и RASR. «Главное отличие нашей программы Sirius от ее коммерческих аналогов — она полностью бесплатна и может быть адаптирована под нужды пользователей», — поясняет автор разработки Джейсон Марс (Jason Mars).

Впервые Sirius продемонстрировали 14 марта 2015 года на технологической конференции в Стамбуле. Выпуск программы состоялся на следующий день. Sirius распознаёт не только речь, но и картинки и образы, а также понимает естественный язык человека. Например, программе можно показать фото любимого кафе и спросить, во сколько оно закрывается. Главное отличие программы от конкурентов заключается еще и в том, что пользователь может сделать Sirius узкоспециализированным помощником. К примеру, для выдачи академических консультаций ученому. Для реализации этого разработчики начали сотрудничество с IBM. «Фактически мы создали Linux среди умных цифровых помощников», — утверждает Марс.

Система вопросов и ответов была взята из проекта OpenEphyra, а способность распознавания изображений авторы позаимствовали у алгоритма SURF компании Qualcomm. По мнению создателей Sirius, уже к концу 2018 года доля голосовых запросов превысит обычные текстовые запросы. Если разработчики не сбавят темпов и у них не иссякнет энтузиазм, Sirius рискует стать лучшей в мире системой распознавания речи. За новостями проекта можно следить на сайте Джейсона Марса.

Один из создателей Sirius Джейсон Марс уверен в будущем проекта

Заключение

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

Источник

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

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

  • Яркость дисплея mac os
  • Яндекс строка для mac os
  • Яндекс радио для mac os
  • Яндекс почта приложение для mac os
  • Яндекс переводчик для mac os