语音识别之语音数据预处理

article/2025/10/29 8:29:45

Email:ht0909@mail.ustc.edu.cn

原创内容,转载请标明

  • 数据集

1.清华大学THCHS30中文语音数据集

data_thchs30.tgz http://cn-mirror.openslr.org/resources/18/data_thchs30.tgz

test-noise.tgz http://cn-mirror.openslr.org/resources/18/test-noise.tgz

resource.tgz http://cn-mirror.openslr.org/resources/18/resource.tgz

2.Free ST Chinese Mandarin Corpus

ST-CMDS-20170001_1-OS.tar.gz http://cn-mirror.openslr.org/resources/38/ST-CMDS-20170001_1-OS.tar.gz

  • 数据格式

语音数据文件

数据集wav格式 diff文件头 采样频率16 kHz, 采样位数16 bits, 256 samples, 2 bytes 长度

1.data_thchs30数据集:

训练集10000条语音,验证集893,测试集2495

2. st-cmds数据集:

训练集100000条语音,验证集600条,测试集2000条。

标签数据文件

参照datalist/目录下文件

1.st-cmds标签数据文件:

train.wav 语音数据路径

https://img-blog.csdnimg.cn/20181218150939248

train.syllable 语音标签数据

https://img-blog.csdnimg.cn/20181218150939291

2.thch30类似

  • 数据预处理

1.get_wav_list #得到输入语音的路径,读入语音数据路径txt

def get_wav_list(filename):'''读取一个wav文件列表,返回一个存储该列表的字典类型值ps:在数据中专门有几个文件用于存放用于训练、验证和测试的wav文件列表'''txt_obj=open(filename,'r') # 打开文件并读入txt_text=txt_obj.read()txt_lines=txt_text.split('\n') # 文本分割dic_filelist={} # 初始化字典list_wavmark=[] # 初始化wav列表for i in txt_lines:if(i!=''):txt_l=i.split(' ')          dic_filelist[txt_l[0]] = txt_l[1]list_wavmark.append(txt_l[0])txt_obj.close()return dic_filelist,list_wavmark

2.get_wav_symbol

 

def get_wav_symbol(filename):'''读取指定数据集中,所有wav文件对应的语音符号返回一个存储符号集的字典类型值'''txt_obj=open(filename,'r') # 打开文件并读入txt_text=txt_obj.read()txt_lines=txt_text.split('\n') # 文本分割dic_symbol_list={} # 初始化字典list_symbolmark=[] # 初始化symbol列表for i in txt_lines:if(i!=''):txt_l=i.split(' ')dic_symbol_list[txt_l[0]]=txt_l[1:]list_symbolmark.append(txt_l[0])txt_obj.close()return dic_symbol_list,list_symbolmark

 3.read_wav_ data #读取一个wav文件,返回声音信号的时域谱矩阵和播放时间

def read_wav_data(filename):'''读取一个wav文件,返回声音信号的时域谱矩阵和播放时间'''wav = wave.open(filename,"rb") # 打开一个wav格式的声音文件流num_frame = wav.getnframes() # 获取帧数num_channel=wav.getnchannels() # 获取声道数framerate=wav.getframerate() # 获取帧速率num_sample_width=wav.getsampwidth() # 获取实例的比特宽度,即每一帧的字节数str_data = wav.readframes(num_frame) # 读取全部的帧wav.close() # 关闭流wave_data = np.fromstring(str_data, dtype = np.short) # 将声音文件数据转换为数组矩阵形式wave_data.shape = -1, num_channel # 按照声道数将数组整形,单声道时候是一列数组,双声道时候是两列的矩阵wave_data = wave_data.T # 将矩阵转置#wave_data = wave_data return wave_data, framerate  

4. GetFrequencyFeature #wav波形 加时间窗以及时移10ms 返回输入数据

