项目:ASRT_SpeechRecognition
学习中…持续更新


系统流程


1.特征提取

  • 输入:语音.wav
  • 操作:分帧加窗等操作
  • 输出:语谱图(二维频谱图像信号)

2.声学模型

  • 参考VGG的深度卷积神经网络
    - 输入:语谱图
    - 操作:VGG模型训练
    - 输出:VGG输出

3.CTC解码

  • 输入:VGG输出
  • 输出:汉语拼音序列

4.语言模型

  • 基于概率图的最大熵隐马尔可夫模型

    • 输入:汉语拼音序列
    • 操作:隐含马尔可夫链
    • 输出:汉字文本
  • 无需中文分词算法的简单词频统计
def sub_run(path, n):  # n 记录每次切片的一组中包含的字符数f1 = open(path, 'rb')stxt = f1.read()stxt = str(stxt, 'utf-8')f1.close()tmp_str = {}for i in list(range(len(stxt) - 1)):tmp_str[stxt[i:i + n]] = 0for i in list(range(len(stxt) - 1)):tmp_str[stxt[i:i + n]] += 1#print(tmp_str.items())tmp_str = sorted(tmp_str.items(), key=lambda d: d[1], reverse=True)print('*****' + str(n) + '字符***************')print(tmp_str)print('*************************')

代码目录结构


general_function

  • file_dict.py

    • 函数:GetSymbolList_trash(“路径”)

      • 功能:加载dict.txt文件中的拼音符号列表,用于标记符号
      • 返回:list_symbol列表,[a1,a2,a3…pou2,_]
  • file_wav.py

    • 函数:read_wav_data(“一条语音.wav”)

      • 功能:读取一个wav文件
      • 输入:语音.wav文件
      • 返回:wave_date,fs
        wave_data:(声道数,帧数)语音信号的时域谱矩阵(一声道为一行)
        fs: 帧速率/采样率
    • 函数:GetMfccFeature(音频信号数据矩阵wave_data,采样率fs)

    • 关于MFCC:Python之python_speech_features

      • 功能:获取语音信号的mfcc特征
      • 返回值:mfcc特征向量的矩阵、一阶差分矩阵、二阶差分矩阵
    • 函数:GetFrequencyFeature(音频信号数据矩阵wave_signal,采样率fs)

      • 功能:获取输入语音信号的特征矩阵(语谱图)
      • 输入:wave_data,fs
      • 输出:FrequencyImg 语谱图:大小为(特征数量,窗口数)的矩阵,如(200, 978)
    • 函数:get_wav_list(filename)

      • 返回:从wavlist文件中获取的wav字典(语音id,语音路径)、语音id列表
    • 函数:get_wav_symbol(filename)

      • 返回:从symbollist文件中获取的拼音字典(语音id,语音路径)、语音列表

test.py

  • 功能:测试整个语音识别系统
  • 流程:
    1. 初始化语音模型:ms = ModelSpeech(datapath)

      • _init_():初始化
      • CreateModel():创建模型,CNN/LSTM/CTC模型
    2. 加载训练好的语音模型:ms.LoadModel(speech_model251.model)
    3. 读取音频文件,返回拼音序列:r = ms.RecognizeSpeech_FromFile('20170001P00241I0052.wav')
      • read_wav_data():读音频文件
      • RecognizeSpeech():语音处理
        • GetFrequencyFeature3():获取音频特征
        • Predict():预测结果,返回拼音序列
    4. 加载语言模型:ml = ModelLanguage('model_language') ml.LoadModel()
      • GetLanguageModel():读取语音模型文件,返回模型
    5. 将拼音序列传入语言模型,得到语音识别结果:r = ml.SpeechToText(str_pinyin)

train_mspeech.py
用于训练语音模型

  • 创建模型ms = ModelSpeech(datapath)
  • 训练模型ms.TrainModel(datapath, epoch = 50, batch_size = 16, save_step = 500)
    • 参数:datapath数据保存路径、epoch迭代轮数、batch_size、每save_step步保存一次模型。

