python学习之实现语音的简单训练及识别

语音识别是一门交叉学科。近二十年来,语音识别技术取得显著进步,开始从实验室走向市场。人们预计,未来10年内,语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。 语音识别听写机在一些领域的应用被美国新闻界评为1997年计算机发展十件大事之一。很多专家都认为语音识别技术是2000年至2010年间信息技术领域十大重要的科技发展技术之一。 语音识别技术所涉及的领域包括:信号处理、模式识别、概率论和信息论、发声机理和听觉机理、人工智能等等。

此次用的是python3.6的版本实现的,安装一些相关模块sklearn:

pip install sklearn

会自动下载相关的包,好像一般来说,是下载最新的(不敢确认)。
在这里插入图片描述
中间也可能会存在一定的错误,导致失败,但可以重新,继续下载,反正我是这样的。
在这里插入图片描述
知道成功安装。

gParam的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月27日

@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-27'

TRAIN_DATA_PATH = 'G:/2018and2019two/duomeitijishu/data/train/'
TEST_DATA_PATH = 'G:/2018and2019two/duomeitijishu/data/test/'
NSTATE = 4
NPDF = 3
MAX_ITER_CNT = 100
NUM = 10

if __name__ == "__main__":
    pass

对于读入的路径,我用的是绝对路径,也就是写死。
test的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月27日

@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-27'

import numpy as np
from numpy import *
from duomeiti import gParam
from duomeiti import my_hmm
from my_hmm import gmm_hmm  #可会出现报错,但实际运行起来,没有问题
my_gmm_hmm = gmm_hmm()

my_gmm_hmm.loadWav(gParam.TRAIN_DATA_PATH)
my_gmm_hmm.hmm_start_train()
my_gmm_hmm.recog(gParam.TEST_DATA_PATH)

if __name__ == "__main__":
    pass

在编译与修改代码的边缘,疯狂试探;
在这里插入图片描述
主要还是python版本的原因,版本的不同,有些函数的用法也不同。具体详细请见这个网址:https://www.runoob.com/python3/python3-att-list-extend.html

my_hmm的代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月27日

@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-27'

import numpy as np
from numpy import *
from sklearn.cluster import KMeans
from scipy import sparse
import scipy.io as sio
from scipy import signal
import wave
import math
from duomeiti import gParam
import copy

def pdf(m, v, x):
    est_v = np.prod(v, axis=0)
    test_x = np.dot((x - m) / v, x - m)
    p = (2 * math.pi * np.prod(v, axis=0))**-0.5 * \
        np.exp(-0.5 * np.dot((x - m) / v, x - m))
    return p

class sampleInfo:
    def __init__(self):
        self.smpl_wav = []
        self.smpl_data = []
        self.seg = []
    def set_smpl_wav(self, wav):
        self.smpl_wav.append(wav)
    def set_smpl_data(self, data):
        self.smpl_data.append(data)
    def set_segment(self, seg_list):
        self.seg = seg_list

class mixInfo:
    def __init__(self):
        self.Cmean = []
        self.Cvar = []
        self.Cweight = []
        self.CM = []

class hmmInfo:
    def __init__(self):
        self.init = []  # 初始矩阵
        self.trans = []  # 转移概率矩阵
        self.mix = []  # 高斯混合模型参数
        self.N = 0  # 状态数

class gmm_hmm:
    def __init__(self):
        self.hmm = []  # 单个hmm序列,
        self.gmm_hmm_model = []  # 把所有的训练好的gmm-hmm写入到这个队列
        self.samples = []  # 0-9 所有的音频数据
        self.smplInfo = []  # 这里面主要是单个数字的音频数据和对应mfcc数据
        # 每一个HMM对应len(stateInfo)个状态,每个状态指定高斯个数(3)
        self.stateInfo = [gParam.NPDF, gParam.NPDF, gParam.NPDF, gParam.NPDF]
        
  def loadWav(self, pathTop):
        for i in range(gParam.NUM):
            tmp_data = []
            for j in range(gParam.NUM):
                wavPath = pathTop + str(i) + str(j) + '.wav'
                f = wave.open(wavPath, 'rb')
                params = f.getparams()
                nchannels, sampwidth, framerate, nframes = params[:4]
                str_data = f.readframes(nframes)
                # print shape(str_data)
                f.close()
                wave_data = np.fromstring(str_data, dtype=short) / 32767.0
                #wave_data.shape = -1,2
                #wave_data = wave_data.T
                #wave_data = wave_data.reshape(1,wave_data.shape[0]*wave_data.shape[1])
                # print shape(wave_data),type(wave_data)
                tmp_data.append(wave_data)
            self.samples.append(tmp_data)
   
    # 循环读数据,然后进行训练
    def hmm_start_train(self):
        Nsmpls = len(self.samples)
        for i in range(Nsmpls):
            tmpSmplInfo0 = []
            n = len(self.samples[i])
            for j in range(n):
                tmpSmplInfo1 = sampleInfo()
                tmpSmplInfo1.set_smpl_wav(self.samples[i][j])
                tmpSmplInfo0.append(t
  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python语音识别训练是指使用Python编程语言进行声音识别算法的开发与训练Python作为一种简洁、易学且功能强大的编程语言,为语音识别任务提供了丰富的库和工具。 首先,我们可以使用Python中的科学计算库,如NumPy和SciPy来进行音频处理。这些库提供了丰富的函数和工具,可以进行音频数据的采样、滤波、噪声消除等处理,为后续的声音识别训练提供了基础。 其次,Python还提供了一些优秀的声音信号处理库,如Librosa和pyAudio。这些库可以帮助我们对音频进行特征提取,如梅尔频率倒谱系数(MFCC)、短时能量和过零率等。这些特征是声音识别中常用的特征表示方法,可以通过Python进行提取和分析。 在进行声音识别训练时,Python的机器学习库Scikit-learn和深度学习库TensorFlow等也提供了丰富的工具和算法。我们可以使用这些库构建和训练各种声音识别模型,如高斯混合模型(GMM)、支持向量机(SVM)、卷积神经网络(CNN)和递归神经网络(RNN)等。 此外,Python还提供了开源的声音识别工具,如CMU Sphinx和Kaldi。这些工具提供了完整的语音识别系统,包括数据预处理、模型训练和测试等环节,并且可以通过Python接口进行调用和扩展。 总而言之,Python语音识别训练是一项利用Python编程语言进行声音识别算法开发与训练的工作。Python丰富的库和工具为我们提供了方便快捷的方法来实现各种声音识别任务,从而为我们提供更好的语音识别体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值