版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大数据采集与预处理技术*
*项目三语音直播数据采集与预处理序号软件配置要求1OBS最新版本2Librosa等最新版本一、项目目标:1、根据应用需求确定语音数据采集方法,并完成语音数据采集;2、对采集的语音数据进行去噪、归一化、采样频率转换、语音特征提取、静音去除、语音切分、信号增强等预处理操作;3、根据训练模型要求完成语音数据文本转录、音频分割、标签标注等,为不同模型准备训练数据。二、环境要求:音频预处理目标是通过一系列处理任务提高数据质量、减少噪声和干扰、增强特征的可分性,使其更适用于机器学习和深度学习模型。对于自行采集的音频数据需要进行一系列的处理,保证音频数据的质量。importnoisereduceasnrfromscipy.ioimportwavfilefromscipy.signalimportwienerimportlibrosaimportnumpyasnp#读数据并做基本处理rate,audio_data=wavfile.read("audio/example1.wav")#统一转为立体声处理(单声道转双声道)iflen(audio_data.shape)==1:audio_data=np.column_stack((audio_data,audio_data))reduced_audio,rate=noiseReduce1(audio_data,rate)#保存结果wavfile.write("audio/reduced_example.wav",rate,reduced_audio)#去除噪音,audio_data是读取的音频数据,sr是采样率defnoiseReduce1(audio_data,sr=None):#分别处理左右声道
reduced_audio=np.zeros_like(audio_data)#自适应降噪
forchinrange(audio_data.shape[1]):reduced_channel=nr.reduce_noise(y=audio_data[:,ch],sr=sr,n_std_thresh_stationary=1.5)#将结果存入对应声道
reduced_audio[:,ch]=reduced_channelreturnreduced_audio,sr(2)多重去噪#多重降噪处理方法二,audio_data是音频数据,sr是采样率defnoiseReduce2(audio_data,sr=None):#转换为float类型处理(避免整数运算问题)
audio_float=audio_data.astype(np.float32)/32768.0#假设原始是int16#分别处理左右声道
reduced_audio=np.zeros_like(audio_float)forchinrange(audio_float.shape[1]):#使用Wiener滤波进行降噪,mysize类似滤波核大小,越大降噪越好,但是声音细节会越模糊
filtered_data=wiener(audio_float[:,ch],mysize=15)reduced_channel=nr.reduce_noise(y=filtered_data,sr=sr)#限制数值范围并存入结果
reduced_audio[:,ch]=np.clip(reduced_channel,-1.0,1.0)#返回去噪后的音频
return(reduced_audio*32767).astype(16),sr(3)静音消除可以通过设置音量阈值检测静音区段,利用信号幅值低于阈值的特征,将静音部分删除以减小数据冗余。#去除静音,top_db是设置的声压级阈值,默认值为20defremove_silence(audio_data,sr=None,top_db=20):trimmed_channels=[]forchinrange(audio_data.shape[1]):#检测非静音区间,返回每个非静音区间的起始和结束位置。
non_silent_intervals=librosa.effects.split(audio_data[:,ch],top_db=top_db)#拼接非静音区间,将所有非静音区间拼接成一个新的音频数据数组
trimmed_channel=np.concatenate([audio_data[start:end,ch]forstart,endinnon_silent_intervals])#返回处理后的音频
trimmed_channels.append(trimmed_channel)#统一长度(取最短的声道长度)
min_length=min(len(ch)forchintrimmed_channels)trimmed_data=np.zeros((min_length,audio_data.shape[1]),dtype=audio_data.dtype)forchinrange(audio_data.shape[1]):trimmed_data[:,ch]=trimmed_channels[ch][:min_length]returntrimmed_data,sr(4)特征提取
对于音频分类、情感识别、语音识别等任务,需要将音频信号转换为能够表达其特性的数值形式,通常包括频谱、MFCC(梅尔频率倒谱系数)、能量、零过率等。可以计算频域或时域特征,例如频谱、MFCC、能量、零过率和Chroma特征,帮助模型提取和识别音频的关键特性。#特征提取defextract_features(audio_data,sr=None):#确保是单声道(Librosa要求)iflen(audio_data.shape)==2:audio_data=np.mean(audio_data,axis=1)#合并声道或取左声道#检查并转换数据类型为浮点类型,librosa归一化
ifnotnp.issubdtype(audio_data.dtype,np.floating):audio_data=librosa.util.normalize(audio_data.astype(np.float32))#将提取的特征存入字典
features={#计算梅尔频率倒谱系数(MFCC),声音的指纹,把声音分解成不同频率成分“配方表”,n_mfcc是要提取多少层,越大包含的细节越多
'mfccs':librosa.feature.mfcc(y=audio_data,sr=sr,n_mfcc=13),#计算Chroma特征,只看声音属于哪个音符(忽略高低音区)
'chroma_stft':librosa.feature.chroma_stft(y=audio_data,sr=sr),#计算频谱质心,像"声音的亮度指标",告诉你声音是"低沉"还是"尖锐"'spectral_centroid':librosa.feature.spectral_centroid(y=audio_data,sr=sr),#计算带宽,像"声音的胖瘦程度",测量频率分布的分散程度
'spectral_bandwidth':librosa.feature.spectral_bandwidth(y=audio_data,sr=sr),#计算零交叉率,像"声音的抖动次数",数一秒钟内声音波形穿过零点的次数
'zero_crossing_rate':librosa.feature.zero_crossing_rate(y=audio_data),#计算能量(RootMeanSquare),像是"声音的力气大小",测量声音的响度
'rms':librosa.feature.rms(y=audio_data)}returnfeatures#读取音频文件rate,audio_data=wavfile.read("audio/example1.wav")#统一转为立体声处理(单声道转双声道)iflen(audio_data.shape)==1:audio_data=np.column_stack((audio_data,audio_data))reduced_audio1,rate=noiseReduce1(audio_data,rate)reduced_audio2,rate=noiseReduce2(reduced_audio1,rate)trimmed_data,rate=remove_silence(reduced_audio2,rate)print(trimmed_data.shape)#保存结果wavfile.write("audio/trimmed_example.wav",rate,reduced_audio2)features=extract_features(trimmed_data,rate)print(features)(6)时间伸缩对于语音识别、音频分类、数据增强、音乐节奏调整等任务,需要改变音频的时长而不改变频率,用于数据增强或节奏调整。时间伸缩可以通过调整音频信号的播放速度实现,在保持频率不变的同时增加或减少时长。#时间伸缩,audio_data是读取的音频数据,sr是采样率#stretch_factor是时间伸缩因子,大于1表示加速,小于1表示减速deftime_stretch_audio(audio_data,sr=None,stretch_factor=1.2):#确保是单声道(Librosa要求)iflen(audio_data.shape)==2:audio_data=np.mean(audio_data,axis=1)#合并声道或取左声道
#对音频数据进行时间伸缩
stretched_data=librosa.effects.time_stretch(audio_data,rate=stretch_factor)returnstretched_data,sr(7)频率偏移频率偏移通常是用于语音识别数据增广、音乐分类、乐器识别等任务,预处理需要改变音频信号的频率而保持时长不变,主要用于数据增广和适应音高差异。可以使用FFT频率平移、音高平移或变调算法,使信号的音高上下偏移,从而创造新的数据样本。#频率偏移,audio_data是读取的音频数据,sr是采样率#n_steps是音高偏移的步长(正数表示升高音高,负数表示降低音高)defpitch_shift_audio(audio_data,sr=None,n_steps=2):#确保是单声道(Librosa要求)iflen(audio_data.shape)==2:audio_data=np.mean(audio_data,axis=1)#合并声道或取左声道
#对音频数据进行音高平移
shifted_data=librosa.effects.pitch_shift(audio_data,sr=sr,n_steps=n_steps)returnshifted_data,sr(8)规范化和降维对于大规模数据集预处理进行数据压缩,可以加速模型训练,需要对音频进行特征提取,对提取的特征归一化并使用降维方法简化特征空间,提升计算效率。可以使用MinMaxScaler或StandardScaler进行特征归一化,并使用PCA等降维方法减少特征维度。fromsklearn.preprocessingimportMinMaxScaler,StandardScalerfromsklearn.decompositionimportPCA#频率偏移处理,audio_data是读取的音频数据,sr是采样率#n_mfcc是提取的MFCC特征数量,n_components是PCA降维后的特征维度数,scaling_method是归一化方法,默认"minmax"defpreprocess_audio_features(audio_data,sr=None,n_mfcc=13,scaling_method='minmax',n_components=10):#确保是单声道(Librosa要求)iflen(audio_data.shape)==2:audio_data=np.mean(audio_data,axis=1)#合并声道或取左声道
#提取MFCC特征,并进行转置,以适应每行一条特征的格式
mfccs=librosa.feature.mfcc(y=audio_data,sr=sr,n_mfcc=n_mfcc).T#选择归一化方法
ifscaling_method=='minmax':scaler=MinMaxScaler()elifscaling_method=='standard':scaler=StandardScaler()else:raiseValueError("Invalidscalingmethod.Choose'minmax'or'standard'.")#归一化特征
normalized_features=scaler.fit_transform(mfccs)#使用PCA进行降维
pca=PCA(n_components=n_components)reduced_features=pca.fit_transform(normalized_features)returnreduced_features(9)数据增广对于语音识别、情感识别、环境音分类等任务,需要通过各种变换(如加噪、时间伸缩、频率偏移)增加数据集的样本量,改善模型的泛化能力。数据增广技术可以通过加噪声、时间伸缩、频率偏移等生成新的音频样本,从而增强数据多样性。参照前面代码案例.defadd_noise(data,noise_factor=0.005):"""为音频数据添加随机噪声"""noise=np.random.randn(len(data))augmented_data=data+noise_factor*noisereturnnp.clip(augmented_data,-1.0,1.0)#限制音频幅值范围deftime_stretch(data,rate=1.0):"""改变音频的播放速度(时间伸缩)"""returnlibrosa.effects.time_stretch(data,rate=rate)defpitch_shift(data,sr,n_steps=2):"""调整音频的音高(频率偏移)"""returnlibrosa.effects.pitch_shift(data,sr=sr,n_steps=n_steps)defaugment_audio(audio_data,sr=None,noise_factor=0.005,stretch_rate=1.0,pitch_steps=2):#加噪音增广
noisy_data=add_noise(audio_data,noise_factor)#时间伸缩增广
stretched_data=time_stretch(audio_data,rate=stretch_rate)#频率偏移增广
shifted_data=pitch_shift(audio_data,sr,n_steps=pitch_steps)returnnoisy_data,stretched_data,shifted_data(10)归一化对于大多数深度学习模型,需要进行数据前处理、音频特征提取、增强数据一致性。将音频数据的幅值归一化到同一范围,以便特征的分布一致,提高模型的训练稳定性。常用的归一化方法包括将数据缩放到[0,1]或[-1,1]区间,这样可以避免音频数据幅值差异过大对模型的影响。#归一化处理,audio_data是librosa.load读取的音频数据,sr是采样率,默认使用差值标准化minmaxdefnormalize_audio(audio_data,sr=None,norm_type="minmax"):#归一化处理
ifnorm_type=="minmax":#将数据缩放到[0,1]或[-1,1]区间
normalized_data=audio_data/np.max(np.abs(audio_data))elifnorm_type=="standard":#使用Z-score标准化,将数据调整为均值为0,标准差为1mean=np.mean(audio_data)std=np.std(audio_data)normalized_data=(audio_data-mean)/stdelse:raiseValueError("Unsupportednormalizationtype.Use'minmax'or'standard'.")returnnormalized_data,sr综合应用1)将所有要进行预处理音频文件放到指定文件夹,如audios,然后遍历所有音频文件;2)对于读取的音频可以先做音频数据增广,也就是通过加噪声、调整速度、音高调整增加数据集,这些数据可以保存到用来训练模型的数据集,可根据实际要求决定是否执行该操作;3)对于模型训练一般要抽取不同特征进行标准化后输入给模型,抽取特征之前可以作一些预处理,如去除噪声、去除静音、去除背景音;4)进行特征提取,特征可以用来训练模型,特征一般需要做标准化处理,防止音频数据幅值差异过大对模型的影响;5)可以根据需要选择是否降维,特征值结合标签数据可以用来训练模型。预处理代码参考:importos,librosaimportnumpyasnpimportsoundfileassf#数据增广,audiosPath是音频存放的文件夹,output_dir是音频输出的文件夹defaugmentAudio(audios_path=None,output_dir=None):audios=os.listdir(audios_path)#遍历音频文件
foraudioinaudios:audio_path=os.path.join(audios_path,audio)data,sr=librosa.load(audio_path,sr=None) #读取音频文件
#步骤一,音频数据增广,加噪声、调整速度、音高调整,可根据实际要求决定是否执行该操作
noisy_data,stretched_data,shifted_data=augment_audio(data,sr=sr,noise_factor=0.005,stretch_rate=1.5,pitch_steps=2)#保存数据
sf.write(f"{output_dir}/"+audio+"noisy.wav",noisy_data,sr)sf.write(f"{output_dir}/"+audio+"stretched.wav",stretched_data,sr)sf.write(f"{output_dir}/"+audio+"pitch_shifted.wav",shifted_data,sr)#特征抽取defaudioPreprocess(audios_path=None):audios=os.listdir(au
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职船舶工程技术(船舶舾装工艺)试题及答案
- 2025年大学护理学(急危重症监护)试题及答案
- 2025年中职区块链技术(区块链基础原理)试题及答案
- 2025-2026年五年级科学(专项突破)下学期期中测试卷
- 八年级化学(化学方程式)2026年上学期期中测试卷
- 2025年大学服装与服饰设计(服装设计)试题及答案
- 大学(经济学)国际经济学基础2026年阶段测试题及答案
- 2025年中职环境监测技术(大气监测)试题及答案
- 2025年高职(铁道工程技术)铁道线路施工试题及答案
- 中职第三学年(计算机应用)办公自动化2026年阶段测试题及答案
- 台球厅承包合同协议书
- 地质灾害危险性评估服务方案
- 兵团屯垦戍边事业课件
- 统计学课后答案-(贾俊平版)人大出版
- 08.性传播疾病幻灯片
- 小学英语Christmas圣诞节课件
- 体检中心体检软件方案
- 60万吨玉米深加工工程淀粉及味精生产项目总体试车方案
- 师德师风学生问卷调查表
- 人教版高中物理选择性必修三 第1章第1节 分子动理论的基本内容
- (新版)民用航空安全检查规则100题
评论
0/150
提交评论