readdata.py
DataSpeech类

  • init(路径path,数据集类型type=train/dev/test)
  1. 调用LoadDataList()加载数据列表
  2. 属性如下:

datapath数据存放根目录
type数据集类型
dic_wavlist_thchs30:thchs30数据集(语音id,语音路径)字典
dic_symbollist_thchs30:thchs30数据集(语音id,拼音列表)字典
dic_wavlist_stcmds:stcmds数据集(语音id,语音路径)字典
dic_symbollist_stcmds:stcmds数据集(语音id,拼音列表)字典
list_wavnum_thchs30:thchs30数据集(语音id)列表
list_wavnum_stcmds:stcmds数据集(语音id)列表
list_symbolnum_thchs30:thchs30数据集(语音id)列表,同list_wavnum_thchs30
list_symbolnum_stcmds:stcmds数据集(语音id)列表,同list_wavnum_stcmds
SymbolNum:记录拼音符号数量
list_symbol:全部汉语拼音符号列表GetSymbolList()读dict.txt
list_wavnum:wav文件标记列表
list_symbolnum:symbol标记列表
DataNum:记录数据量

  • 函数:LoadDataList()
    根据type属性加载用于计算的数据列表
    读取thchs30和stcmds数据集的wavalist(语音id 语音路径)和symbollist(语音id 拼音)

  • 函数:GetDataNum()
    获取thchs30和stcmds数据集的总数据量
    当wav数量和symbol数量一致的时候返回正确的值,否则返回-1,代表出错。

  • 函数:GetData()

    • 功能:读取数据,返回神经网络输入值和输出值矩阵(可直接用于神经网络训练的那种)
    • 参数:
      n_start:从编号为n_start数据开始选取数据
      n_amount:选取的数据数量,默认为1,即一次一个wav文件
    • 返回:data_input语音的特征矩阵(三维,原始二维加一维),和神经网络输出值标签(语音对应的拼音序号数组)
  • 函数:data_genetator(batch_size=32, audio_length = 1600)
    数据生成器函数,用于Keras的generator_fit训练。
    yield [X, y, input_length, label_length ], labels

  • 函数:GetSymbolList()

    • 从文件dict.txt中加载拼音符号列表,用于标记符号
    • 返回一个列表list_symbol:[a1,a2,a3…,_]
  • 函数:GetSymbolNum()
    返回拼音符号列表的大小len(self.list_symbol)

  • 函数:SymbolToNum()
    拼音符号转位数字,即该拼音在list_symbol中的位置

  • 函数:NumToVector()
    数字转为对应的one-hot向量


SpeechModel.py
语音模型类

  • 函数:CreateModel()

定义CNN/LSTM/CTC模型,使用函数式模型
输入层:200维的特征值序列,一条语音数据的最大长度设为1600(大约16s)
隐藏层:卷积池化层,卷积核大小为3x3,池化窗口大小为2
隐藏层:全连接层
输出层:全连接层,神经元数量为self.MS_OUTPUT_SIZE,使用softmax作为激活函数,
CTC层:使用CTC的loss作为损失函数,实现连接性时序多输出

  • 函数:ctc_lambda_func()

    • 返回K.ctc_batch_cost(labels, y_pred, input_length, label_length)
  • 函数:TrainModel()

    • 功能:训练模型

    参数:
    datapath: 数据保存的路径
    epoch: 迭代轮数
    save_step: 每多少步保存一次模型
    filename: 默认保存文件名,不含文件后缀名

  • 函数:LoadModel()
    加载模型参数

  • 函数:SaveModel()
    保存模型参数

  • 函数:TestModel()
    使用编辑距离测试模型错误率

  • 函数:Predict()

    • 返回:语音识别后的拼音符号列表
  • 函数:RecognizeSpeech()

