ASRT系统目录及函数

本文以20170001P00001A0002.wav为例,逐步运行
持续更新…

general_function

file_dict.py

  • 函数:GetSymbolList(datapath)
    • 功能:加载dict.txt文件中的拼音符号列表,用于标记符号
    • 返回:list_symbol列表,[‘a1’,‘a2’,…]

file_wav.py

  • 函数:read_wav_data(filename)

    • 功能:使用wav库读取xxx.wav
    • 返回:wave_data:(声道数,帧数)语音信号的时域谱矩阵(一声道为一行)
      fs: 帧速率
      wave_data = array([[ 16, 16, 8, …, 0, -2, -15]], dtype=int16)
      framerate = 16000
  • 函数:GetMfccFeature(音频信号数据矩阵wave_data,采样率fs)

    • 功能:获取语音信号的mfcc特征。wav_feature.shape = (248, 39)
    • 返回:wav_feature:mfcc特征向量的矩阵、一阶差分矩阵、二阶差分矩阵
      mfcc特征参考此文
  • 函数:GetFrequencyFeature3(音频信号数据矩阵wave_data,采样率fs)

    • 功能:获取语音信号的特征矩阵
    • 返回:data_input:大小为(特征数量,窗口数)的矩阵
      data_input.shape = (247, 200)
  • 函数:wav_scale3((音频信号数据矩阵wave_data)

    • 功能:对音频信号数据矩阵进行归一化
    • 返回:归一化后的wave_data
  • 函数:wav_show(音频信号数据矩阵wave_data, 采样率fs)

    • 功能:可视化
    • 返回:在这里插入图片描述
  • 函数:get_wav_list(filename)

    • 功能:读取数据列表,wav文件列表
    • 返回:dic_filelist:数据id-文件名字典 list_wavmark:名字列表
  • 函数:get_wav_symbol(filename)

    • 功能:原理与*get_wav_list类似,读取数据列表,标记符号列表
    • 返回:dic_symbol_list:数据id-符号字典 list_symbolmark:标记符号列表

readdata24.py

DataSpeech类:

  • init(数据存放位置根目录path,数据集类型type=train/dev/test)
  • 属性:
    • datapath:数据存放根目录
    • type:数据集类型
    • dic_wavlist_thchs30:thchs30数据集(语音id,语音路径)字典
    • dic_symbollist_thchs30:thchs30数据集(语音id,拼音列表)字典
    • dic_wavlist_stcmds:stcmds数据集(语音id,语音路径)字典
    • dic_symbollist_stcmds:stcmds数据集(语音id,拼音列表)字典
    • SymbolNum:记录拼音符号数量
    • list_symbol:全部汉语拼音符号列表GetSymbolList()读dict.txt
    • list_wavnum:wav文件标记列表
    • list_symbolnum:symbol标记列表
    • DataNum:记录数据量
    • wavs_data:
  • 函数:LoadDataList()
    • 功能:根据type属性加载用于计算的数据列表并读取thchs30和stcmds数据集的wavalist(语音id 语音路径)和symbollist(语音id 拼音)
    • 返回:DataNum:GetDataNum()的返回值
  • 函数:GetDataNum()
    • 功能:获取thchs30和stcmds数据集的总数据量,当wav数量和symbol数量一致的时候返回正确的值,否则返回-1,代表出错。
    • 返回:DataNum:两个数据集的总数量
  • 函数:GetData(读取数据开始的位置n_start,读取wav文件的个数n_amount=1)
    • 功能:读取数据,返回神经网络输入值和输出值矩阵(可直接用于神经网络训练的那种)
    • 返回:data_input:语音的特征矩阵(由2维reshape成3维)
      data_label:神经网络输出值标签(语音对应的拼音序号数组)
  • 函数:data_genetator(一次产生的数据量batch_size=32, 数据长度audio_length = 1600)
    • 功能:数据生成器函数,用于Keras的generator_fit训练。
    • 返回: [X, y, input_length, label_length ], labels
      X.shape = (batch_size, audio_length, 200, 1) 存放batch_size个数据的语音特征矩阵
      y.shape = (batch_size, 64) 存放batch_size个数据的输出值标签
      input_length:batch_size个数据长度列表
      label_length::batch_size个标签长度
      labels:labels.shape = (batch_size,1)
  • 函数:GetSymbolNum()
    • 功能:获取拼音符号列表list_symbol的长度
    • 返回:len(list_symbol)
  • 函数:SymbolToNum(拼音符号symbol)
    • 功能:符号转为数字
    • 返回:list_symbol.index(symbol)
  • 函数:NumToVector(数字num)
    • 功能:数字转为对应的one-hot向量
    • 返回:v:num对应的向量列表

SpeechModel251.py

ModelSpeech类(语音模型类)

  • init(数据存放位置根目录path)

  • 属性

    • MS_OUTPUT_SIZE = 1424:dict.txt中有1424个拼音(包含空白块),故默认输出的拼音的表示大小是1424
    • label_max_string_length = 64:音频数据中最多拼音数
    • AUDIO_LENGTH = 1600:数据长度
    • .AUDIO_FEATURE_LENGTH = 200:音频特征矩阵维度
  • 函数:CreateModel()

    • 功能:定义CNN/LSTM/CTC模型,使用函数式模型
    • 输入层:200维的特征值序列,一条语音数据的最大长度设为1600(大约16s)
    • 隐藏层:卷积池化层,卷积核大小为3x3,池化窗口大小为2
    • 隐藏层:全连接层
    • 输出层:全连接层,神经元数量为self.MS_OUTPUT_SIZE,使用softmax作为激活函数
    • CTC层:使用CTC的loss作为损失函数,实现连接性时序多输出
    • 返回:model:输入:音频的特征矩阵 输出:y_pred
      model_data:输入:[音频的特征矩阵input_data, 音频标签labels, input_length, label_length] 输出:以ctc做函数的损失值
  • 函数:ctc_lambda_func(args)

    • 功能:返回损失函数值,详情见CTC算法理解一文
    • 返回:ctc_batch_cost(labels, y_pred, input_length, label_length)
  • 函数:TrainModel(数据保存的路径datapath, 迭代轮数epoch = 2,每多少步保存一次模型 save_step = 1000, batch_size = 32, filename = abspath + ‘model_speech/m’ + ModelName + ‘/speech_model’+ModelName)

  • 函数:LoadModel(filename = abspath + ‘model_speech/m’+ModelName+’/speech_model’+ModelName+’.model’)

  • 函数:SaveModel(sfilename = abspath + ‘model_speech/m’+ModelName+’/speech_model’+ModelName,comment=’’)

    • 功能:保存模型参数
  • 函数:TestModel( datapath=’’, str_dataset=‘dev’, data_count = 32, out_report = False, show_ratio = True, io_step_print = 10, io_step_file = 10)

    • 参数说明:io_step_print:为了减少测试时标准输出的io开销,可以通过调整这个参数来实现
      io_step_file:为了减少测试时文件读写的io开销,可以通过调整这个参数来实现

    • 功能:使用编辑距离测试模型错误率

  • 函数:Predict( 语音的特征矩阵data_input, 语音长度input_len)

    • 功能:根据语音特征进行预测
    • 返回:r1:返回语音识别后的拼音符号列表
  • 函数:RecognizeSpeech(wavsignal, fs)

    • 功能:最终做语音识别用的函数,识别一个wav序列的语音
    • 返回:r_str:识别的拼音序列

LanguageModel2.py

ModelLanguage类(语言模型类)

  • init(语言模型所在的目录modelpath)
  • 函数:LoadModel()
    • 功能:加载语言模型
    • 返回:model:(dict_pinyin, model1, model2 ),元组类型
  • 函数:GetPinyin(拼音文件所在位置filename)
    • 功能:获取拼音字典
    • 返回:dict:dic_pinyin.txt对应的字典
  • 函数:GetLanguageModel(模型文件所在位置modelLanFilename)
    • 功能:获取语言模型
    • 返回:dic_model:language_model1/2.txt对应的字典
  • 函数:GetSymbolDict(字典所在位置dictfilename)
    • 功能:获取拼音符号字典
    • 返回:dic_symbol:dict.txt对应的字典
  • 函数:SpeechToText(拼音序列list_syllable)
    • 功能:语音识别专用的处理函数,实现从语音拼音符号到最终文本的转换
    • 返回:str_result:文本序列
  • 函数:decode(拼音序列list_syllable, yuzhi = 0.0001)
    • 功能:实现拼音向文本的转换,基于马尔可夫链
    • 返回:list_words
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值