def GetFrequencyFeature3(wavsignal, fs):# wav波形 加时间窗以及时移10mstime_window = 25 # 单位mswindow_length = fs / 1000 * time_window # 计算窗长度的公式,目前全部为400固定值wav_arr = np.array(wavsignal)#wav_length = len(wavsignal[0])wav_length = wav_arr.shape[1]range0_end = int(len(wavsignal[0])/fs*1000 - time_window) // 10 # 计算循环终止的位置,也就是最终生成的窗数data_input = np.zeros((range0_end, 200), dtype = np.float) # 用于存放最终的频率特征数据data_line = np.zeros((1, 400), dtype = np.float)for i in range(0, range0_end):p_start = i * 160p_end = p_start + 400data_line = wav_arr[0, p_start:p_end]x=np.linspace(0, 400 - 1, 400, dtype = np.int64)w = 0.54 - 0.46 * np.cos(2 * np.pi * (x) / (400 - 1) ) # 汉明窗data_line = data_line * w # 加窗data_line = np.abs(fft(data_line)) / wav_lengthdata_input[i]=data_line[0:200] # 设置为400除以2的值(即200)是取一半数据,因为是对称的#print(data_input.shape)data_input = np.log(data_input + 1)return data_input

对语音输入信号加汉明窗后做傅里叶变化处理,得到模型输入。

5.GetData #读取数据,返回神经网络输入值和输出值矩阵(可直接用于神经网络训练的那种)

def GetData(self,n_start,n_amount=1):'''读取数据,返回神经网络输入值和输出值矩阵(可直接用于神经网络训练的那种)参数:n_start:从编号为n_start数据开始选取数据n_amount:选取的数据数量,默认为1,即一次一个wav文件返回:三个包含wav特征矩阵的神经网络输入值,和一个标定的类别矩阵神经网络输出值'''#当为test or valid 时随机选择thchs30或者st-cmd数据集中的语音数据bili = 2#当为train时,由于st-cmd数据是thchs30数据的10倍,因此设置bili=11使得两个数据集的数据分布相同。if(self.type=='train'):                   bili = 11# 读取一个文件if(n_start % bili == 0):filename = self.dic_wavlist_thchs30[self.list_wavnum_thchs30[n_start // bili]]list_symbol=self.dic_symbollist_thchs30[self.list_symbolnum_thchs30[n_start // bili]]else:n = n_start // bili * (bili - 1)yushu = n_start % bililength=len(self.list_wavnum_stcmds)filename = self.dic_wavlist_stcmds[self.list_wavnum_stcmds[(n + yushu - 1)%length]]list_symbol=self.dic_symbollist_stcmds[self.list_symbolnum_stcmds[(n + yushu - 1)%length]]if('Windows' == plat.system()):filename = filename.replace('/','\\') # windows系统下需要执行这一行,对文件路径做特别处理wavsignal,fs=read_wav_data(self.datapath + filename)# 获取输出特征feat_out=[]print("数据编号",n_start,filename)for i in list_symbol:if(''!=i):n=self.SymbolToNum(i)#v=self.NumToVector(n)#feat_out.append(v)feat_out.append(n)print('feat_out:',feat_out)# 获取输入特征data_input = GetFrequencyFeature3(wavsignal,fs)#data_input = np.array(data_input)data_input = data_input.reshape(data_input.shape[0],data_input.shape[1],1)#arr_zero = np.zeros((1, 39), dtype=np.int16) #一个全是0的行向量#while(len(data_input)<1600): #长度不够时补全到1600#	data_input = np.row_stack((data_input,arr_zero))#data_input = data_input.Tdata_label = np.array(feat_out)return data_input, data_label

返回该条语音的语音特征和标签特征向量,如图为语音特征维度和标签特征向量。 


http://chatgpt.dhexx.cn/article/3EXyTrAv.shtml

相关文章

中文语音识别数据集总结

目录 OpenSLR国内镜像1.Free ST Chinese Mandarin Corpus2.Primewords Chinese Corpus Set 13.爱数智慧中文手机录音音频语料库&#xff08;Mandarin Chinese Read Speech &#xff09;4.THCHS305.ST-CMDS6.MAGICDATA Mandarin Chinese Read Speech Corpus7.AISHELL7.1 AISHELL…

