Создание пользовательских голосовых команд (GNU / Linux)

Ищу советы для личного проекта.

Я пытаюсь создать программу для создания настраиваемых голосовых команд. Цель состоит в том, чтобы позволить пользователю / мне записывать некоторые аудиоданные (2/3 секунды) для определения команд / макросов. Затем, когда пользователь будет говорить (записывать те же аудиоданные), команда / макрос будет выполняться. Программное обеспечение должно уметь обнаруживать команду менее чем за 1 секунду времени обработки на недорогом компьютере (например, RaspberryPi).

Я уже искал двумя способами: - Распознавание речи (CMU-Sphinx, Julius, simon): есть хорошие решения с открытым исходным кодом, но им часто требуются большие файлы базы данных, а распознавание речи - это не совсем то, что я пытаюсь сделать. Распознавание речи может потреблять слишком много энергии для небольшой функции. - Отпечаток аудио (Chromaprint -> http://acoustid.org/chromaprint): похоже, почти то, что я ищу. Принцип состоит в том, чтобы создать отпечаток пальца из необработанных аудиоданных, а затем сравнить отпечатки пальцев, чтобы определить, могут ли они быть идентичными. Однако этот вид программного обеспечения / библиотеки, похоже, предназначен для идентификации песен (как известные программы на смартфонах): я пытаюсь настроить хороший «компаратор», но я думаю, что у меня плохой путь.

Знаете ли вы, что какое-то специальное программное обеспечение или фрагмент кода делают что-то подобное?

Любое предложение будет оценено.


person Neozaru    schedule 08.03.2013    source источник


Ответы (2)


Отпечаток песни не является хорошей идеей для этой задачи, потому что время выполнения команд может варьироваться, а отпечаток требует точного совпадения времени. Однако очень легко реализовать сопоставление с алгоритмом DTW для временных рядов и функций, извлеченных с помощью библиотеки CMUSphinx Sphinxbase. См. Статью в Википедии о DTW.

http://en.wikipedia.org/wiki/Dynamic_time_warping

http://cmusphinx.sourceforge.net/wiki/download

person Nikolay Shmyrev    schedule 09.03.2013
comment
Благодарю за ваш ответ. Однако я не могу найти слов DTW или Dynamic Time Warping в библиотеке Sphinxbase. Я не понимаю - person Neozaru; 09.03.2013
comment
Вы можете использовать sphinxbase для извлечения функций (двумерных массивов значений MFCC), которые надежны по сравнению с DTW. Sphinxbase не имеет реализации DTW, вам нужно реализовать DTW самостоятельно. Для этого вы можете просто скопировать код Википедии, это простая функция из 30 строк. - person Nikolay Shmyrev; 09.03.2013

У меня был более-менее похожий проект, в котором я намеревался отправлять голосовые команды роботу. Программа распознавания речи слишком сложна для такой задачи. Я использовал реализацию БПФ на C ++ для извлечения компонентов Фурье дискретизированного голоса, а затем создал гистограмму основных частот (частот, на которых целевая голосовая команда имеет самые высокие амплитуды). Я пробовал два подхода:

  1. Сравнение сходства гистограммы данной голосовой команды с гистограммой, сохраненной в памяти, для определения наиболее вероятной команды.

  2. Использование машины опорных векторов (SVM) для обучения классификатора распознаванию голосовых команд. Я использовал LibSVM, и результаты были значительно лучше, чем при первом подходе. Однако одна проблема с методом SVM заключается в том, что для обучения вам нужен довольно большой набор данных. Другая проблема заключается в том, что, когда дается неизвестный голос, классификатор все равно выводит команду (что, очевидно, является неправильным обнаружением команды). Этого можно избежать с помощью первого подхода, когда у меня был порог для меры сходства.

Я надеюсь, что это поможет вам реализовать собственное программное обеспечение, активируемое голосом.

person Rasoul    schedule 18.10.2013