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

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

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

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

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

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

2

Решение

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

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

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

1

Другие решения

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

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

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

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

2