python做语音识别
本文所用文件的链接
链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ
提取码:p57s
语音识别
语音识别可以实现通过一段音频信息(wav波) 识别出音频的内容.
通过傅里叶变换, 可以将时间域的声音分解为一系列不同频率的正弦函数的叠加. 通过频率谱线的特殊分布, 建立音频内容与文本之间的对应关系, 以此作为模型训练的基础.
语音识别
梅尔频率倒谱系数(MFCC) 描述了与声音内容密切相关的13个特殊频率所对应的能量分布. 那么我们就可以使用梅尔频率倒谱系数(MFCC)矩阵作为语音识别的特征. 基于隐马尔科夫模型进行模式识别, 找到测试样本最匹配的声音模型, 从而识别语音内容.
- 准备多个声音样本作为训练数据. 并且为每个音频都标明其类别.
- 读取每一个音频文件, 获取音频文件的mfcc矩阵.
- 以mfcc作为训练样本, 进行训练.
- 对测试样本进行测试. (基于隐马模型)
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做语音识别相关推荐
- python离线语音识别_Python实现语音识别和语音合成功能
声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移. 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布, ...
- python可以给你干什么-你最想用python做什么?python到底能用来做什么?
我们知道python的应用前景很广阔,似乎哪个领域他都可以涉足,但是python真的在哪里都得心应手吗?我们今天就来看看这个问题: 如果你想学Python,或者你刚开始学习Python,那么你可能会问 ...
- 基于 python 的语音识别 API 调用
腾讯 AI 开放平台 开放了语音.图像等多种 AI 功能接口.本文尝试基于 python 完成对语音识别接口的本地调用. 1. 准备工作 API 调用需要身份认证.我们首先需要注册并获得 AppID ...
- “晓白”学python-科普篇(2)-人们都用python做什么?
上一小节里面,老袁给晓白讲了python是什么,python的由来,发展历程,崛起和python的特点.这一小节里面,老袁会告诉晓白人们都用python来做什么. "我刚刚说了,python ...
- 用Python做信号处理
用Python做信号处理 声明:本文中设计的知识和代码大部分来自:芥末的无奈的博客_CSDN博客-音频处理,c++,keras领域博主 以及 凌逆战 - 博客园 (cnblogs.com) 两位大神所 ...
- 你到底可以用Python做什么?以下是Python的3个主要应用程序。
导读:如果你想学Python,或者你刚开始学习Python,那么你可能会问:"我能用Python做什么?" 这个问题不好回答,因为Python有很多用途. 但是随着时间,我发现有P ...
- 你到底能用Python做什么?下面是Python的三个主要应用程序。
如果你正在考虑学习Python–或者你最近开始学习它–你可能会问自己: "我到底能用Python做什么?" 这是一个很难回答的问题,因为Python的应用程序太多了. 但随着时间的 ...
- Linux下利用python实现语音识别详细教程
Linux下python实现语音识别详细教程 语音识别工作原理简介 选择合适的python语音识别包 安装SpeechRecognition 识别器类 音频文件的使用 英文的语音识别 噪音对语音识别的 ...
- 嘿嘿!我用Python做了个孙悟空玩转如意金箍棒
马上暑假就要到了,很多小朋友也要放假啦.暑假里最熟悉的电视节目,非<西游记>莫属了,对于这部电视剧,想必大家不会陌生,小编最喜欢的就是孙悟空手里的如意金箍棒,此棒重一万三千五百斤,可自由伸 ...
- python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri
原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...
最新文章
- 30道linux面试题与答案(21-30)
- 消息 css 代码,CSS3 通知类消息动画
- shell 输入输出脚本
- mysql更新日志问题
- IOS使用通知回调方法
- 关于在软件中添加扫描二维码功能的详细步骤及对应的资源。
- python中的类方法和静态方法
- day32 java的多线程(4)synchronized
- java生成缩略图,旋转,水印,截图
- 宏杉MacroSan存储开局指导-流程
- 苹果和亚马逊因疑似侵犯云端同步功能专利而被提起美国337调查
- 软件评测师--第11小时 安全测试和评估
- java获取上个月15号_java获取当前上一周、上一月、上一年的时间
- 【MySQL】MySQL有几种锁
- 计算机四年级上册语文教案,四年级语文上册的教案
- 小程序全套购物车(全选,单选,反选,删除,价格计算)
- 石川:出色不如走运 (III)?
- 作为一名Java开发工程师需要掌握哪些专业技能
- 翻译 API 一句话API
- Gradle打包报错:Failed to calculate the value of task ‘:unityLibrary:compileReleaseJavaWithJavac‘