Голосовой помощник для линукс минт

Голосовой ассистент. Что доступно?

Не всегда есть возможность трогать клавиатуру и мышь (руки в масле\пыли\стружке). Нужен голосовой ассистент, который:

* Может быть активен в фоне, слушая команды и активируясь по заданному слову\фразе
* Иметь возможность выполнить кастомно заданную команду (типа «активируй узел 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-специфичных вещи которых нету в следующих версиях.

Читайте также:  Как узнать включена гибернация или нет windows 10

сделай /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.

Читайте также:  Infernal twin для windows

Описание и установка

Не забудьте после установки выполнить:

Для работы с /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.

Читайте также:  Mac software on windows computer

Сделаем копию модели:

И произведем 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.
К сожалению, работать он будет только при запуске из терминала (иначе звук не пишется). Впрочем, представление о голосовом управлении он дает (возможно, вы предложите лучший метод).

Источник

Оцените статью