在 ubuntu 上的 python 中导入 sidekit 时出错

Error in importing sidekit in python on ubuntu

我很想使用 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

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

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

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

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

请注意 __init__.py 并且如果您要更新 Sidekit 将被替换。

我在尝试导入 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!

的文件