2017-02-05 5 views
1

Ich tyring sidekit Toolkit für die Sprechererkennung zu verwenden, und ich habe LIBSVM für Ubuntu installiert, ich bin mit Anaconda 3.5. Wenn ich versuche, sidekit zu importieren erhalte ich folgende ImportfehlerFehler beim Import sidekit in Python auf ubuntu

>>> 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

Haben Sie die Datei '/ usr/lib/libsvm.so.3'? Oder vielleicht benötigt Python eine andere Version von 'libsvm'. – furas

+0

Ich habe diese Datei /usr/lib/libsvm.so.2, die ich installiert habe mit 'conda -c-conda-forge libsvm = 3.21' –

+0

Python benötigt' usr/lib/libsvm.so.3', aber ich don ' Ich weiß, was für ein Unterschied - vielleicht ist es eine andere Version, es wurde mit anderen C/C++ - Compiler kompiliert. – furas

Antwort

1

Ich hatte das gleiche Problem, wenn ich Sidekit vor ein paar Monaten installiert.

1: Wenn Sie Sidekit für Systeme ohne SVMs (gmm-ubm, i-vectors usw.) verwenden möchten, können Sie das Problem vermeiden, indem Sie __init__.py editieren, um libsvm nicht zu importieren. In Ihrem Fall befindet es sich hier: /home/shivam/anaconda3/lib/python3.5/site-packages/sidekit/__init__.py. Fügen Sie libsvm_loaded = False in Zeile 140 (direkt über if libsvm_loaded:) hinzu, und libsvm wird nicht importiert.

2: Wenn Sie in der Lage sein wollen SVM-basierten Systemen (wie im Beispielscript rsr2015_svm_gmm.py) zu machen, die Sidekit documentation sagt es Ihnen (nach LIBSVM Installation) kopieren libsvm.so.2 in .../python3.5/site-packages/sidekit/libsvm/.

Wenn import sidekit noch den gleichen Fehler gibt, überprüfen Linie 125 von .../python3.5/site-packages/sidekit/__init__.py und stellen Sie sicher, heißt es libsvm = CDLL(os.path.join(dirname, 'libsvm.so.2'))

Beachten Sie, dass __init__.py und ersetzt werden, wenn Sie Sidekit zu aktualisieren sind.

1

Ich habe auch genau diesen gleichen Fehler beim Importieren von Sidekit. Ich habe versucht, jedes libsvm-Paket zu installieren, das ich finden konnte (sowohl Python als auch apt-get), aber die einzige Möglichkeit, diesen Fehler zu beheben, bestand darin, libsvm von der Quelle herunterzuladen und zu kompilieren. Es ist nicht so schlimm wie es klingt - es ist eine winzige Bibliothek, es scheint - dauerte nur 5 Sekunden zu kompilieren.

Angenommen, Sie git installiert haben (apt-get install git-core), die Gesamtmenge der Befehle, die ich verwendet wurden, waren:

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 

Hinweis: Ich weiß, dass Ihr Fehler libsvm.so erwähnt. - meins tat auch, aber mit libsvm.so. arbeitete für mich ... so scheint das die einzige Datei zu sein, die svm_get_sv_indices enthält!