语音数据集整理

语音数据集整理 目录 1.Mozilla Common Voice. 2 2.翻译和口语音频的大型数据库Tatoeba. 2 3.VOiCES Dataset 3 4. LibriSpeech. 4 5.2000 HUB5 English&#xff1a;... 4 6.VoxForge&#xff1a;... 4 7.人类语音的大规模视听数据集 &#xff08;VoxCeleb&#xff09;…

语音数据集

最大的语音数据下载网站&#xff1a; openslr.org vox-celeb说话人识别数据集&#xff1a;无法下载 OpenSpeaker之声纹数据整理 - 知乎本文是OpenSpeaker系列的第二篇文章&#xff0c;全系列可参考这篇文章或者文末的专栏&#xff1a; 蘑菇炖提莫&#xff1a;OpenSpeaker&…

Ubuntu 16.04网络配置

A lazy youth, a lousy age. 1.用root账号进行登录。Files–>Computer–>etc–>network–>interfaces 2.使用以下命令可查看网卡编号、IP地址、子网掩码。 ifconfig3.使用以下命令可查看网关号。 route4.最后&#xff0c;在interfaces中填写配置信息。 2021.10…

Ubuntu20配置网络 ssh

Ubuntu20配置网络 ssh Ubuntu20的网络配置文件位置: /etc/netplan/01-network-manager-all.yaml确定要配置的地址配置VMnet8地址设置虚拟网络地址配置ubuntu地址 Ubuntu20的网络配置文件位置: /etc/netplan/01-network-manager-all.yaml 确定要配置的地址 VMnet8: 192.168.12…

Ubuntu 14.04 网络配置

VMware中网络设置有三种&#xff0c;分别是&#xff1a;NAT、桥接和Host-only。本文仅说明NAT连接&#xff0c;配好后可让虚拟机上网&#xff0c;操作简单图文并茂。 1、首先打开虚拟机的设置 2、设置成NAT模式 3、打开虚拟网络编辑器 4、打开权限 5、设置虚拟网络编辑器为…

Ubuntu如何配置桥接网络

1、Ubuntu的网络配置分类 Ubuntu的主要三种网络配置 &#xff08;1&#xff09;桥接模式&#xff1a;Ubuntu和主机各有一个IP地址。&#xff08;重点&#xff09; &#xff08;2&#xff09;NAT模式&#xff1a;Ubuntu和主机共享IP地址。 &#xff08;3&#xff09;主机模式…

VMware虚拟机Ubuntu连接网络设置

VMware虚拟机Ubuntu连接网络设置 前言 学校发了新电脑不想装双系统&#xff0c;装了VMware虚拟机&#xff0c;但是在联网是遇到了困难。在网上找了方法连接成功。现在做一下记录。 方法 一般虚拟机联网方法有两种&#xff1a;NAT 和 桥接。 参考 知乎&#xff1a;Vmware虚拟…

【Ubuntu】配置ubuntu网络

配置ubuntu网络 一、三种虚拟网络介绍二、 配置ubuntu系统使用桥接模式连接外网三、通过NAT模式让ubuntu系统连接外网四、常见问题1.解决ubuntu系统没有网络图标一、三种虚拟网络介绍 VMnet0 : 桥接模式,选中桥接模式之后,可以将VMnet0桥接到对应的物理网卡之上, 默认选中自…

Ubuntu桥接网络配置

一、虚拟机设置 点击虚拟机最上面的“虚拟机”选项&#xff0c;在打开的下拉菜单中选择最下面的“设置”选项&#xff0c;弹出“虚拟机设置”对话框&#xff1a; 在当前“硬件”选项卡&#xff0c;选择“网络适配器”&#xff0c;在右侧的网络连接中选择“桥接模式”&#xf…

Ubuntu网络配置、开发板与电脑

