gpt4 book ai didi

python - 应如何对音频进行预处理以进行分类?

转载 作者:行者123 更新时间:2023-11-30 09:00:23 25 4
gpt4 key购买 nike

我目前正在使用 TensorFlow 的 Python API 开发一个音频分类器,使用 UrbanSound8K 数据集并尝试区分 10 个互斥的类。

音频文件长 4 秒,包含 176400 个数据点,这会导致严重的内存问题。应如何预处理音频以减少内存使用?

如何从音频中提取更有用的特征(使用卷积和池化)?

最佳答案

在声音分类方面,我个人更喜欢使用频谱图作为神经网络的输入。这样,原始音频数据就会转换为图像表示,您可以将其视为基本图像分类任务。

有很多种方法可以选择,这是我通常使用scipy做的,python_speech_featurespydub :

import numpy as np
import scipy.io.wavfile as wave
import python_speech_features as psf
from pydub import AudioSegment

#your sound file
filepath = 'my-sound.wav'

def convert(path):

#open file (supports all ffmpeg supported filetypes)
audio = AudioSegment.from_file(path, path.split('.')[-1].lower())

#set to mono
audio = audio.set_channels(1)

#set to 44.1 KHz
audio = audio.set_frame_rate(44100)

#save as wav
audio.export(path, format="wav")

def getSpectrogram(path, winlen=0.025, winstep=0.01, NFFT=512):

#open wav file
(rate,sig) = wave.read(path)

#get frames
winfunc=lambda x:np.ones((x,))
frames = psf.sigproc.framesig(sig, winlen*rate, winstep*rate, winfunc)

#Magnitude Spectrogram
magspec = np.rot90(psf.sigproc.magspec(frames, NFFT))

#noise reduction (mean substract)
magspec -= magspec.mean(axis=0)

#normalize values between 0 and 1
magspec -= magspec.min(axis=0)
magspec /= magspec.max(axis=0)

#show spec dimensions
print magspec.shape

return magspec

#convert file if you need to
convert(filepath)

#get spectrogram
spec = getSpectrogram(filepath)

首先,您需要在采样率和声道方面标准化音频文件。您可以使用优秀的 pydub 包来做到这一点(以及更多)。

之后,您需要使用 FFT 将音频信号转换为图像。您可以使用 scipy.io.wavefilepython_speech_features 的 sigproc 模来做到这一点。我喜欢幅度谱图,将其旋转 90 度,对其进行标准化,然后使用生成的 NumPy 数组作为我的卷积网络的输入。您可以通过调整 winstepNFFT 的值来更改频谱图的空间维度,以适应您的输入大小.

可能有更简单的方法来完成这一切;我使用上面的代码取得了良好的整体分类结果。

关于python - 应如何对音频进行预处理以进行分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42330830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com