Следующие шаги, которые нужно сделать с mfccs, в веб-системе распознавания голоса

Я работаю над распознаванием голоса на урду (язык, на котором говорят в Пакистане, Индии и Бангладеш), чтобы перевести речь урду в слова урду. До сих пор я ничего не делал, а просто нашел библиотеку javascript meyda для извлечения mfccs из фреймов данных. В каком-то документе сказано, что для ASR нужны первые 12 или 13 mfcc из 26. Во время теста у меня есть отдельные 46 фонем (/b/, /g/, /d/...) в папке с расширением wav. После запуска процесса meyda на одной из фонем создается от 4 до 5 фреймов для каждой фонемы, где каждый фрейм содержит mfcc для каждого из первых 12 значений. Из-за менее 10 репутации изображения в постах отключены. но вы можете изображение по следующей ссылке. Изображение содержит 7 кадров фонемы /b/. каждый кадр включает 13 mfcc. Красная длинная вертикальная линия имеет значение 438, другие или 48, 38 и т. д. http://realnfo.com/images/b.png

Мой вопрос заключается в том, нужно ли мне сохранять эти кадры (mfccs) в базе данных как предопределенную фонему для /b/ и то же самое я делаю для всех остальных фонем, а затем привязываю микрофон, мейда будет извлекать mfccs для каждого кадра, и я запрограммирует javascript, что извлеченный кадр mfcc будет сопоставляться с предопределенными кадрами mfcc с помощью динамического искажения времени. И в конце получим наименьшее расстояние для конкретной фонемы.

Профессиональный способ после mfccs - это HMM и GMM, но я не знаю, как с этим бороться. Я изучил так много документов о HMM и GMM, но зря.


person shahid    schedule 28.09.2016    source источник


Ответы (1)


соавтор Мейда здесь.

Это кажется довольно сложным вариантом использования. Если вы уже знаете, как разделить буферы на фонемы, вы можете запустить извлечение MFCC для этих буферов и использовать k ближайший сосед (или какой-нибудь лучший алгоритм классификации) для того, что, как я полагаю, было бы разумным показателем успеха.

Грубый набросок:

const Meyda = require('meyda');
// I can't find a real KNN library because npm is down.
// I'm just using this as a placeholder for a real one.
const knn = require('knn');
// dataset should be a collection of labelled mfcc sets
const nearestPhoneme = knn(dataset);
const buffer = [...]; // a buffer containing a phoneme
let nearestPhonemes = []; // an array to store your phoneme matches
for(let i = 0; i < buffer.length; i += Meyda.bufferSize) {
  nearestPhonemes.push(nearestPhoneme(Meyda.extract('mfcc', buffer)));
}

После этого цикла for NearestPhonemes содержит массив лучших предположений фонем для каждого кадра аудио. Затем вы можете выбрать наиболее часто встречающуюся фонему в этом массиве (режим). Я также предположил бы, что усреднение mfccs по всему кадру может дать более надежный результат. Это, безусловно, то, с чем вам придется поиграть и поэкспериментировать, чтобы найти наиболее оптимальное решение.

Надеюсь, это поможет! Если вы откроете исходный код своего кода, я бы хотел его увидеть.

person Hugh Rawlinson    schedule 21.10.2016
comment
Соавтор №2 здесь. Просто добавлю, что если вы еще этого не сделали, вам следует получить последнюю версию, поскольку мы улучшили реализацию MFCC. Кроме того, вы можете попытаться задать вопрос на dsp.stackexchange.com, поскольку там могут быть дополнительные советы для вас. - person nevos; 21.10.2016