首页 > 解决方案 > 如何将 .wav 文件转换为神经网络的图像?

问题描述

我正在尝试使用神经网络执行声音分类,并希望将 .wav 文件格式的 4 秒音频文件转换为图像。

我更喜欢使用 Librosa 库。此外,我想知道如何阅读此图像并将其作为任何 CNN 模型的输入提供。

我确实在这里找到了类似的帖子,但他们没有解决我的问题。

这是我到目前为止所尝试的:

y, sr = librosa.load('36902-3-2-0.wav')
S = librosa.feature.melspectrogram(y, sr, n_mels=128, fmax=8000)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max), fmax=8000)
plt.savefig('mel.png')

我得到这张图片:

在此处输入图像描述

当我尝试使用matplotlib.pyplotor读取图像时cv2,我得到的只是一个充满255值的数组:

array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       ...,

音频文件链接:https ://drive.google.com/file/d/1BBgOxKy2-JMOHa90DCeFVLgoA7pEblVg/view?usp=sharing

标签: pythondeep-learninglibrosa

解决方案


这是完全正常的 - 您正在查看两侧的白色边框并且(255,255,255)是白色的。

尝试环顾坐标200,200

print(array[200:210, 200:210])

array([[[ 96,  87, 235],
        [ 96,  87, 235],
        [ 96,  87, 235],
        [ 95,  90, 237],
        [ 95,  90, 237],
        ...
        ...

或者看看平均值:

print(array.mean())

161.20984439300412

推荐阅读