一、Ubuntu网络配置 1、概念 桥接&#xff1a;Ubuntu会单独由路由器分配ip地址&#xff0c;不和Windows共享ip NAT&#xff1a;Ubuntu跟主机共享ip 注意&#xff1a;某些同学Ubuntu一直无法配置联网或者ping不通局域网&#xff0c;有可能是你的虚拟网卡被删了&#xff0c;重新安…

virtualbox下ubuntu虚拟机配置网络

一、目标&#xff1a; 1.在ubuntu虚拟机内可以联通外网 2.可以通过本机ssh连接上ubuntu虚拟机 二、Virtualbox配置 1.勾选 “系统->网络” 2.配置双网卡 网卡1配置为Nat&#xff0c;网卡2配置为Host-Only 三、ubuntu虚拟机内部设置 vi /etc/netplan/00-installer-confi…

VirtualBox设置Ubuntu虚拟机网络通信

1、安装虚拟机 2、设置虚拟机上网 3、设置主机-虚拟机、虚拟机-虚拟机网络通信 4、修改虚拟机IP地址 &#xff08;1&#xff09;查看本地IP (2)查看虚拟机IP (3)修改虚拟机IP&#xff0c;切换为管理员用户 改为静态IP&#xff0c;设置dpcp4为false&#xff0c;addresses设置为…

VMware环境下Ubuntu网络的配置

实现VMware虚拟机中Ubuntu的网络连接&#xff0c;本质上是使用Ubuntu作为子机连接PC主机的网络&#xff0c;即PC共享网络到Ubuntu中。 在打开虚拟机前&#xff0c;在编辑中找到“虚拟网络编辑器”&#xff0c;并打开管理员权限&#xff08;只有在打开管理员权限后&#xff0c;才…

Ubuntu18网络配置

Ubuntu18中的网络连接配置 Ubuntu下有两种配置网络的方式&#xff1a; 通过NetManager提供的GUI配置通过/etc/netplan/*.yml的文件配置 通过NetManager进行网络配置 首先要明白&#xff0c;NetManager是Ubuntu自带的一款网络连接的配置软件&#xff0c;安装在/etc/NetworkM…

Ubuntu入门教程(4)——虚拟机Ubuntu网络配置

文章目录 1.任务背景2.任务目标3.任务实操3.1本机3.2 虚拟机 4.任务总结 1.任务背景 大家在使用虚拟机操作Ubuntu系统的时候&#xff0c;可能来回切换麻烦&#xff0c;又或者是需要下载什么资源&#xff0c;这就需要用到网络&#xff0c;这篇文章教给大家如何在虚拟机上给Ubun…

配置 Ubuntu 的网络

一、三种联网的模式 1. 桥接 VMnet0------> 主机和 Ubuntu 都有一个 ip 地址 2. NAT 模式 VMnet8-------->Ubuntu 和主机是同一个 ip 地址 3. 主机模式 VMnet1-------> 只能和主机进行通信 二、网络配置 1. 虚拟机----->设置 2. 确保网络适配器是桥接模式或…

虚拟机Ubuntu网络配置

第一步&#xff1a; 第二步&#xff1a; 注意&#xff1a;如果自动不行就使用所用网络的网卡具体操作如下 第三步&#xff1a; 第四步&#xff1a;地址和网关在主机终端中使用命令 ipcofig 获取 第五步&#xff1a;配置有线网络&#xff0c;地址要与主机地址在同一网段&#x…

ubuntu网络配置

配置ubuntu桥接网络 1> 查看网络是否链接 以是否能ping通为准&#xff0c;不要去看网络图标 ping baidu.com 2> 保证虚拟机有桥接网络 a. 虚拟机---->设置---->网络适配器------>选择桥接或者是Vmnet0 b. 编辑----->虚拟网络编辑器 如果没有vmnet0&…

ubuntu20.04网络配置

安装net-tools sudo apt-get install net-tools 2、ifconfig查看网卡设备 其中flags表中&#xff1a;running表示正在使用中。 查看设备核心网络路由表&#xff1a; route -n Destination目标网段或者主机Gateway网关地址&#xff0c;”*” 表示目标是本主机所属的网络&#xf…