语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容

  • 语音识别应用范畴
  • 语音识别框架
  • 语音基本操作
    • 使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数
    • 使用numpy读取pcm格式音频文件
    • 读取wav音频文件,并绘制图像
    • 读取双声道的wav音频文件,分别绘制不同声道的波形图
    • 读取一个采样率为16k的音频,分别绘制出其时域与频域的图
  • 音频特征相关内容
  • RNN相关内容
  • 卷积模块
  • 语音识别小项目(音频事件检测)
    • 项目相关描述
    • 项目结构
    • 数据集
    • 音频数据校验
    • 配置文件
    • 音频特征抽取
    • 模型结构设计
    • 超参数
    • 训练
  • 语音特征提取——动态时间规整(Dynamic Time Warping,简称 DTW)

语音识别应用范畴

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

语音识别框架

在这里插入图片描述

语音基本操作

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数

import scipy.io.wavfile as wavfile# 读取 WAV 文件
file_path = 'path_to_your_audio_file.wav'
sampling_rate, data = wavfile.read(file_path)# 获取采样率
print(f'Sampling Rate: {sampling_rate} Hz')# 获取音频长度
# 音频长度 = 样本数 / 采样率
audio_length = data.shape[0] / sampling_rate
print(f'Audio Length: {audio_length:.2f} seconds')# 获取通道数
# 如果音频是单声道,data.shape 将返回 (样本数,)
# 如果音频是多声道,data.shape 将返回 (样本数, 通道数)
if len(data.shape) == 1:channels = 1
else:channels = data.shape[1]print(f'Number of Channels: {channels}')

使用numpy读取pcm格式音频文件

在这里插入图片描述

import numpy as np# 定义PCM文件的路径
pcm_file_path = 'path/to/your/audio.pcm'# 定义采样率和采样深度
sample_rate = 44100  # 例如,44.1 kHz
sample_depth = 16    # 例如,16-bit PCM# 读取PCM文件
def read_pcm(file_path, sample_rate, sample_depth):# 根据采样深度设置数据类型if sample_depth == 16:dtype = np.int16elif sample_depth == 32:dtype = np.int32else:raise ValueError("Unsupported sample depth: {}".format(sample_depth))# 读取二进制PCM数据并转换为NumPy数组pcm_data = np.fromfile(file_path, dtype=dtype)# 返回音频数据和采样率return pcm_data, sample_rate# 读取PCM文件数据
audio_data, sr = read_pcm(pcm_file_path, sample_rate, sample_depth)# 打印音频数据和采样率
print("Sample Rate: {} Hz".format(sr))
print("Audio Data: ", audio_data)

在这里插入图片描述

读取wav音频文件,并绘制图像

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_audio_file.wav')# 如果音频是立体声,将其转换为单声道
if audio_data.ndim > 1:audio_data = audio_data.mean(axis=1)# 创建时间轴
time_axis = np.linspace(0, len(audio_data) / sample_rate, num=len(audio_data))# 绘制音频波形
plt.figure(figsize=(15, 5))
plt.plot(time_axis, audio_data, label='Audio waveform')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Waveform of the audio file')
plt.legend()
plt.show()

读取双声道的wav音频文件,分别绘制不同声道的波形图

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_stereo_audio_file.wav')# 检查是否为双声道音频
if audio_data.ndim != 2 or audio_data.shape[1] != 2:raise ValueError("音频文件不是双声道文件")# 分离左右声道
left_channel = audio_data[:, 0]
right_channel = audio_data[:, 1]# 创建时间轴
time_axis = np.linspace(0, len(left_channel) / sample_rate, num=len(left_channel))# 绘制左声道波形
plt.figure(figsize=(15, 5))
plt.subplot(2, 1, 1)
plt.plot(time_axis, left_channel, label='Left Channel', color='blue')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Left Channel Waveform')
plt.legend()# 绘制右声道波形
plt.subplot(2, 1, 2)
plt.plot(time_axis, right_channel, label='Right Channel', color='red')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Right Channel Waveform')
plt.legend()# 显示波形图
plt.tight_layout()
plt.show()

