功能设计
使用matlab实现了一个数字语音识别系统,包括训练和识别功能,并通过图形用户界面(GUI)进行交互。用户可以选择包含语音文件的文件夹,然后点击“开始训练”按钮,使用DTW和HMM方法训练模型。
训练完成后,计算并打印每个数字(0-9)的识别率及总识别率。用户还可以选择单个音频文件,分别使用DTW或HMM方法进行识别,并在界面上显示识别结果。特征提取采用MFCC方法,识别率计算函数会遍历每个数字文件夹,进行识别并输出准确率。
0-9音频文件夹
每个文件夹下有10个对应数字的音频文件
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
功能实现概述
- 图形用户界面 (GUI):
- 使用 MATLAB 的
uifigure
创建一个包含两个面板的图形用户界面。 - 面板1:包含选择文件夹、开始训练、使用DTW识别、使用HMM识别的按钮。
- 面板2:包含显示识别结果的区域和退出按钮。
2.文件夹选择:
- 用户通过点击“选择文件夹”按钮选择包含语音文件的文件夹。
- 选择的文件夹路径存储在
folderPath
变量中。
3.模型训练:
- 用户点击“开始训练”按钮,程序读取选定文件夹中的语音文件,提取音频特征,并使用DTW和HMM方法分别训练模型。
- 特征提取使用MFCC(Mel频率倒谱系数)。
- 训练完成后,计算并打印每个数字(0-9)的识别率以及DTW和HMM的总识别率。
4.语音识别:
- 用户点击“使用DTW”或“使用HMM”按钮选择一个音频文件进行识别。
- 程序根据选择的识别方法(DTW或HMM)对选定的音频文件进行识别,并在界面上显示识别结果。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
- 识别率计算:
- 训练完成后,程序会自动对每个数字文件夹中的音频文件进行识别,并计算识别率。
- 识别率计算函数
calculateRecognitionRates
会遍历每个数字文件夹中的音频文件,并使用DTW和HMM模型进行识别,计算并打印每个数字的识别率以及总识别率。
代码功能详细说明
图形用户界面 (GUI) 设计
fig = uifigure('Position',[100 100 600 400],'Name','Speech Recognition'); panel1 = uipanel(fig,'Position',[10 10 280 380],'Title','Training and Recognition'); panel2 = uipanel(fig,'Position',[310 10 280 380],'Title','Recognition Result'); btn_select = uibutton(panel1,'Position',[10 320 260 40],'Text','Select Folder',... 'ButtonPushedFcn',@(btn,event) selectFolder); btn_train = uibutton(panel1,'Position',[10 260 260 40],'Text','Start Training',... 'ButtonPushedFcn',@(btn,event) startTraining); %略..... btn_exit = uibutton(panel2,'Position',[10 20 260 40],'Text','Exit',... 'ButtonPushedFcn',@(btn,event) close(fig));
- 创建包含两个面板的图形用户界面。
- 在面板1中添加文件夹选择按钮、开始训练按钮、使用DTW识别按钮、使用HMM识别按钮。
- 在面板2中添加识别结果标签和退出按钮。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
文件夹选择
function selectFolder folderPath = uigetdir; if folderPath disp(['Selected Folder: ' folderPath]); else disp('No folder selected'); end end
- 用户通过点击按钮选择包含语音文件的文件夹,选择的文件夹路径存储在
folderPath
变量中。
模型训练
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
function startTraining if isempty(folderPath) uialert(fig,'Please select a folder first','Error'); return; end % 略... disp(hmmAccuracy); disp(['DTW Total Accuracy: ', num2str(mean(dtwAccuracy))]); disp(['HMM Total Accuracy: ', num2str(mean(hmmAccuracy))]); end
- 用户点击“开始训练”按钮,程序读取选定文件夹中的语音文件,提取音频特征,并使用DTW和HMM方法分别训练模型。
- 训练完成后,计算并打印每个数字(0-9)的识别率以及DTW和HMM的总识别率。
识别功能
function recognizeDTW if isempty(dtwModel) uialert(fig,'Please train the models first','Error'); return; end [file, path] = uigetfile('*.wav'); if isequal(file, 0) % 略... disp(['Recognition Result: ' result]) lbl_result.Text = ['Recognition Result: ' digit{end}]; end end
用户点击“使用DTW”或“使用HMM”按钮选择一个音频文件进行识别。
程序根据选择的识别方法(DTW或HMM)对选定的音频文件进行识别,并在界面上显示识别结果。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
训练模型函数
function [dtwModel, hmmModel] = trainModels(folderPath) dtwModel = struct; hmmModel = struct; for digit = 0:9 digitFolder = fullfile(folderPath, num2str(digit)); fieldName = ['digit' num2str(digit)]; dtwModel.(fieldName) = []; % 略... end end end
- 遍历每个数字文件夹,读取音频文件,提取音频特征(MFCC),并分别用DTW和HMM方法训练模型。
识别函数
function result = recognizeAudioDTW(dtwModel, audioFile) [audioData, fs] = audioread(audioFile); features = extractFeatures(audioData, fs); minDist = Inf; result = 'None'; for digit = 0:9 % 略... end end end >👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈 function result = recognizeAudioHMM(hmmModel, audioFile) [audioData, fs] = audioread(audioFile); features = extractFeatures(audioData, fs); % 略... % 略... end end end end
recognizeAudioDTW
:使用DTW方法识别音频文件。recognizeAudioHMM
:使用HMM方法识别音频文件。
特征提取函数
function features = extractFeatures(audioData, fs) coeffs = mfcc(audioData, fs, 'NumCoeffs', 13); features = mean(coeffs); end
- 使用MFCC提取音频特征。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
动态时间规整 (DTW) 函数
function dist = dtw(seq1, seq2) dist = sqrt(sum((seq1 - seq2).^2)); end
- 计算两组特征序列之间的欧几里得距离。
隐马尔可夫模型 (HMM) 函数
function prob = hmm(seq1, seq2) prob = -sum((seq1 - seq2).^2); end
- 计算两组特征序列之间的相似性。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
计算识别率函数
function [dtwAccuracy, hmmAccuracy] = calculateRecognitionRates(folderPath, dtwModel, hmmModel) dtwAccuracy = zeros(1, 10); hmmAccuracy = zeros(1, 10); for digit = 0:9 % 略... end dtwAccuracy(digit + 1) = correctDTW / numTests; hmmAccuracy(digit + 1) = correctHMM / numTests; end end
- 遍历每个数字文件夹中的音频文件,使用DTW和HMM模型进行识别,计算并打印每个数字的识别率以及总识别率。
功能展示
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
运行代码,显示主界面
选择文件夹,进行音频训练,只选择到上层文件夹即可。
点击开始训练,完成训练
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
使用DTW算法识别数字
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈
识别数字结果如下:
使用HMM识别:
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “数字音” 获取。👈👈👈