Голосовой ассистент. Что доступно?
Не всегда есть возможность трогать клавиатуру и мышь (руки в масле\пыли\стружке). Нужен голосовой ассистент, который:
* Может быть активен в фоне, слушая команды и активируясь по заданному слову\фразе
* Иметь возможность выполнить кастомно заданную команду (типа «активируй узел 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 именно её видит по умолчанию. Сейчас не могу выложить подробности — работаю, а за подробностями нужно перезагружаться в тот Дебиан.
Источник
Pocketsphinx. Распознавание речи и голосовое управление в Linux
— Всё в порядке, Лёня?
Динамики отрегулированы на максимум, я морщусь, отвечаю:
— Да. Тише звук.
— Звук — тише, — соглашается «Виндоус-Хоум», — тише, тише…
— Хватит, Вика
С.Лукьяненко, «Лабиринт отражений»
Введение
В данной статье я не буду касаться Julius, поскольку гайдов по его использованию (в том числе и в Рунете) хватает. Речь будет идти о CMU Sphinx.
Описание и установка
Не забудьте после установки выполнить:
Для работы с /dev/dsp установим согласно FAQ пакет oss-compat.
Базовое использование
/sphinx.
Синтаксис нашей команды таков:
-argflie: имя файла в текущей директории, содержащего все аргументы.
stderr для удобства перенаправим в файл.
Содержимое argfile:
-hmm: путь к каталогу, содержащему файлы акустической модели (шаблоны отдельных звуков).
-lm: путь к файлу триграммной языковой модели (можете почитать здесь).
-dict: путь к файлу словаря произношения.
-cepdir: путь к каталогу со звуковыми файлами. Будьте внимательны: если вы вносите -cepdir в файл аргументов, то сокращенный путь
/sphinx обрабатывается неправильно: приходится писать полный путь. Если вы будете прописывать аргумент после команды, то можете использовать сокращенный путь.
-ctl: файл с именами обрабатываемых файлов. Файл goforward.raw мы возьмем из комплекта исходников pocketsphinx (там есть еще пару файлов *.raw — можете распознать и их).
-cepext: расширение обрабатываемых файлов
-adcin: указатель принадлежности обрабатываемого файла к raw.
-hyp: имя файла, в который будет выведен распознанный текст.
Аргументы с путями к файлам моделей указывать обязательно. Помните, что многие параметры заданы по умолчанию (смотрите stderr). Поэтому для работы с файлом *.raw необходимо принудительно указать расширение, иначе будет использован параметр по умолчанию — расширение .mfc (а таких файлов у нас в базовом примере, естественно, нету — будут сыпаться ошибки).
В результате исполнения у нас в файле outname будет следующее содержимое:
Параллельно можете посмотреть, откомпилировать и запустить в каталоге с файлом goforward.raw программку аналогичного назначения на C (пример от разработчиков).
Для проверки на своих примерах я решил не мудрствовать и воспользовался sox (проверьте, установлен ли этот пакет у вас).
Писать звук будем следующим образом (можете почитать man sox ):
— для raw
Окончание записи по Ctrl+C .
У меня sox при этом ругался на невозможность использования частоты дискретизации: can’t set sample rate 16000; using 48000 . Учтите: нагло лжет — на самом деле все в порядке.
Я писал и распознавал raw и wav на различных примерах из подключенных словарей — все распознавалось вполне приемлимо.
Адаптация звуковой модели
Скачиваем по первой ссылке предлагаемые файлы в отдельную директорию, в которой и будем работать.
Теперь надиктуем предложения из файла arctic20.txt по образцу: у вас должно получиться двадцать файлов, названных по порядку согласно схеме arctic_0001.wav . arctic_0020.wav .
Чтобы упростить запись, воспользуемся предложенным скриптом:
Соответственно, чтобы прослушать полученное, выполним:
Скопируем акустическую модель (с которой мы и работали) из /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k в нашу рабочую директорию.
Теперь создадим файлы акустических особенностей (напоминаю: работаем в директории с файлами *.wav).
В результате получаем файлы *.mfc.
Скачиваем экстра-пак (89,0 МБ); файл под названием mixture_weights из него, расположенный в pocketsphinx-extra/model/hmm/en_US/hub4_wsj_sc_3s_8k.cd_semi_5000 помещаем в каталог с акустической моделью.
Также необходимо конвертировать mdef-файл акустической модели в текстовый формат:
Теперь, согласно терминологии гайда по адаптации, соберем накопленные данные. Скопируем утилиту bw из /usr/local/libexec/sphinxtrain/bw в рабочий каталог (перед этим не забудьте установить sphinxtrain!).
Запускаем и видим:
SYSTEM_ERROR: «corpus.c», line 339: Unable to open arctic20.fileids for reading: No such file or directory
Очевидно, правая рука у разработчиков не ведает, что творит левая (про неактуальность части документации я уже не говорю).
Переименовываем в рабочем каталоге файл arctic20.listoffiles в arctic20.fileids
Теперь все работает.
Произведем MLLR-адаптацию (эффективна для ограниченного объема данных в модели):
Эта команда создаст файл адаптационных данных mllr_matrix .
Теперь при распознавании с адаптированной моделью можно добавлять параметр -mllr /path/to/mllr_matrix .
Параллельно произведем другой метод адаптации: MAP.
Сделаем копию модели:
И произведем MAP-адаптацию:
Теперь создадим sendump файл, отличающийся меньшим размером:
Тестирование адаптации
Проверяем (помните, что адаптация не приведет к стопроцентно верному результату: адаптированные модели будут точно так же ошибаться; плюс в том, что они будут делать это реже. Мои вполне наглядные записи были сделаны далеко не с первой попытки: было достаточно записей, где ошибались все модели):
1. Распознавание с помощью базовой модели:
2. Распознавание с помощью модели с MLLR-адаптацией: при указании параметром -mllr пути к моей матрице происходила ошибка сегментирования (копаться я не стал). При распознавании без этой опции результат полностью идентичен результату оригинальной модели.
Впрочем, в мануале заявлено, что MLLR-адаптация лучше всего подходит для непрерывной модели (т.е. для Sphinx4).
3. Распознавание с помощью модели с MAP-адаптацией:
Как можно убедиться, результат полностью идентичен записи. Адаптация реально работает!
Русский язык в Pocketsphinx
Скачаем отсюда русские модели, созданные на voxforge. На разнообразие моделей можно посмотреть здесь и просто в интернетах.
Реализовывать пример голосового управления компьютером мы будем на русском, а значит нам нужны собственная языковая модель и собственный словарь (вероятнее всего, части наших слов в распространенных примерах не будет).
Создание собственной статической языковой модели
Далее создаем словарный файл:
Создаем языковую модель в arpa-формате:
И создаем DMP-модель.
Создание собственного словаря
Тащим с гитхаба утилиты:
Переходим в каталог ./yourdir/text2dict и создаем там текстовый файл my_dictionary с вашим списком слов (каждое новое слово — с нового абзаца).
И вот ваш словарь создан.
Теперь пробуем распознавать слова, присутствующие в словаре (благо, в нашем примере их немного). Не забудьте указать в аргументах собственную языковую модель и словарь — все должно работать. При желании можно произвести адаптацию акустической модели (сразу предупреждаю: при использовании утилиты bw в процессе адаптации для большинства акустических моделей опция -svspec не нужна ).
Использование JavaScript Grammar File вместо статической языковой модели
«|» обозначает условие выбора. Т.е. мы можем сказать «тише» или «закрыть окно». Правда, по сравнению с использованием языковой модели есть один минус: говорить нужно гораздо членораздельнее.
Созданный jsgf-файл указываем с параметром -jsgf (параметр -lm в таком случае не нужен).
Реализация голосового управления
Моей целью не было реализовать крутой интерфейс управления: здесь все будет очень примитивно (если есть желание и возможность, можете посмотреть на заброшенный проект Gnome Voice Control).
Действовать будем следующим образом:
1. Пишем команду, распознаем её.
2. Передаем распознанный текст в файл, в соответствии с ним выполняем команду.
В качестве тестовых команд будем использовать уменьшение и увеличение громкости звука.
Внимательно почитав мануал к sox, я решил оканчивать запись по истечении секунды тишины с порогом тишины в 3.8% (порог явно является сугубо индивидуальным значением и зависит от вашего микрофона и окружающей обстановки).
К сожалению, я не нашел в pocketsphinx_batch параметр вывода только для распознанных слов, поэтому я воспользуюсь инструментом sed :
Эта конструкция удалит из строки вида «наша команда (audio -4023)» пробел перед открывающей скобкой, её саму и все последующее содержимое. В результате мы получим строку вида «наша команда», что нам и нужно.
Вот сам скрипт:
Скрипт в ответ на команды «тише» или «громче» выполняет соответствующие действия с сигнализацией через notify-send.
К сожалению, работать он будет только при запуске из терминала (иначе звук не пишется). Впрочем, представление о голосовом управлении он дает (возможно, вы предложите лучший метод).
Источник