本文所用文件的链接

链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ
提取码:p57s

语音识别

语音识别可以实现通过一段音频信息(wav波) 识别出音频的内容.

通过傅里叶变换, 可以将时间域的声音分解为一系列不同频率的正弦函数的叠加. 通过频率谱线的特殊分布, 建立音频内容与文本之间的对应关系, 以此作为模型训练的基础.

语音识别

梅尔频率倒谱系数(MFCC) 描述了与声音内容密切相关的13个特殊频率所对应的能量分布. 那么我们就可以使用梅尔频率倒谱系数(MFCC)矩阵作为语音识别的特征. 基于隐马尔科夫模型进行模式识别, 找到测试样本最匹配的声音模型, 从而识别语音内容.

  1. 准备多个声音样本作为训练数据. 并且为每个音频都标明其类别.
  2. 读取每一个音频文件, 获取音频文件的mfcc矩阵.
  3. 以mfcc作为训练样本, 进行训练.
  4. 对测试样本进行测试. (基于隐马模型)

MFCC相关API:

import scipy.io.wavfile as wf
import python_speech_features as sfsample_rate, sigs = wf.read('../xx.wav')
mfcc = sf.mfcc(sigs, sample_rate)

案例: MFCC提取

"""
MFCC提取
"""
import scipy.io.wavfile as wf
import python_speech_features as sf
import matplotlib.pyplot as mpsample_rate, sigs=wf.read('../ml_data/filter.wav')
mfcc = sf.mfcc(sigs, sample_rate)
print(mfcc.shape)mp.matshow(mfcc.T, cmap='gist_rainbow')
mp.title('MFCC')
mp.ylabel('Features', fontsize=14)
mp.xlabel('Samples', fontsize=14)
mp.tick_params(labelsize=10)
mp.show()


隐马尔科夫模型相关API:

import hmmlearn.hmm as hl
# 构建隐马模型
# n_components: 用几个高斯函数拟合样本数据
# covariance_type:使用相关矩阵辅对角线进行相关性比较
# n_iter: 最大迭代上限
model = hl.GaussianHMM(n_components=4, covariance_type='diag', n_iter=1000)
model.fit(mfccs)
# 通过训练好的隐马模型  验证音频mfcc的得分
# 匹配度越好, 得分越高
score = model.score(test_mfcc)

案例:

"""
语音识别
"""
import os
import numpy as np
import scipy.io.wavfile as wf
import python_speech_features as sf
import hmmlearn.hmm as hldef search_files(directory):directory = os.path.normpath(directory)# {'apple':[dir,dir,dir], 'banana':[dir..]}objects = {}#当前目录, 当前目录子目录, 文件列表for curdir,subdirs,files in \os.walk(directory):for file in files:if file.endswith('.wav'):label = curdir.split(os.path.sep)[-1]if label not in objects:objects[label] = []path = os.path.join(curdir, file)objects[label].append(path)return objectstrain_samples = \search_files('../ml_data/speeches/training')# 整理训练集, 把每一个类别中的音频的mfcc
# 摞在一起, 基于隐马模型开始训练.
train_x, train_y = [], []
for label, filenames in train_samples.items():mfccs = np.array([])for filename in filenames:sample_rate, sigs = wf.read(filename)mfcc = sf.mfcc(sigs, sample_rate)if len(mfccs) == 0:mfccs = mfccelse:mfccs = np.append(mfccs, mfcc, axis=0)train_x.append(mfccs)train_y.append(label)# 基于隐马模型进行训练, 把所有类别的模型都存起来
# 一共7个类别循环7次
models = {}
for mfccs, label in zip(train_x, train_y):model = hl.GaussianHMM(n_components=4, covariance_type='diag', n_iter=1000)models[label] = model.fit(mfccs)# 读取测试集中的文件, 使用每个模型对文件进行
# 评分, 取分值大的模型对应的label作为预测类别
test_samples = \search_files('../ml_data/speeches/testing')# 整理测试集, 提取每一个文件的mfcc
test_x, test_y = [], []
for label, filenames in test_samples.items():mfccs = np.array([])for filename in filenames:sample_rate, sigs = wf.read(filename)mfcc = sf.mfcc(sigs, sample_rate)if len(mfccs) == 0:mfccs = mfccelse:mfccs = np.append(mfccs, mfcc, axis=0)test_x.append(mfccs)test_y.append(label)# 使用7个模型, 对每一个文件进行预测得分.
pred_test_y = []
# test_x一共7个样本, 遍历7次, 每次验证1个文件
for mfccs in test_x:best_score, best_label = None, Nonefor label, model in models.items():score = model.score(mfccs)if (best_score is None) or \(best_score < score):best_score, best_label=score,labelpred_test_y.append(best_label)print(test_y)
print(pred_test_y)

