def dataset(modalities=0, forcetempTime=4, contactmicTime=0.2, leaveObjectOut=False, verbose=False, deriv=False):
materials = ['plastic', 'glass', 'fabric', 'metal', 'wood', 'ceramic']
X = []
y = []
objects = dict()
for m, material in enumerate(materials):
if verbose:
print 'Processing', material
sys.stdout.flush()
with open('data_processed/processed_0.1sbefore_%s_times_%.2f_%.2f.pkl' % (material, forcetempTime, contactmicTime), 'rb') as f:
allData = pickle.load(f)
for j, (objName, objData) in enumerate(allData.iteritems()):
if leaveObjectOut:
objects[objName] = {'x': [], 'y': []}
X = objects[objName]['x']
y = objects[objName]['y']
for i in xrange(len(objData['temperature'])):
y.append(m)
if deriv:
objData['force0'][i] = firstDeriv(objData['force0'][i], objData['forceTime'][i])
objData['force1'][i] = firstDeriv(objData['force1'][i], objData['forceTime'][i])
objData['temperature'][i] = firstDeriv(objData['temperature'][i], objData['temperatureTime'][i])
if modalities > 2:
# Mel-scaled power (energy-squared) spectrogram
sr = 48000
S = librosa.feature.melspectrogram(np.array(objData['contact'][i]), sr=sr, n_mels=128)
# Convert to log scale (dB)
log_S = librosa.logamplitude(S, ref_power=np.max)
if modalities == 0:
X.append(objData['force0'][i] + objData['force1'][i])
elif modalities == 1:
X.append(objData['temperature'][i])
elif modalities == 2:
X.append(objData['temperature'][i] + objData['force0'][i] + objData['force1'][i])
elif modalities == 3:
X.append(log_S.flatten())
elif modalities == 4:
X.append(objData['temperature'][i] + log_S.flatten().tolist())
elif modalities == 5:
X.append(objData['temperature'][i] + objData['force0'][i] + objData['force1'][i] + log_S.flatten().tolist())
elif modalities == 6:
X.append(objData['force0'][i] + objData['force1'][i] + log_S.flatten().tolist())
if leaveObjectOut:
return objects
else:
X = np.array(X)
y = np.array(y)
if verbose:
print 'X:', np.shape(X), 'y:', np.shape(y)
return X, y
评论列表
文章目录