2016-09-28 31 views
2

我正在使用烏爾都語(在巴基斯坦,印度,孟加拉國語言中使用的語言)將語音識別轉換爲烏爾都語的語音。到目前爲止,我什麼也沒做,但只是找到了meyda JavaScript庫從數據框中提取mfccs。一些文件說,對於ASR來說,需要12個或13個mfccs中的26個。在測試期間,我在wav擴展名的文件夾中有46個音素(/ b /,/ g /,/ d/...)。在其中一個音素上運行meyda進程後,它會爲每個音素創建4到5個幀,其中每個幀包含前12個值中的每個幀。由於不到10個聲望,帖子圖片被禁用。但您可以在以下鏈接上查看圖片。該圖像包含7個音素/ b /幀。每幀包括13 mfccs。紅色長垂直線值是438,其它或48,38等 http://realnfo.com/images/b.png接下來的步驟是在語音識別網絡中使用mfccs

我的問題是,是否我需要在數據庫中的這些幀(的MFCC)保存爲預定義的音素爲/ B /和相同的I對所有其他音素進行綁定,然後綁定麥克風,meyda將提取每幀的mfccs,並且我將使用動態時間規整對將提取的幀mfcc與預定義的幀mfccs匹配的javascript進行編程。最後將獲得特定音素的最小距離。

mfccs之後的專業方式是HMM和GMM,但我不知道如何處理。我研究了很多關於HMM和GMM的文檔,但都是浪費。

回答

2

這裏是Meyda的合着者。

這似乎是一個非常困難的用例。如果您已經知道如何將緩衝區分成音素,則可以在這些緩衝區上運行MFCC提取,並使用k Nearest Neighbour(或更好的分類算法)來實現我認爲合理的成功率。

草圖:

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可能會產生更穩健的結果。這當然是你必須玩弄和試驗以找到最佳解決方案的東西。

希望有幫助!如果你開源代碼,我很樂意看到它。

+0

合着者#2在這裏。只是補充說,如果你還沒有,當我們改進MFCC實施時,你應該拉最新的。此外,您可能想嘗試在http://dsp.stackexchange.com/上詢問,因爲它們可能會爲您提供更多建議。 – nevos