python做语音识别相关推荐

  1. python离线语音识别_Python实现语音识别和语音合成功能

    声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移. 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布, ...

  2. python可以给你干什么-你最想用python做什么?python到底能用来做什么?

    我们知道python的应用前景很广阔,似乎哪个领域他都可以涉足,但是python真的在哪里都得心应手吗?我们今天就来看看这个问题: 如果你想学Python,或者你刚开始学习Python,那么你可能会问 ...

  3. 基于 python 的语音识别 API 调用

    腾讯 AI 开放平台 开放了语音.图像等多种 AI 功能接口.本文尝试基于 python 完成对语音识别接口的本地调用. 1. 准备工作 API 调用需要身份认证.我们首先需要注册并获得 AppID ...

  4. “晓白”学python-科普篇(2)-人们都用python做什么?

    上一小节里面,老袁给晓白讲了python是什么,python的由来,发展历程,崛起和python的特点.这一小节里面,老袁会告诉晓白人们都用python来做什么. "我刚刚说了,python ...

  5. 用Python做信号处理

    用Python做信号处理 声明:本文中设计的知识和代码大部分来自:芥末的无奈的博客_CSDN博客-音频处理,c++,keras领域博主 以及 凌逆战 - 博客园 (cnblogs.com) 两位大神所 ...

  6. 你到底可以用Python做什么?以下是Python的3个主要应用程序。

    导读:如果你想学Python,或者你刚开始学习Python,那么你可能会问:"我能用Python做什么?" 这个问题不好回答,因为Python有很多用途. 但是随着时间,我发现有P ...

  7. 你到底能用Python做什么?下面是Python的三个主要应用程序。

    如果你正在考虑学习Python–或者你最近开始学习它–你可能会问自己: "我到底能用Python做什么?" 这是一个很难回答的问题,因为Python的应用程序太多了. 但随着时间的 ...

  8. Linux下利用python实现语音识别详细教程

    Linux下python实现语音识别详细教程 语音识别工作原理简介 选择合适的python语音识别包 安装SpeechRecognition 识别器类 音频文件的使用 英文的语音识别 噪音对语音识别的 ...

  9. 嘿嘿!我用Python做了个孙悟空玩转如意金箍棒

    马上暑假就要到了,很多小朋友也要放假啦.暑假里最熟悉的电视节目,非<西游记>莫属了,对于这部电视剧,想必大家不会陌生,小编最喜欢的就是孙悟空手里的如意金箍棒,此棒重一万三千五百斤,可自由伸 ...

  10. python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri

    原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...

最新文章

  1. 30道linux面试题与答案(21-30)
  2. 消息 css 代码,CSS3 通知类消息动画
  3. shell 输入输出脚本
  4. mysql更新日志问题
  5. IOS使用通知回调方法
  6. 关于在软件中添加扫描二维码功能的详细步骤及对应的资源。
  7. python中的类方法和静态方法
  8. day32 java的多线程(4)synchronized
  9. java生成缩略图,旋转,水印,截图
  10. 宏杉MacroSan存储开局指导-流程
  11. 苹果和亚马逊因疑似侵犯云端同步功能专利而被提起美国337调查
  12. 软件评测师--第11小时 安全测试和评估
  13. java获取上个月15号_java获取当前上一周、上一月、上一年的时间
  14. 【MySQL】MySQL有几种锁
  15. 计算机四年级上册语文教案,四年级语文上册的教案
  16. 小程序全套购物车(全选,单选,反选,删除,价格计算)
  17. 石川:出色不如走运 (III)?
  18. 作为一名Java开发工程师需要掌握哪些专业技能
  19. 翻译 API 一句话API
  20. Gradle打包报错:Failed to calculate the value of task ‘:unityLibrary:compileReleaseJavaWithJavac‘

热门文章

  1. 网站克隆工具-httrack安装使用教程
  2. 51c语言单片机io口控制实验报告,单片机实验报告二 单片机IO口实验
  3. thinkphp5微信公众号推送模板消息
  4. 北京大学深圳研究生院计算机应用技术,北京大学计算机应用技术考研经验-北大深圳研究生院考研辅导班...
  5. UV的入门使用方法,简单,快捷,包教包会
  6. nyoj234 吃土豆 01背包
  7. SDR软件无线电知识要点(三)EVM
  8. 计算机二级office试题构成,2016年计算机二级office题库及答案
  9. 广义相对论和量子力学的根本矛盾
  10. 基于Neo4j图数据库的反欺诈模型初探1