读取一个采样率为16k的音频,分别绘制出其时域与频域的图

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.fftpack import fft# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_audio_file.wav')# 检查采样率是否为16k
if sample_rate != 16000:raise ValueError("音频文件的采样率不是16k")# 如果是立体声,取第一个通道
if audio_data.ndim == 2:audio_data = audio_data[:, 0]# 创建时间轴
time_axis = np.linspace(0, len(audio_data) / sample_rate, num=len(audio_data))# 绘制时域图
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_axis, audio_data, label='Time Domain', color='blue')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Time Domain Signal')
plt.legend()# 计算音频的 FFT(快速傅里叶变换)
n = len(audio_data)
audio_fft = fft(audio_data)
audio_fft = np.abs(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后,第一次启动失败,提示:WSL update failed 解决方案 打开Windows PowerShell 手动执行: wsl --set-default-version 2 wsl --update

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题: 打包语句:pnpm run build:pro 报错信息: Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…

【精品资料】数据安全治理解决方案(27页PPT)

引言:数据安全治理解决方案是一个综合性的体系,旨在通过策略、技术、流程和人力的有机结合,全面提升组织的数据安全防护能力,保障数据资产的安全与合规。 方案介绍:数据安全治理解决方案是组织为确保其数据资产的安全性…

Spark内核的设计原理

导读: 本期是DataFun深入浅出Apache Spark第一期的分享,主讲老师耿嘉安开场介绍了自己的从业经历,当前就职的数新网络与Spark相关的两款产品赛博数智引擎CyberEngine和赛博数据智能平台CyberData。 本次分享题目为《Spark内核的设计原理》&…

智能化一体闸门:助力行业发展

随着科技的飞速发展,智能化技术已经渗透到各个行业和领域,其中水利行业也不例外。智能化一体闸门以其高效、智能、便捷的特点,正助力着行业发展。 一、智能化一体闸门的定义与特点 智能化一体闸门,是集成了先进传感技术、自动控制…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说,Swin-Transformer就是另一种Convolution,但是解释得真就是一坨shit,这里我郑重解释一下,这是为什么? 首先,Convolution是什么? Co…

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持,‌上电即可使用的语音识别系统。‌它的应用场合相对单一,‌主要适用于智能家电、‌语音遥控器、‌智能玩具等,‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释 在 Python 中,文件操作的模式除了 w (只写)、 a (追加写)、 r (只读)外,还有以下几种常见模式:- r :可读可写。该文件必须已存在,写操…

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中,交叉熵常用于损失函数,用于评估模型的预测结果和实际标签的差异。公式: y:真是标签的概率分布,y:模型预测的概率分布 …

数据库中的内、外、左、右连接

常用的数据库连表形式: 内连接 :inner join 外连接 :outer join 左外连接 :left outer join 左连接 :left join 右外连接 right outer join 右连接: right join 全连接 full join 、union 一、内连接 内…

企业私有云的部署都有哪些方式?

如今常见的企业私有云的部署方式有自建私有云、托管私有云、虚拟私有云、混合云、容器化私有云、本地数据中心部署等。如今,企业私有云的部署呈多样化趋势,以用来满足各个企业的具体需求。以下是RAK部落小编为大家汇总的企业私有云常见的部署方式&#x…

LeetCode 58.最后一个单词的长度 C++

LeetCode 58.最后一个单词的长度 C 思路🤔: 先解决当最后字符为空格的情况,如果最后字符为空格下标就往后移动,直到不为空格才停止,然后用rfind查询空格找到的就是最后一个单词的起始位置,最后相减就是单词…

C++ 正则库与HTTP请求

正则表达式的概念和语法 用于描述和匹配字符串的工具,通过特定的语法规则,灵活的定义复杂字符串匹配条件 常用语法总结 基本字符匹配 a:匹配字符aabc:匹配字符串abc 元字符(特殊含义的字符) .:匹…

1Panel面板配置java运行环境及网站的详细操作教程

本篇文章主要讲解,通过1Panel面板实现java运行环境,部署网站并加载的详细教程。 日期:2024年7月21日 作者:任聪聪 独立博客:https://rccblogs.com/501.html 一、实际效果 二、详细操作 步骤一、给我的项目进行打包&am…

在jsPsych中使用Vue

jspsych 介绍 jsPsych是一个非常好用的心理学实验插件,可以用来构建心理学实验。具体的就不多介绍了,大家可以去看官网:https://www.jspsych.org/latest/ 但是大家在使用时就会发现,这个插件只能使用js绘制界面,或者…

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有: 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由,我的理由如下。 还有很多没有表达出来的东西,我也不知…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行,LLMs(大语言模型)再次进入人们的视野。然而,在处理特定领域查询时,大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值:阻塞赋值的赋值号用“”表示,对应的是串行执行。 对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训…