u014691453的专栏

总结一下近两周做的事情。

目标:有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 , 回头再写

又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。

u014691453的专栏

相关文章:

你感兴趣的文章:

标签云: