日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#基于NAudio的声音识别(二)——MFCC+SVM/BP

發布時間:2023/12/8 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#基于NAudio的声音识别(二)——MFCC+SVM/BP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

書接上文,切割后的文件轉換特征為MFCC(細節不表了,網搜的代碼)。聲音的特征和識別最好的組合絕對不是MFCC+SVM(后面我會講為什么),我只是怎么怎么方便怎么來,看到這的準備做聲音識別的同學請果斷變道。

有了特征值就可以作為訓練素材了,Emgucv版本更新快,不同版本的分類器參數設置方式不一樣,這可以參見我以前的類似博客。

以下將走過的坑分享一下:

1.不定長聲音的MFCC也不定長(廢話),解決不定長,我用了人工指定的方式,即指定MFCC特征的個數,多的丟,少的補零。僅個人實踐表明,特征越多分類效果越好,所以,多補零吧。

string[] MFCCa = MFCCs.Split(',');for (int j = 0; j < chanum; j++){if (j > MFCCa.Length - 2)//存的時候多了個“,”,所以回退一位{trainDate[i, j] = 0;}else{trainDate[i, j] = Convert.ToSingle(MFCCa[j]);}trainLab[i, 0] = 1;}

2.Emgucv3.×以上的訓練結果文件(.XML)的讀存請自行修改下,直接save和load似乎不行。半公開的秘密,代碼如下:

private static void saveSVMtoFile(SVM model,String path){if (File.Exists(path))File.Delete(path);FileStorage fs = new FileStorage(path, FileStorage.Mode.Write);model.Write(fs);fs.ReleaseAndGetString();}private static SVM loadSVMtoFile(String path){SVM svm = new SVM();FileStorage fs = new FileStorage(path, FileStorage.Mode.Read);svm.Read(fs.GetRoot());fs.ReleaseAndGetString();return svm;}

3.Emgucv的SVM和BP之間細微的差別

本以為只是改改訓練器,幾行代碼的事情,但報了一堆錯,全是小細節。

3.1 SVM的分類標簽可以是int或者float,但BP一定一定要是float

Matrix<float> trainDate = new Matrix<float>(allnum, chanum);Matrix<int> trainLab = new Matrix<int>(allnum,1); Matrix<float> trainData = new Matrix<float>(allnum, chanum);Matrix<float> trainClasses = new Matrix<float>(allnum, 1);

3.2 SVM可以直接給出預測結果(即標簽),BP給出的不知道是什么(大概是到你定的標簽范圍內的落點,我定了1和-1,但有時候超出了1和-1,所以很奇怪,有真懂的同學留言教我一下),還要自己判斷一下。

Matrix<float> preDate = new Matrix<float>(1, chaNum);getPerDate(preDate, OutfileName[j], chaNum);float kinds=svm.Predict(preDate); Matrix<float> preDate = new Matrix<float>(1, chaNum);Matrix<float> prediction = new Matrix<float>(1, 1);getPerDate(preDate, OutfileName[j], chaNum);network.Predict(preDate, prediction);float kinds = prediction.Data[0, 0];

3.3 SVM(線性核函數)+MFCC我做出來50%上下,幾乎沒什么意義。BP效果不錯,起碼70以上,一般水準在80%上下。


悲傷的補一句,樣本數量還可以且分類數量很小的情況下,最短路徑的效果其實很好。

新開博客,目的為學習交流,本人QQ:273651820。


總結

以上是生活随笔為你收集整理的C#基于NAudio的声音识别(二)——MFCC+SVM/BP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。