目录
1 任务介绍 1
2 项目实现 1
2.1 预处理 2
2.2 特征提取 3
2.2.1 归一化 3
2.2.2 预加重 3
2.2.3 分帧 3
2.3 加窗 4
2.3.1 端点检测 6
2.3.2 快速傅里叶变换 8
2.3.3 梅尔频率域特征 10
2.4 识别模型 12
2.4.2 数据加载 13
2.4.3 模型训练 13
2.5 识别交互 14
2.5.1 前端界面 14
2.5.2 服务器端 15
3 总结 15

1任务介绍
语音识别是通往真正的人工智能的不可缺少的技术。尽管能真正听懂人类说话的智能机器任然在未来不可捉摸的迷 雾之中,但我们必须先解决如何识别出人类语音中包含的自然语言信息的问题。而数字信号处理技术将为这一任务 赋能。在本课程项目的任务之中,我们面对的是一个简化的语音识别场景——即孤立词识别。
我们针对 20 个关键词,采集了所有参与课程的同学朗读每个词 20 遍的语音。我将以此为数据集来构建一个能正
确识别这 20 个关键词的孤立词识别系统。
2项目实现
基于一学期跟随老师学习到的关于信号处理与语音识别技术的知识,我额外查阅多方资料,最终呈现出了我的语音 识别系统与报告。
我实现的语音识别系统的亮点有以下几个方面:
说话人无关的孤立词识别是语音识别技术发展中一个里程碑。从现代的观点来看,如果将语言信号视作时间 序列,那么孤立词识别就是一个模式识别中的分类问题。模式识别问题的解决一般分为特征提取与模型构建 两个部分。我们将这两个部分分开处理,使得代码的实现更加具有结构性和层次性。报告也将这两部分的处 理分开叙述
我在整个系统的实现中,除了利用了数值处理函数包 numpy 和自动求导工具包 pytorch之外的所有核心代码
都是单纯使用 python 实现。即真正锻炼了代码实现能力,也加深了对语音识别技术的理解。在报告中我也强调了各个方法和过程的代码实现,并将关键代码添加到附录之中以方便检阅
特别地,我基于课堂上所学的蝶形变换方法,实现了以 2 为基的快速傅里叶变换,并运用到了频域特征的分析之中。这让我更加领略到该算法的优美
根据我自行实现的快速傅里叶变换,实现了梅尔频率域的倒谱系数的计算,并根据通过梅尔滤波器之后得到 梅尔频谱特征设计了基于卷积神经网络的识别算法
我将计算出的频谱特征视为图片,因而可以使用近年来在大规模图片分类任务上大放异彩的卷积神经网络来 进行分类识别。我采用了 2014 年在 ImageNet 的比赛上获胜的VGG Net 作为我们的识别模型,并使用了批归一化和 Dropout 手段来避免过拟合,提高模型的泛化能力
2.1预处理
首先我对数据进行了清洗。
各个同学上交的文件结构并不一致,有的是一个压缩包下包含所有文件,有的是一个压缩包中还有以自己的学号命 名的文件夹,此外还有一些同学提交的压缩包是在 MacOS 上进行打包的,因此还有一个额外的缓存文件夹。这样的结构不利于我们对数据进行批量的读入。
因此我编写了程序先解压所有压缩包,然后进行深度优先搜索来遍历所有文件夹,根据文件的命名规则把所有文件 提取出来,按照 data/学号/文件名.wav 的格式统一存储。同时因为需要大规模地进行复制提取,为了效率的考
量,我使用多线程的方式完成了这一任务。
此外有几个文件显示已损坏而无法读取,以及一个文件录音长度大于两秒。为了数据的一致性,必须去除掉异常数 据,但仅仅删除数据将导致样本不均衡的问题。为此我采用随机替换的方式,本文转载自http://www.biyezuopin.vip/onews.asp?id=13404用同一个同学在同一个词下的另一个 语音文件进行替换。这样就可以缓解数据缺失带来的样本不均衡的问题。

同时,考虑到最终测试时是采用集外测试的方法,理论上讲应剔除女生的数据。

import argparse
import flask
import os
from flask import Flask, request, send_from_directory
from cnn_melspec import build_model, infermodel_path = "/home/zfhu/playground/DSP/project/save/checkpoint.ptr""""
使用chrome进行测试时,如果服务端不是host在localhost上,会导致getUserMedia不可用(懒得搞https),所以要在信赖模式下启动chrome
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --unsafely-treat-insecure-origin-as-secure="http://10.141.208.102" --user-data-dir="temp"
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --unsafely-treat-insecure-origin-as-secure="http://10.141.208.102:22339" --user-data-dir="temp2"
"""if __name__ == "__main__":argparser = argparse.ArgumentParser()args = argparser.parse_args()app = flask.Flask(__name__, static_folder='interface')app.debug = Truemodel, __ = build_model(model_path)@app.route('/', methods=['POST', 'GET'])def home():return send_from_directory('interface', 'index.html')@app.route('/save-record', methods=['POST'])def save_record():file = flask.request.files['file']app.logger.debug(file.filename)os.makedirs("upload", exist_ok=True)save_to = "upload/{}".format(file.filename)file.save(save_to)return infer(model, save_to)@app.route('/js/<path:path>')def send_js(path):return send_from_directory('interface/js', path)app.run(host="0.0.0.0", port=22339)








