总结一下近两周做的事情。
目标:有3个说话人,以4种不同的情感,分别说相同的200句话,建立模型供语音情感识别使用
过程:1、选择建立模型需要的特征及可用工具
2、处理数据
3、算法
具体内容:
1、建立模型:对3个人分别建立model,这就需要分别准备这3个人的训练数据
提取特征:先提取mfcc,使用HTK工具
训练:采用libsvm工具箱
2、仅给出对于 people1 的数据处理过程:
for i in(情感1,情感2,情感3,,情感4):
(1)把200句话分为190 + 10,前190句作为训练集,后10句作为测试集
(2)分别对190 +10句wav文件提取mfcc特征(190句的mfcc可以放在一个txt里,后10句因为要做测试用,所以分别放在10个txt里)
注:HTK提取出的mfcc文件显示为2进制,需自己写代码转换成10进制表示
(3)处理以上 11 个txt,需要得到这样的格式:[lable]1:[feature1] 2:[feature2] …. n:[featuren]
例如(情感1可以这样处理): 1 1:0.324 2:0.265 3:0.544:0.34 …. 39:0.495
情感2可定义label为 2,情感3定义label为 3,情感4定义label为 4。
(4)把4种情感的 4*190=760 句wav的mfcc特征写入一个txt,作为 train_data.txt
(5)把4种情感的 4*10=40 句wav的40个mfcc文件放在一起,可标号从1.txt 到 40.txt
3、(用python写的一些代码)
libsvm的 python 文件夹里,有svmutil.py 及 svm.py文件,看下代码,知道可以用于train和test
得到训练模型:people1.model
把训练集里的1.txt 至 40.txt 分别进行测试,譬如 1.txt测试的时候,是按帧来测试得到每帧的label,统计最多的label所属作为 1.txt 的类别即可。
训练结果,正确率高达 98.33% ,低至 83.33%(原因在于自己抽了一部分数据进行的训练,而不是全部的数据,可能抽的不好或者数据冗余)。
过程总结:1、处理数据超级麻烦,主要原因还是自己缺乏实践动手经验。
2、编程能力不足,本该用C++写的代码,最终拿python敲了,还写的很累赘
3、思路!思路!思想很重要
现在very tired , 回头再写
又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。