我正在使用 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
答案 0 :(得分: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的文件!
答案 1 :(得分:1)
几个月前我安装Sidekit时出现了同样的问题。
1:如果你想将Sidekit用于不涉及SVM的系统(gmm-ubm,i-vectors等),那么你可以通过编辑__init__.py
来不导入libsvm来避免这个问题。在您的情况下,它位于:
/home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py
。
在第140行(libsvm_loaded = False
上方)添加if libsvm_loaded:
,并且不会导入libsvm。
2:如果您希望能够创建基于SVM的系统(例如在示例脚本rsr2015_svm_gmm.py
中),Sidekit documentation会告诉您(在安装libsvm之后)复制{{1进入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'))
,如果您要更新Sidekit,将会替换它。