python - 如何将 .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.pyplot
or读取图像时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
解决方案
这是完全正常的 - 您正在查看两侧的白色边框并且(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
推荐阅读
- python - Ansible 安装和运行烧瓶服务器
- web - DNS SRV 记录查找是否安全?
- javascript - Nuxt如何传递多个参数?
- groovy - katalon / groovy if 元素不存在 else 语句
- algorithm - 请建议一种算法来比较格雷码数
- vba - application.ontime vba 传递变量
- html - 订购 Bootstrap div
- c++ - 如何在 C++ 项目中编写着色器源代码?
- node.js - 如何在 Node.js 中通过 Postfix 邮件服务器发送消息?
- java - 如何更改 2d ArrayList 中某些 ArrayList 的大小?