基于Python的语音识别系统(孤立词)

目录
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用同一个同学在同一个词下的另一个 语音文件进行替换。这样就可以缓解数据缺失带来的样本不均衡的问题。

基于Python的语音识别系统(孤立词)
同时,考虑到最终测试时是采用集外测试的方法,理论上讲应剔除女生的数据。
import argparse
import flask
import os
from flask import Flask, request, send_from_directory
from cnn_melspec import build_model, infer

model_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 = True

    model, __ = 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)
</path:path>

基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)
基于Python的语音识别系统(孤立词)

Original: https://blog.csdn.net/sheziqiong/article/details/127358671
Author: biyezuopin
Title: 基于Python的语音识别系统(孤立词)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/805693/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python趣味入门3:变量、字串输入与输出

    安装配置python环境完毕,非常有必要花十分钟对一些基本概念:变量、数学字符、输入、输出等4个概念进行理解,下面通过简单示例,深入了解python的基本语法。 本文的示例均在ID…

    Python 2023年6月12日
    057
  • Python+AI给老照片上色

    前言 大家好。有谁像我一样喜欢老照片吗?老照片总会让人觉得自己有一种感觉。也许这是一种怀旧情绪。有一次我无意中看到 [En] Hello, everyone. Is there a…

    Python 2023年5月24日
    093
  • Linux:conda和Pycharm安装;Windows:MobaXterm编辑远程Pycharm

    文章目录 前言 一、远程Linux条件 * 1. conda环境 – 1.1 下载脚本 1.2 运行脚本 1.3 测试是否安装成功 1.4 查看当前存在conda虚拟环…

    Python 2023年9月9日
    077
  • 【2022-08-26】python前端开发(五)

    python前端开发(五) JS获取值操作 普通数据(输入、选择) 标签对象.value 文件数据(上传) 标签对象.files 标签对象.files[0] let i1Ele =…

    Python 2023年6月11日
    070
  • Python小游戏——外星人入侵(保姆级教程)第一章 06让飞船移动

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 弹尽粮绝,会员救园:…

    Python 2023年11月1日
    025
  • Vue-cli介绍

    vue基本语法非常容易理解,如果在接触vue之前,接触过微信小程序,基本可以说轻车熟路.反过来也是如此. vue 之所以强大切易用离不开vue-cli\vue-router\vue…

    Python 2023年6月12日
    054
  • Scrapy爬虫框架总结

    python的Scrapy爬虫框架有5个大部件,细分的话有7个小部件。框架隔一段时间不用就会忘记很多知识点,学了好几遍了,老是忘记一些常用的数据扭转逻辑,因此写下该博文,以期帮助后…

    Python 2023年10月4日
    044
  • Python 异常捕获是什么

    程序异常,就是程序出错了,程序员一般叫做 BUG(八哥),写程序不出错是不可能发生的事情,而程序员要做的事情就是及时的捕获错误,修改错误。 最常见的错误 – 除数为 0…

    Python 2023年5月25日
    076
  • pytest中conftest中fixture

    pytest中conftest中fixture fixture 中 scope 中有四个参数 function,class,module,session function 每一个函…

    Python 2023年9月12日
    047
  • Flask获取GET参数

    Flash 模拟试题及答案(一) 1.Loading应该放在影片的什麽位置? A. 影片不能有Loading B. 中间 C. 后面 D. 前面 2.Flash中设置属性的命令是?…

    Python 2023年8月9日
    053
  • TypeScript 4.9 发布!

    TypeScript 是一种通过添加类型和类型检查构建在 JavaScript 之上的语言。类型可以描述诸如对象的形状、如何调用函数以及属性是否可以为 null 或 undefin…

    Python 2023年9月26日
    042
  • Flask Restful 接口 – SqlAlchemy & Marshmallow

    本篇通过一个一对多的具体示例,介绍如何使用Flask,Flask-SQLAlchemy,marshmallow-sqlalchemy构建restful风格的api 创建项目,目录结…

    Python 2023年8月10日
    051
  • Python直接使用plot()函数画图

    目录 一、plot()函数的认识 二、plot()函数基本运用 三、plot()函数数据可视化画图以及图元基本参数设置 一、plot()函数的认识 在使用Python进行数据可视化…

    Python 2023年7月31日
    068
  • 随机森林算法

    随机森林 * – 1.1定义 – 1.2随机森林的随机性体现的方面 – 1.3 随机森林的重要作用 – 1.4 随机森林的构建过程 …

    Python 2023年8月2日
    044
  • python预测未来数据步骤_如何使用sklearnpython预测未来的数据帧?

    您的代码使用此数据帧作为X来生成预测:df = df[[‘Adj. Close’, ‘HL_PCT’, ‘PCT_cha…

    Python 2023年8月7日
    039
  • CCF-CSP真题《202209-3—防疫大数据》思路+python题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202209-3试题名称:防疫大数据时间限制:1.0s内存限制:512.0MB问题描述: 题目背…

    Python 2023年8月1日
    040
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球