LINUX.ORG.RU

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

 ,


4

9

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

* Может быть активен в фоне, слушая команды и активируясь по заданному слову\фразе
* Иметь возможность выполнить кастомно заданную команду (типа «активируй узел 1443», где «активируй узел» выполнит скрипт node.sh, а 1443 пойдет в параметр.
* Работать автономно от сети. Хранилище для настроенного локального анализатора можно выделить до 100 ГБ.
* Давать аудиоподтверждение принятой команды (не всегда есть возможность посмотреть на экран).

Если надо будет долго обучать под распознавание своего голоса - норм.

Что есть из доступного? Если опенсорс - еще лучше.

В теги добавляю пистон, обычно по этим вопросам его долбят.

★★★★★
Ответ на: комментарий от Strangeman

Есть легче?

Да я вообще альтернатив то не знаю. Так что хз.

anonymous
()
Ответ на: комментарий от Strangeman

А здесь какое-то колдунство!

Файл

./cvoicecontrol/mixer.c

строка 224

devices->name = malloc(sizeof ("mixer"));

тут и падает… какого черта? о_О

но , блин, если я вписываю следующей строкой проверку

devices->name = malloc(sizeof ("mixer"));
if(! devices->name) printf("err!\n");

оно ошибки не выдает, а тупо запускается!


Я даже не знаю как это так... это против правил... вот дак хрень... пошел спать...


anonymous
()

Если устроит библиотека и не боишься написать полсотни строк кода, то тебе нужен pocketsphinx. Штука простая, пробовал с английским.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

if(! devices->name)

Какая то оптимизация в твоём компиляторе берёт на сабя слишком много, if её останавливает.

anonymous
()
Ответ на: комментарий от anonymous

Попробовал

if( devices->name) printf("ok!\n");

все работает

Более того, даже просто без проверки

 printf("ok!\n");

не падает и запускается…

Видимо задачка для олимпиады по программированию…

anonymous
()
Ответ на: комментарий от anonymous

Более того, даже просто без проверки

Не совсем. Это связано с комбинацией malloc+glob. Уже не первый раз натыкаюсь на «чудеса» при оптимизации.

anonymous
()
Ответ на: комментарий от anonymous

Почему бы нет? Ну да хрен с ним, можно и без этого обойтись. Время сэмпла ограничено? При попытке записать фразу из нескольких слов пишется только конец.

Strangeman
()
Ответ на: комментарий от Strangeman

Время сэмпла ограничено?

Пока ковырял, никаких ограничений не встречал. Мож пропустил? Хз.

anonymous
()
Ответ на: комментарий от Strangeman

Мда… Как бы заработало, более того, при первом запуске почти исправно отрабатывало одну команду. Почти потому, что много ложных срабатываний. Но что-то пошло не так - с какого-то момента по непонятной причине вис после отработки команды. Т.е. первый раз срабатывает, после нет и курсор перестает моргать. Действительно с лёгкостью я погорячился - грузит одно ядро на 90%.

Strangeman
()
Ответ на: комментарий от Strangeman

грузит одно ядро на 90%.

И с распараллеливанием тоже лучше не играться. Я просто не представляю, как будет разруливаться доступ к /dev-ам при параллельном исполнении.

anonymous
()
Ответ на: комментарий от Strangeman

с лёгкостью я погорячился

Была идея пользовать dct (то бишь vorbis). Это вроде позволит сократить объем распознаваемых данных. Но здесь курить и курить не по-детски.

anonymous
()
Ответ на: комментарий от Strangeman

По-уму, он должен незначительно грузить одно ядро в idle state, и заметно нагружать лишь при повышении уровня сигнала выше «Silence Level». Попробуй Silence Level и Stop Level в config увеличить, может он пытается распознать всё подряд.

Я всё-же наверно потихоньку перепилю его под ALSA - https://github.com/stanson-ch/cvoicecontrol Вроде даже уже шевелится, кроме того всякие опции добавляю, для отладки verbose и пр. Пока для «искаробочного» пользования не готов, но если не терпится, то поддержка ALSA там в общем-то уже добавлена, правда без бубна будет default девайс использовать. По-хорошему, там дофига чего можно оптимизировать, а если вообще весь матан в GPU (OpenCL, например) вынести, то жрать процессор вообще не будет.

На самом деле, очень простая штуковина, и метод распознавания простой как 3 копейки - просто находит кратчайший вектор (по умолчанию - 16-тимерный) от сказанной команды до образцов в процессе dynamic time warping. Киллер-фича - оно реагирует только на твой голос, а не на всех подряд, как все эти модные облачные AI распознавалки.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от anonymous

Была идея пользовать dct (то бишь vorbis). Это вроде позволит сократить объем распознаваемых данных.

Не получится. Там FFT и всё такое, а сжатие всё попортит. Кроме того, там wav сохраняется чисто для приличия, на самом деле для распознавания используются feature vectors для каждого фрейма полученные посредством FFT из аудиосигнала. Один фрейм (256 signed short) даёт 16 float. Так что там и так уже всё пожатое.

Stanson ★★★★★
()
Ответ на: комментарий от anonymous

Ты еще от goto не избавился

А я и не собираюсь от них избавляться. Более того, я уже добавил несколько и ещё добавлю по необходимости. Не вижу вообще ничего плохого ни в goto, ни в switch. Не нравится - флаг в руки, барабан на шею, сырцы есть, никто не запрещает запилить так, как хочется, да хоть на расте с го переписывай.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от anonymous

Для речи многовато. Хотелось бы поменьше.

А это не для минимального размера, это для распознавания.

Можно сделать меньше, передя на 8bit/8000kHz, но точность пострадает.

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

Не вижу вообще ничего плохого ни в goto, ни в switch

Твоя правда. А мне не нравится. «В глазах раздваивается» от этих goto.

anonymous
()
Ответ на: комментарий от anonymous

А мне не нравится когда много вложенных if. Вкусовщина, ибо на выходе всё равно одно и то же получится. :)

Stanson ★★★★★
()
Ответ на: комментарий от Stanson

А это не для минимального размера, это для распознавания.

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

anonymous
()
Ответ на: комментарий от Stanson

передя на 8bit/8000kHz

Пробовал подобную дискретизацию. Не оправдывает себя ни по нагрузке, ни по «цена/качество».

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.