Python 如何预处理音频数据以输入神经网络

Python 如何预处理音频数据以输入神经网络,python,audio,machine-learning,deep-learning,speech-recognition,Python,Audio,Machine Learning,Deep Learning,Speech Recognition,我目前正在开发一个关键词识别系统,使用深度神经网络识别从0到9的数字。我有一个说数字的人的数据集(即TIDIGITS数据集,在德克萨斯仪器公司收集),但是数据不准备输入神经网络,因为并非所有的音频数据都有相同的音频长度,加上一些文件包含几个按顺序说出的数字,如“一二三” 谁能告诉我如何将这些wav文件转换成只包含一个数字声音的1秒wav文件?有没有办法自动做到这一点?单独准备音频文件需要花费大量时间 提前谢谢你 这取决于您拥有的其他数据集,但这里有一种方法:从音频中盲目地删除一秒钟的片段,然后判

我目前正在开发一个关键词识别系统,使用深度神经网络识别从0到9的数字。我有一个说数字的人的数据集(即TIDIGITS数据集,在德克萨斯仪器公司收集),但是数据不准备输入神经网络,因为并非所有的音频数据都有相同的音频长度,加上一些文件包含几个按顺序说出的数字,如“一二三”

谁能告诉我如何将这些wav文件转换成只包含一个数字声音的1秒wav文件?有没有办法自动做到这一点?单独准备音频文件需要花费大量时间


提前谢谢你

这取决于您拥有的其他数据集,但这里有一种方法:从音频中盲目地删除一秒钟的片段,然后判断每个音频片段文件是否实际上是一个语音数字

对于每个输入音频文件,定义一个1秒的窗口,将其拉出并保存到自己的文件中,然后将此窗口进一步滑动到音频文件中,然后再次将下一个片段拉出到自己的文件中

因为我们需要一秒钟的剪辑,而且我们不知道我们的数字在源输入文件中的什么位置,一旦第一个窗口片段被保存,只需滑动100毫秒,然后拉出下一个窗口。因此,对于每个输入音频文件,我们将创建一系列重叠的片段,每个片段的起点与之前的片段仅相隔100毫秒。要轻松执行此操作,请使用命令行工具ffmpeg

在上面,parm-ss以秒为单位定义了代码段的起点。。。所以0.60将在文件中开始600ms。。。parm-t以秒为单位定义窗口的长度

因此,它的输出将是

./output/aaa.0.00.wav
./output/aaa.0.20.wav
./output/aaa.0.40.wav
./output/aaa.0.60.wav
./output/aaa.0.80.wav
./output/aaa.1.00.wav   
./output/aaa.1.20.wav
命令行上的问题。。。它不仅限于wav,其他编解码器也可以。。。现在,您有几个1秒片段音频文件从相同的输入音频中提取。。。然后我会用一个改变窗口宽度的元进程来包装上面的进程。。。石头上并没有说1秒,所以对于0.1秒到1秒不等的窗口,请执行上述所有操作。。。这将以几何方式分解生成的代码段文件数。。。如果您添加了另一个最外层的循环,其中您改变了每个窗口起始点滑动的增量时间,因为100ms也应该是一个自由变量,那么您将获得额外的积分。。。因此,您的代码应该围绕ffmpeg调用定义三个for循环(在输入文件中前进、改变窗口宽度、改变窗口幻灯片)

ffmpeg是用于音频/视频处理(以及Sox)的行业标准瑞士军刀。。。除了命令行工具集之外,ffmpeg还可以从任何语言(python、go等)调用一组库


现在执行一些ML,以确定这些片段中哪一个与已知语音数字的声音最接近,以确定保留或丢弃哪一个片段

我将按静默区域分割每个wav。从头到尾修剪沉默。然后,我会对每个部分进行FFT运算。声音开始时的较小的。然后我将频率与基本频率进行归一化。然后,我将结果作为体积、频率和时间的3d数组输入NN

你读过吗:一个免费的语音数字音频数据集。想想MNIST的音频。。。你好@ScottStensland!谢谢你的回复!我在这个项目中使用的数据集是一个需求,所以我不能真正改变它。非常感谢你的回答!我要试试这个方法!
./output/aaa.0.00.wav
./output/aaa.0.20.wav
./output/aaa.0.40.wav
./output/aaa.0.60.wav
./output/aaa.0.80.wav
./output/aaa.1.00.wav   
./output/aaa.1.20.wav