1

我很想使用sidekit工具包进行扬声器识别,并且我已经为 Ubuntu 安装了libsvm,我正在使用 anaconda 3.5。当我尝试导入sidekit时,出现以下导入错误

>>> import sidekit
>>> import theano
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py", 
line 141, in <module>
from sidekit.libsvm import *
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/libsvm/__init__.py", 
line 37, in <module>
from sidekit.libsvm.svm import *
File "/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/libsvm/svm.py", 
line 324, in <module>
fillprototype(libsvm.svm_get_sv_indices, None, [POINTER(svm_model), POINTER(c_int)])
File "/home/shivam/anaconda3/lib/python3.5/ctypes/__init__.py", line 360, in __getattr__
func = self.__getitem__(name)
File "/home/shivam/anaconda3/lib/python3.5/ctypes/__init__.py", line 365, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/libsvm.so.3: undefined symbol: svm_get_sv_indices
4

2 回答 2

2

尝试导入 sidekit 时,我也遇到了同样的错误。我尝试安装我能找到的每个 libsvm 包(Python 和 apt-get),但我可以修复此错误的唯一方法是从源代码下载和编译 libsvm。它并不像听起来那么糟糕——它似乎是一个很小的库——编译只需要 5 秒。

假设你已经安装了 git(apt-get install git-core),我使用的全部命令是:

cd ~/ && \
git clone https://github.com/cjlin1/libsvm.git && \
cd libsvm && \
make && \
cd python && \
make && \
cp ~/libsvm/libsvm.so.2 /usr/local/lib/python3.5/dist-packages/sidekit/libsvm/ && \
rm -rf ~/libsvm

注意:我意识到您的错误提到了 libsvm.so。3 - 我的也是,但使用 libsvm.so。2为我工作......所以这似乎是唯一包含 svm_get_sv_indices 的文件!

于 2017-04-21T14:09:10.723 回答
1

几个月前我安装 Sidekit 时遇到了同样的问题。

1:如果你想在不涉及SVM(gmm-ubm,i-vectors等)的系统上使用Sidekit,那么你可以通过编辑__init__.py不导入libsvm来避免这个问题。在您的情况下,它位于此处: /home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py. libsvm_loaded = False在第 140 行(正上方)添加if libsvm_loaded:,libsvm 将不会被导入。

2:如果您希望能够制作基于 SVM 的系统(例如在示例脚本中rsr2015_svm_gmm.py),Sidekit文档会告诉您(在 libsvm 安装后)复制libsvm.so.2.../python3.5/site-packages/sidekit/libsvm/.

如果import sidekit仍然给出相同的错误,请检查第 125 行.../python3.5/site-packages/sidekit/__init__.py并确保它显示libsvm = CDLL(os.path.join(dirname, 'libsvm.so.2'))

请注意,__init__.py如果您要更新 Sidekit,将替换 和。

于 2017-03-15T16:28:16.263 回答