2017-03-25 4 views
7

Ich habe zuerst installieren OpenCV von der Quelle mit diesem Skript: http://milq.github.io/install-opencv-ubuntu-debian Und ich testete alles funktioniert gut.Nach der Installation von ROS Kinetic kann OpenCV nicht importiert werden

Nachdem ich ROS kinetische installieren: http://wiki.ros.org/kinetic/Installation/Ubuntu

und offene python3 und laufen import cv2, bekam folgende Fehlermeldung:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cv2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type 
+0

Ihr Python3 versucht ein Python2-Modul zu laden ?! Können Sie die folgenden Befehle ausführen und die Ausgabe in Ihre Frage einfügen ?: 'ldd/opt/ros/kinetisch/lib/python2.7/dist-packages/cv2.so',' echo $ PYTHONPATH', (in pythonconsole) ' System importieren print (sys.path) ', –

Antwort

4

Es sieht aus wie dieses Problem durch ROS Zugabe /opt/ros/kinetic/lib/python2.7/dist-packages zum Python-Pfad verursacht wird. Dies geschieht tatsächlich, wenn Sie ROS mit dem Befehl source /opt/ros/kinetic/setup.bash aktivieren. Diese Zeile wird oft am Ende Ihrer bashrc-Datei in /home/username/.bashrc hinzugefügt.

Eine Problemumgehung besteht darin, diese Zeile aus der Bashrc-Datei zu entfernen. Auf diese Weise werden die python3 opencv-Pakete korrekt verwendet, und Sie können weiterhin source /opt/ros/kinetic/setup.bash ausführen, um ROS zu verwenden. Dies bedeutet jedoch, dass Sie ROS und python3 nicht aus derselben Umgebung verwenden können.

Hoffentlich kann jemand eine bessere Antwort finden, aber das sollte bis dahin funktionieren.

+1

Meine Problemumgehung bestand nicht darin, den von ROS hinzugefügten Pythonpfad zu löschen, sondern ihn durch Anaconda anzuhängen, zB ' export PYTHONPATH = "/ home/userx/anaconda3/lib/python3.5/site-packages: $ PYTHONPATH " ' –

2

hatte genau das gleiche Problem. Das Problem ist, dass ROS seine eigene cv2.so-Datei für Python 2 erstellt und dann jede Importanforderung an diese Datei weiterleitet. Es ist eine ziemlich einfache Lösung:

gehen auf Ihre Website-Pakete Ordner

cd /usr/local/lib/python3.5/site-packages/ 

Note, wenn Sie eine virtuelle Umgebung verwenden, müssen Sie innerhalb dessen sein, und sollte stattdessen so etwas wie:

cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ 

Dann zwingen, einen neuer sym-Link diesmal

ln -sf /usr/local/lib/python3.5/site-packages/cv2.so cv2.so 

die -f Flag verwendet Und das sollte beheben Dinge!

+0

hier arbeiten danke! –

0

Schritt 1: Finden Sie den Pfad, in dem Ihr cv2.so installiert ist (wenn Sie das Python-cv Rad verwenden, um die opencv zu installieren)

Schritt 2: den Pfad zu Ihrem .bashrc oder .zshrc Datei exportieren, wie dies:

export PYTHONPATH="/home/userx/anaconda3/lib/python3.5/site-package‌​s:$PYTHONPATH" 

Dank @lxrd-aj

0

Eigentlich begegne ich auch dieses Problem. Ich habe gerade kommentiert-out die Quelle:

/opt/ros/kinetic/setup.bash 

und dann, das Terminal öffnen, im anaconda lib Pfad ausgeführt I:

sudo ln -sf /home/apg/miniconda3/lib/python3.6/site-packages/cv2.so /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so

/home/apg/miniconda3 der Pfad ist, wo mein python3 installiert wurde, und /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so war Der Pfad, der opencv-python wurde installiert.

Ich weiß noch nicht, warum dieser Befehl funktioniert, aber es hat mir geholfen, das Problem zu lösen, das ich zuvor nicht cv2 importieren konnte.

+0

Und nachdem ich das ausgeführt habe, ist die cv2.so in /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so zu einem defekten Link geworden. –

0

Ich habe versucht, entfernen /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so. Jetzt funktioniert es.

0

Wenn Sie mit Anaconda arbeiten, aktivieren Sie die Umgebung, von der Sie arbeiten möchten, und entfernen Sie den Übeltäter aus sys.path.

Dazu eine python3 Konsole öffnen, von denen:

>>> import sys 
>>> print('sys.path') 

Sie mehrere Pfad sehen, unter denen Sie feststellen sollten:

'/opt/ros/kinetic/lib/python2.7/dist-packages' 

es dann entfernen:

>>> sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages') 

Getestet mit Python3.5 auf Anaconda3 mit lokal kompilierten opencv. Dies gilt wahrscheinlich auch für virtualenvs.

Für eine dauerhafte Lösung entfernen Sie den Pfad '/opt/ros/kinetic/lib/python2.7/dist-packages' von ~/.bashrc wie in @ Pauls Antwort erwähnt.

Verwandte Themen