美文网首页语音识别
python+keras实现语音识别

python+keras实现语音识别

作者: 南方朗郎 | 来源:发表于2018-11-02 17:43 被阅读513次

本文最先发布在我的CSDN上

市面上语音识别技术原理已经有很多很多了,然而很多程序员兄弟们想研究的时候却看的头大,一堆的什么转mfcc,然后获取音素啥的,对于非专业音频研究者或非科班出生的程序员来说,完全跟天书一样。

最近在研究相关的实现,并且学习了keras和tensorflow等。用keras做了几个项目之后,开始着手研究语音识别的功能,在网上下载了一下语音的训练文件,已上传到了百度云盘:https://pan.baidu.com/s/1Au85kI_oeDjode2hWumUvQ

目录如下,文件夹名就是里面的语音的标签,语音由很多不同年龄性别的人发音收集而来

拿到一个语音文件之后需要先转mfcc,这个操作很简单,不需要什么高深的内功。用python写一段函数专门用来获取语音文件的fmcc值。

参数为单个文件在磁盘的位置,mfcc是一堆的正数和负数组成的数组:

为了在训练的时候避免损失函数应为负数导致输出结果相差太大,需要把原始的mfcc全部转为正数,直接平方后在开方就是正值了。

我们可以把每个音频的mfcc值当做对应的特征向量,然后进行训练,我这里为了测试速度,取了seven 和 stop 两个语音类别来进行训练和识别,每个大概2700多个文件。并且分别从两个文件夹中剪切出来100个当做测试集,并每样拿出5个当做后面的试验集。

test1 中放置的是 100个 seven 语音,test2 中放置的是100个 stop 语音,trunk中放的是5个seven 和5个stop 语音。

如图1开头的都是seven , 2开头的都是stop 。

训练之前需要先读取数据创建数据集和标签集:

拿到数据集之后就可以开始进行神经网络的训练了,keras提供了很多封装好的可以直接使用的神经网络,我们先建立神经网络模型

训练之后的结果:

两个类型的文件一个4500多个,我本机使用CPU训练大概用时20多秒。

最后显示结果准确率为0.9050.也就是90.5%的准确率,这里可以加大数据集的数量和调参来加大准确率。

最后保存模型到文件:

保存之后会在文件夹中生成一个文件【95M】:

现在训练的模型已经有了,我们开始使用trunk中的文件进行试验:

先加载之前训练的模型:

然后获得当前需要试验的文件的mfcc。并且将数据封装成和训练时一样的维度。并且使用模型的predict函数输出结果:

结果输出:

可以看出结果是一个2个数的数组,里面返回的对应类别相似度,也就是说哪一个下标的值最大,就跟那个下标对应的标签最相似。

之前训练的时候,标签的集是:[seven  , stop]

所以如图下标1的值达到了89.9%的相似度。

我们把试验文件换成 1b.wav

结果输出:

本机的试验的识别速度在2秒内。

本文相关的代码已上传github:https://github.com/BenShuai/kerasTfPoj/tree/master/kerasTfPoj/ASR

相关文章

网友评论

    本文标题:python+keras实现语音识别

    本文链接:https://www.haomeiwen.com/subject/ryvcxqtx.html