我正在尝试通过收集essentia(一种MIR库)的函数来编写特征提取器。
流程图如下:单个特征提取,池化,PoolAggregator,使用np.concatenate
连接以形成来自poolAggregator的整个特征列表。
即使没有导入numpy,在ipython笔记本下脚本也可以正常运行。 我只是将从上一个阶段得到的数组或浮点数聚合起来,但错误消息显示:"NameError: global name 'numpy' is not defined"
。
我已经尝试在模块顶部放置“import numpy as np”:
import numpy as np
def featureExtractor(path):
或者在函数中:
def featureExtractor(path):
import numpy as np
或者在主文件中的模块外部:
import numpy as np
from featureExtractor import featureExtractor
这些都不能解决问题,请帮助我。
以下是脚本:
from essentia.standard import *
import essentia
def featureExtractor(path):
loader = MonoLoader(filename = path)
x = loader()
pool = essentia.Pool()
spectrum = Spectrum()
w = Windowing(type = 'hann')
# Create needed objects
mfcc = MFCC()
centroid = Centroid()
for frame in FrameGenerator(x, frameSize = 1024, hopSize = 512):
mfcc_bands, mfcc_coeffs = mfcc(spectrum(w(frame))) # output: vector_real
spec_centroid = centroid(spectrum(w(frame))) # output: real
pool.add('lowlevel.mfcc', mfcc_coeffs)
pool.add('lowlevel.centroid', spec_centroid)
aggrPool = PoolAggregator(defaultStats = [ 'mean', 'var' ])(pool)
# calculate mean and var for each feature
# build a feature vector of type array
list = ['lowlevel.centroid.mean', 'lowlevel.centroid.var',
'lowlevel.mfcc.mean', 'lowlevel.mfcc.var']
feature_vec = []
for name in list:
feature = aggrPool[name]
if type(feature) != float: # for those type == array
feature_vec = np.concatenate([feature_vec,feature], axis = 0)
else: # for those type == float
feature_vec.append(feature)
return feature_vec
然后我在主文件中输入以下命令:
path = "/~/Downloads/~.wav"
from featureExtractor import featureExtractor
featureExtractor(path)
我遇到了一个错误:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-109-40b5bbac9b17> in <module>()
1 from featureExtractor import featureExtractor
2
----> 3 featureExtractor(path)
/~/ipython_notebook/featureExtractor.py in featureExtractor(path)
66 for name in list:
67 feature = aggrPool[name]
---> 68 if type(feature) != float: # for those type == array
69 feature_vec = np.concatenate([feature_vec,feature], axis = 0)
70 else: # for those type == float
NameError: global name 'numpy' is not defined
无论我把指令放在哪里,都会收到相同的错误提示(如上所述)。
import numpy as np
import numpy as np
一行,并在运行时产生错误。然后发布剩下的代码。此外,请发布完整的堆栈跟踪信息以生成您精简版本代码所产生的错误。否则,我们将不得不查看您的情况的各个方面并猜测这些部分如何组合。 - user2357112import numpy
的脚本,它能够正常运行吗?你需要将numpy安装到你的python环境中。 - EdChumfeatureExtractor.py
。 - Francis