Управляем 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-телефония позволит вам увеличить число исходящих линий, расширить количество внутренних номеров, пользоваться конференцсвязью, а также записывать телефонные разговоры.
Источник
Голосовой ассистент. Что доступно?
Не всегда есть возможность трогать клавиатуру и мышь (руки в масле\пыли\стружке). Нужен голосовой ассистент, который:
* Может быть активен в фоне, слушая команды и активируясь по заданному слову\фразе
* Иметь возможность выполнить кастомно заданную команду (типа «активируй узел 1443», где «активируй узел» выполнит скрипт node.sh, а 1443 пойдет в параметр.
* Работать автономно от сети. Хранилище для настроенного локального анализатора можно выделить до 100 ГБ.
* Давать аудиоподтверждение принятой команды (не всегда есть возможность посмотреть на экран).
Если надо будет долго обучать под распознавание своего голоса — норм.
Что есть из доступного? Если опенсорс — еще лучше.
В теги добавляю пистон, обычно по этим вопросам его долбят.
вообще попадался интересный проект год назад для убунты на английском google в помощь..
Пистон совсем не при чём. Есть древняя штука — cvoicecontrol. После обучения работает почти идеально.
«Mycroft is the world’s first open source voice assistant.»
Сразу идет нафиг, потому что голос идет через их сервера:
We promise to never sell your data
Solkogan использует google speech recognition, с соответствующим лазанием в сеть на каждый запрос — весь голосовой трафик не прогонишь, да и небезопасно.
Дуся платная, когда есть интернет — то все летит к ним на сервера. На компе работает только из браузера со всеми ограничениями — скрипты не повыполняешь, консоль не потюкаешь.
cvoicecontrol was written in 2000 by Daniel Kiecza
bugs/problems have blocked potential users of cvoicecontrol for years
looks like no one has used it since at least 2007
Настолько древняя, что в 2010м уже говорили, что оно целиком мертво. Написано в 2000м под реалии 2000го.
depends on ncurses4. Ubuntu 10.04 ships with ncurses5
libncurses4 and libncurses4-dev install ok with libncurses5 present
possible issue with symlink, that may interfere with ncurses5: >/usr/lib/libncurses.so -> /lib/libncurses.so.4
Ну и, соответственно, зависит от такого древнего говна мамонта, которого и в допрепах хрен найдешь, а если и найдешь, то оно на систему 2019го года не поставится из-за конфликтов.
Я не разбиралась, но по-моему через их сервера — это опционально.
Да ему давно насрать какая версия ncurses, работает везде. Кроме того ncurses там используется только в обучалке.
Хипсторы такие хипсторы.
Оно работает, причём работает совершенно автономно, без всяких там облаков, при этом не пожирая гигабайты и не тормозя даже на самом убогом MIPS в отличии от всего этого новомодного говнища, и совершенно насрать когда оно было написано и когда вышла последняя версия, и тем более насрать, что там думают об этом всякие любители новых модных слов.
отпишись по результатам после плз
Как я и сказал, для установки требует libncurses4, которая не может одновременно стоять с libncurses5. При этом libncurses4 даже нет в стандартных репах.
Оно даже не компилится на новых ncurses:
Так вроде гуглоассистенту можно свои команды скармливать
Гуглассистент работает на гуглооблаке, постоянно гнать ему звуковой трафик небезопасно.
Да к нему почти всегда гонится звуковой трафик если есть телефон с ним или просто гугл в браузере открыт (если ты, конечно, не заморочился и все не поотрубал)
Как я и сказал, для установки требует libncurses4, которая не может одновременно стоять с libncurses5. При этом libncurses4 даже нет в стандартных репах.
Это полнейший бред. Оно даже с libncurses6 собирается и там не используются никакие libncurses4-специфичных вещи которых нету в следующих версиях.
сделай /usr/include/ncurses/ncurses.h линком на /usr/include/ncurses/curses.h
Ещё может быть нужно сделать линки
Не собирается. Ему функции из ncurses4 нужны, а не хэдеры. Ошибки линкера, а не компилятора
А -lncurses у тебя вообще где? autoreconf -i делал? Все эти функции есть и в libncurses5 и в libncurses6
Откуда вообще этот бред про необходимость libncurses4?
Откуда вообще этот бред про необходимость libncurses4?
depends on ncurses4. Ubuntu 10.04 ships with ncurses5
и это входит в дефолтный -L, иначе бы отвалилось полсистемы.
Короче скомпилил — у автора недоделанный makefile, в нем вообще не указано lncurses. Причем makefile не который снаружи лежит, а который в каталоге с кодом.
Ща буду дальше ковырять.
Правда оно мне теперь говорит, что мне надо в 2000й и купить аудиокарту:
Ну а при линковке-то почему -lm есть, а -lncurses нету? Ты в первый раз что-то собрать пытаешься. что-ли, если такие мелочи вызывают проблемы?
Вот. собрал с libncurses.so.5.9 например, никаких проблем.
Модули snd-mixer-oss и snd-pcm-oss загрузи, прибей все софтины которые используют микшер и PCM через альсу.
Не выходит каменный цветок
»’ $ lsmod | grep oss snd_pcm_oss 57344 0 snd_mixer_oss 28672 1 snd_pcm_oss
$ microphone_config No mixer devices available! Please purchase a sound card and install it! »’
Этот https://github.com/Sound-Linux-More/cvoicecontrol вообще не удается собрать, начиная с отсутствия configure
У тебя какой-нибудь /dev/mixer* есть? Покажи ls -la /dev/mixer*
«У тебя какой-нибудь /dev/mixer* есть?» Да.
«Покажи ls -la /dev/mixer*»
/cvoicecontrol# ls -la /dev/mixer* crw-rw—- 1 root audio 14, 0 дек 21 16:53 /dev/mixer
Ему вообще ncurses не нужен.
С ncurses у меня и не было проблем, а со сборкой ступил. Сейчас собралось. Имена исполняемух файлов поменялись, с этим разобрался. Пытаюсь запустить.
Запусти какой-нибудь микшер, и посмотри, там у тебя вообще есть регулировки относящиеся именно к микрофону?
Попробуй закомментарить строчку 212 в файле mixer.c
У меня на стареньком ноуте с дебианом собралось, но с ним неудобно сейчас работать. Попробовал собрать на рабочем с калькой и получил.
Блин, как всё тяжко и неоднозначно. Попробовал собрать на Ubuntu 18.04 — все собралось без проблем, но при запуске
вообще не удается собрать, начиная с отсутствия configure
А ты все программы под рутом запускаешь?
Нет, не все. Дело в запуске под рутом? Из за этого не работает?
И да и нет. Не запускай ничего под рутом! Откуда сырцу брал для сборки?
Кроме того в генте оно есть в репах, но более старое — не находит звуковуху. Прививать мне хороший тон, пожалуй, поздновато на 6м десятке, но дело не в этом. Я пытаюсь запустить на 4х разных инсталляциях и везде разные грабли. Дальше всего удалось продвинуться на специально отдельно поставленом Дебиане, где все скомпилилось, после небольших танцев с бубном увиделась звуковуха, но cvoicecontrol_microphone_config ругается, что уровень с микрофона мал. При этом совершенно очевидно, что крутит он не тот миксер, т.к. на том миксере уровень не меняется. В системе 2 «звуковухи» — HDMI и аналоговая. По умолчанию поставлена аналоговая и alsamixer именно её видит по умолчанию. Сейчас не могу выложить подробности — работаю, а за подробностями нужно перезагружаться в тот Дебиан.
Источник