基于Python的语音识别系统(孤立词)相关推荐

  1. 基于python的语音识别系统,Python语音识别技术路线

    如何用python调用百度语音识别 1.首先需要打开百度AI语音系统,开始编写代码,如图所示,编写好回车.2.然后接下来再试一下的音频,开始编写成功回车,如图所示的编写. 3.最后,查看音频c的属性, ...

  2. 基于GMM-HMM的语音识别系统

    目录 基于孤立词的GMM-HMM语音识别 建模 训练 Viterbi训练 前向后向训练(Baum-Welch训练) 解码 基于单音素的GMM-HMM语音识别系统 基于三音素的GMM-HMM语音识别系统 ...

  3. 【语音识别】基于GMM-HMM的语音识别系统

    基于GMM-HMM的语音识别系统 终极目的:让机器"听懂" . • 对齐:"音频wav" 和"文本txt"的对应关系 • 训练:已知对齐(w ...

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

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

  5. 手把手教你:基于TensorFlow的语音识别系统

    系列文章 第十章.手把手教你:基于Django的用户画像可视化系统 第九章.手把手教你:个人信贷违约预测模型 第八章.手把手教你:基于LSTM的股票预测系统 目录 系列文章 一.项目简介 二.语音数据 ...

  6. python是商业组织吗_基于Python的电子商务系统的弹性架构与思考

    DOI:10. 19392 / j. cnki. 1671-7341. 201815075 基于 Python 的电子商务系统的弹性架构与思考 谢钟扬 湖南软件职业学院 湖南湘潭 411100 摘 要 ...

  7. 基于python的数据分析系统,python数据分析经典案例

    大家好,本文将围绕利用python进行数据分析案例展开说明,基于python的数据分析系统是一个很多人都想弄明白的事情,想搞清楚基于python的数据分析题目需要先了解以下几个事情. 1.如何利用py ...

  8. 基于Python的数据分析系统的设计和实现

    <基于Python的数据分析系统的设计和实现>该项目采用技术Python的django框架.mysql数据库 ,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代 ...

  9. 基于Python的汽车销售系统的设计和实现

    <基于Python的汽车销售系统的设计和实现>该项目采用技术Python的django框架.mysql数据库,项目含有源码.论文.PPT.配套开发软件.软件安装教程.项目发布教程.核心代码 ...

最新文章

  1. 基于verilog的洗衣机设计
  2. Mdi悬浮子窗体不超过主窗体边界
  3. 由Docker的MySQL官方镜像配置的容器无法启动问题解决办法(修改配置后无法启动)
  4. Eclipse的JavaWeb项目导入到IntelliJ IDEA 并且配置Tomcat
  5. [转]google protobuf安装与使用
  6. 关系模式候选键求取的算法
  7. matlab动画_用matlab做一个脉动磁势分解的动画
  8. 解决Kubelet Pod启动CreatePodSandbox或RunPodSandbox异常方法
  9. OceanBase架构介绍
  10. 课程笔记:深度学习与人类语言处理 ——李宏毅,2020 (P5)
  11. CSOL控制台与FPS优化命令大全
  12. Android聊天室(源码)
  13. 2022-2028年全球与中国木材加工机械行业市场需求预测分析
  14. 北美票房:《触不可及》惊喜夺冠
  15. 逻辑上的“谬误”真的是我们应该所认为的错误吗?
  16. 扣血抖动和FPS显示
  17. Freertos中空闲任务的重要性
  18. 经典的股票量化交易策略(含源码)
  19. 最新postfix 的master.cf配置参考
  20. 磁编码器MT6835_SPI读取位置信息

热门文章

  1. sku设计mysql_如何设计SKU表结构
  2. 被故事选中,没资格懵懂。
  3. windows远程控制mac的步骤
  4. 30岁人生进度条_你的人生进度条,只剩下最后的1%
  5. 163邮箱自动化登录实现模块化【2】
  6. python multiprocessing_Python的multiprocessing模块详解
  7. MySQL8.0 物理克隆接口_实战 MySQL 8.0.17 Clone Plugin(转)
  8. 大学四年因为知道了这32个网站,我成了别人眼中的大神!
  9. 1.3 “音乐”小程序项目
  10. java 仿qq庅_iQQ-开源Java版qq客户端