ASRT中文语音识别系统相关推荐

  1. 分享 | 开源的中文语音识别系统

    原标题:分享 | 开源的中文语音识别系统 语音识别目前已经广泛应用于各种领域,那么你会想做一个自己的语音识别系统吗?这篇文章介绍了一种开源的中文语音识别系统,读者可以借助它快速训练属于自己的中文语音识 ...

  2. 绝佳的ASR学习方案:这是一套开源的中文语音识别系统

    ASRT 是一套基于深度学习实现的语音识别系统,全称为 Auto Speech Recognition Tool,由 AI 柠檬博主开发并在 GitHub 上开源(GPL 3.0 协议).本项目声学模 ...

  3. python语音库_绝佳的ASR学习方案:这是一套开源的中文语音识别系统

    ASRT 是一套基于深度学习实现的系统,全称为 Auto Speech Recognition Tool,由 AI 柠檬博主开发并在 GitHub 上开源(GPL 3.0 协议).本项目声学模型通过采 ...

  4. github上能找到中文博主吗_绝佳的ASR学习方案:这是一套开源的中文语音识别系统...

    语音识别目前已经广泛应用于各种领域,那么你会想做一个自己的语音识别系统吗?这篇文章介绍了一种开源的中文语音识别系统,读者可以借助它快速训练属于自己的中文语音识别模型,或直接使用预训练模型测试效果.所以 ...

  5. 基于深度学习的中文语音识别系统框架(pluse)

    目录 声学模型 GRU-CTC DFCNN DFSMN 语言模型 n-gram CBHG 数据集 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 声学模型 ...

  6. 中文语音识别系统搭建流程笔记

    标签:ASR, Python, Keras, CTC 最近在自己动手搭建一个中文语音识别系统,因为也是入门阶段,所以比较吃力,直到在GitHub上找到了一个已经在做的开源工程,找到了做下去的动力,附上 ...

  7. 基于深度学习的中文语音识别系统框架搭建

    基于深度学习的中文语音识别系统框架 转自@https://blog.csdn.net/chinatelecom08/article/details/82557715 本文搭建一个完整的中文语音识别系统 ...

  8. 中文语音识别系统ViaVoive使用实录

    "一开始我感到很怀疑,但很快就变成了惊讶,摆脱了手敲键盘.眼盯屏幕的打字方式,我的所有注意力都集中到我想说想写的东西上." 虽然我们经常在影视和文学作品中看到那种听得懂人话的机器, ...

  9. 语音识别——基于深度学习的中文语音识别系统框架

    本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC.GRU-CT ...

最新文章

  1. 如何用 Nacos 构建服务网格生态
  2. 笔记-信息系统开发基础-面向对象基本概念-多态
  3. 重磅发布!最新版《动手学深度学习》PDF 版今天终于可以下载
  4. md0 mysql_mysql 数据合并
  5. 两类传输协议:TCPUDP总结
  6. EasyUI动画效果
  7. 程序员,该注意下啦!
  8. 12001.linux应用程序之i2c编程
  9. 珠海 第十届亚洲机器人锦标赛_滨和中学“VEX”团队斩获粤港澳机器人大赛多个大奖!...
  10. 析构函数中的virtual是否必要?
  11. 从BIM行业看中国工业软件的困境及出路
  12. Timesten安装
  13. ubuntu 10.04 下安装 wine 所得所获【转】
  14. 《玩转股票量化交易》知识星球2021年度回顾
  15. 家具力学性能测试软件,家具力学性能
  16. GPS与GPRS模块功差之千里
  17. OS App体验设计
  18. Linux命令--arp--使用/实例
  19. Sublime Text 3 简体中文汉化包使用方法
  20. JDK8 日期时间相关 java.time.*

热门文章

  1. 解决jupyter中matplotlib中文乱码问题
  2. Ubuntu18.04运行校园网客户端
  3. 无人机倾斜摄影测量影像处理关键技术
  4. 浏览器内多个标签页之间的通信方式有哪些?
  5. 从源码编译usbmuxd
  6. Activiti 从入门到精通
  7. 预防甲肝和戊肝,海产品烧熟煮透吃
  8. HTML+CSS实现背景图片铺满页面的方法
  9. 使用pycallgraph分析python代码函数调用流程以及框架
  10. php判断是否节假日,php 排除周末与节假日程序实例代码