代码如下:
# -*- coding: utf-8 -*-
#导入相关的库
from keras.models import Model
from keras.layers import Input, Activation, Conv1D, Lambda, Add, Multiply, BatchNormalization
from keras.optimizers import Adam, SGD
from keras import backend as K
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import random
import pickle
import glob
from tqdm import tqdm
import os
from python_speech_features import fbank
import scipy.io.wavfile as wav
import librosa
from IPython.display import Audio
#读取数据集文件
text_paths = glob.glob('E:\叶儿\课程课程\毕设\data2try/*.trn')
total = len(text_paths)
print(total)
with open(text_paths[0], 'r', encoding='utf8') as fr:
lines = fr.readlines()
print(lines)
#数据集文件trn内容读取保存到数组中
texts = []
paths = []
for path in text_paths:
with open(path, 'r', encoding='utf8') as fr:
lines = fr.readlines()
line = lines[0].strip('\n').replace(' ', '')
texts.append(line)
paths.append(path.rstrip('.trn'))
print(paths[0], texts[0])
#根据数据集标定的音素读入
def load_and_trim(path):
audio, sr = librosa.load(path)
energy = librosa.feature.rms(audio)
frames = np.nonzero(energy >= np.max(energy) / 5)
indices = librosa.core.frames_to_samples(frames)[1]
audio = audio[indices[0]:indices[-1]] if indices.size else audio[0:0]
return audio, sr
#可视化,显示语音文件的Fbank图
def visualize(index):
path = paths[index]
text = texts[index]
print('Audio Text:', text)
audio, sr = load_and_trim(path)
plt.figure(figsize=(12, 3))
plt.plot(np.arange(len(audio)), audio)
plt.title('Raw Audio Signal')
plt.xlabel('Time')
plt.ylabel('Audio Amplitude')
plt.show()
feature = fbank(audio, sr,nfft=512)
print('Shape of Fbank:', feature.shape)
File "", line 91, in
Audio(visualize(0))
File "", line 76, in visualize
print('Shape of Fbank:', feature.shape)
AttributeError: 'tuple' object has no attribute 'shape'
我破了这个报错了家人们!!
我看了一下fbank函数的解释,fbank的函数返回是个元组,这个元组应该是有俩元素,一个是特征向量一个是每一帧的对数能量。我把fbank函数全换成logfbank函数就行啦!因为logfbank函数返回的只有一个特征向量!
原因不是元组不可改变,是你搞错了类型。fbank函数返回的是个元组,你却把它当成自定义类在访问。
tuple类型不能这么用,你可以试试
print('Shape of Fbank:',np.array(feature))
有帮助的话望采纳!谢谢