如何将 .wav 文件转换为神经网络图像?
How to convert .wav file into an image for neural network?
我正在尝试使用神经网络执行声音分类,并想将 .wav 文件格式的 4 秒音频文件转换为图像。
我更愿意使用 Librosa 库。我也想知道如何读取这张图片并将其作为输入提供给任何 CNN 模型。
我确实在这里找到了类似的 post,但它们没有解决我的问题。
这是我目前尝试过的方法:
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.pyplot
或 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]],
...,
Link 到音频文件:https://drive.google.com/file/d/1BBgOxKy2-JMOHa90DCeFVLgoA7pEblVg/view?usp=sharing
这很正常 - 您看到的是两侧的白色边框,(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
我正在尝试使用神经网络执行声音分类,并想将 .wav 文件格式的 4 秒音频文件转换为图像。
我更愿意使用 Librosa 库。我也想知道如何读取这张图片并将其作为输入提供给任何 CNN 模型。
我确实在这里找到了类似的 post,但它们没有解决我的问题。
这是我目前尝试过的方法:
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.pyplot
或 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]],
...,
Link 到音频文件:https://drive.google.com/file/d/1BBgOxKy2-JMOHa90DCeFVLgoA7pEblVg/view?usp=sharing
这很正常 - 您看到的是两侧的白色边框,(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