iOS / C: алгоритм обнаружения фонем
Я ищу алгоритм, чтобы определить, соответствует ли аудиовход в реальном времени одной из 144 заданных (и удобно различимых) фонемных пар.
Предпочтительно самый низкий уровень, который делает работу.
Я разрабатываю радикальное / экспериментальное программное обеспечение для обучения музыке для iPhone / iPad.
Моя музыкальная система состоит из 12 согласных фонем и 12 гласных фонем, показанных здесь. Это дает 144 возможных пары фонем. Студент должен петь правильную пару фонем "laa duu bee" и т. Д. В ответ на визуальный стимул.
Я провел много исследований в этой области, и, похоже, лучше всего было бы использовать одну из оболочек Sphinx для iOS ( приложение для iPhone ›Добавить распознавание голоса - лучший источник информации, который я нашел). Однако я не понимаю, как бы я адаптировал такой пакет. Может ли кто-нибудь с опытом использования одной из этих технологий дать краткое изложение шагов, которые потребуются?
Будет ли обучение необходимо пользователю? Я бы не подумал, поскольку это такая элементарная задача по сравнению с полными языковыми моделями тысяч слов и гораздо большей и более тонкой базы фонем. Однако было бы приемлемо (не идеально), чтобы пользователь обучил 12 пар фонем: { consonant1+vowel1, consonant2+vowel2, ..., consonant12+vowel12 }. Полный 144 будет слишком обременительным.
Есть ли более простой подход? Я чувствую, что использование полнофункционального распознавателя непрерывной речи использует кувалду, чтобы сломать орех. Было бы гораздо элегантнее использовать минимальные технологии, которые могли бы решить проблему.
Так что на самом деле я ищу любую программу с открытым исходным кодом, которая распознает фонемы.
PS Мне нужно решение, которое работает в режиме реального времени. поэтому, даже когда они поют ноту, сначала она мигает, чтобы проиллюстрировать, что она подобрала пару фонем, которая была спета, а затем она светится, чтобы показать, поют ли они правильную высоту ноты.
4 ответа
Если вы ищете распознаватель с открытым исходным кодом на уровне телефона, то я бы порекомендовал HTK. Очень хорошая документация доступна с этим инструментом в виде книги HTK. Он также содержит целую главу, посвященную созданию распознавателя речи в режиме реального времени на уровне телефона. Из приведенного выше постановки проблемы мне кажется, что вы можете переделать этот пример в свое собственное решение. Возможные подводные камни:
Поскольку вы хотите сделать устройство распознавания уровня телефона, данные, необходимые для обучения моделей телефонов, будут очень высокими. Кроме того, ваша учебная база должна быть сбалансирована с точки зрения распределения телефонов.
Создание независимой от динамика системы потребует данных от нескольких ораторов. И многое из этого тоже.
Поскольку это программа с открытым исходным кодом, вам также следует проверить информацию о лицензировании для получения дополнительной информации о доставке кода. Хорошей альтернативой может быть использование записывающего устройства на телефоне, а затем отправка записанного сигнала по каналу данных на сервер для распознавания, что-то вроде того, что делает Google.
У меня есть небольшой опыт работы с этим типом обработки сигналов, и я бы сказал, что это, вероятно, не тот тип конечного вопроса, на который можно ответить однозначно.
Стоит отметить, что, хотя вы можете ограничить фонемы, которые вас интересуют, пространство возможностей остается неизменным (то есть бесконечность). Обучение пользователей может немного помочь алгоритмам, но полезное обучение занимает довольно много времени, и кажется, что вы слишком против этого.
Использование Sphinx, вероятно, является отличным началом этой проблемы. Я сам не слишком далеко продвинулся в библиотеке, но, думаю, вы сами будете работать с ее исходным кодом, чтобы получить именно то, что вам нужно. (Ура для открытого кода!)
... используя кувалду, чтобы сломать орех.
Я бы не назвал вашу проблему орехом, я бы сказал, что это больше похоже на зверя. Это может быть зверь, отличающийся от распознавания речи на естественном языке, но все же это зверь.
Всего наилучшего в решении ваших проблем.
Не уверен, поможет ли это: посмотрите OpenEarsLanguageModelGenerator
, OpenEars использует Sphinx и другие библиотеки.
Эта страница ссылается как на видео-демо YouTube, так и на источник Github.
Я предполагаю, что было бы еще много работы по приведению его в форму, которую я ищу, но она также определенно выполняет большую часть работы.