2017-03-25 16 views
7

Lần đầu tiên tôi cài đặt openCV từ nguồn sử dụng tập lệnh này: http://milq.github.io/install-opencv-ubuntu-debian Và tôi đã thử nghiệm tất cả hoạt động tốt.Sau khi cài đặt ROS Kinetic, không thể nhập OpenCV

Sau khi tôi cài đặt ROS động: http://wiki.ros.org/kinetic/Installation/Ubuntu

Và mở python3 và chạy import cv2, có lỗi sau:

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

python3 của bạn đang cố tải mô-đun python2 ?! Bạn có thể chạy các lệnh sau và dán đầu ra vào câu hỏi của bạn không ?: 'ldd/opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so',' echo $ PYTHONPATH', (trong pythonconsole) ' nhập khẩu sys; print (sys.path) ', –

Trả lời

4

Dường như vấn đề này là do ROS thêm /opt/ros/kinetic/lib/python2.7/dist-packages đến con đường python. Điều này thực sự xảy ra khi bạn kích hoạt ROS với lệnh source /opt/ros/kinetic/setup.bash. Dòng này thường được thêm vào cuối tệp bashrc của bạn, trong /home/username/.bashrc.

Giải pháp thay thế là xóa đường này khỏi tệp bashrc. Bằng cách này, gói python3 opencv sẽ được sử dụng chính xác và bạn vẫn có thể chạy source /opt/ros/kinetic/setup.bash để sử dụng ROS. Tuy nhiên, điều này không có nghĩa là bạn không thể sử dụng ROS và python3 từ cùng một môi trường.

Hy vọng rằng ai đó có thể đưa ra câu trả lời tốt hơn, nhưng điều này sẽ hoạt động cho đến lúc đó.

+1

Cách giải quyết khác của tôi không phải là xóa đường dẫn python được ROS thêm vào mà gắn thêm một anaconda vào nó, ví dụ: ' xuất PYTHONPATH = "/ home/userx/anaconda3/lib/python3.5/site-packages: $ PYTHONPATH " ' –

2

Đã xảy ra sự cố tương tự. Vấn đề là ROS tạo ra tệp cv2.so của riêng nó cho python 2 và sau đó định tuyến mọi yêu cầu nhập vào tệp đó. Đó là một sửa chữa khá dễ dàng:

đi đến thư mục site-packages của bạn

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

lưu ý, nếu bạn đang sử dụng một môi trường ảo, bạn phải nằm trong đó, và thay vào đó nên làm cái gì đó như:

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

Sau đó, buộc một sym-link mới thời gian này bằng cách sử dụng lá cờ -f

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

Và rằng nên sửa chữa nhiều thứ!

+0

làm việc ở đây cảm ơn! –

0

Bước 1: Tìm đường dẫn nơi cv2.so của bạn đã được cài đặt (nếu bạn sử dụng bánh xe python-cv để cài đặt opencv)

Bước 2: Xuất đường dẫn đến .bashrc của bạn hoặc tập tin zshrc, giống như này:

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

Nhờ @lxrd-aj

0

Thực ra, tôi cũng gặp phải vấn đề này. Tôi chỉ nhận xét ra nguồn:

/opt/ros/kinetic/setup.bash 

và sau đó, mở thiết bị đầu cuối, Trong con đường Anaconda lib tôi thực hiện:

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 là con đường nơi python3 của tôi đã được cài đặt, và /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so là đường dẫn mà opencv-python đã được cài đặt.

Tôi chưa biết tại sao lệnh này hoạt động, nhưng nó đã làm việc cho tôi để giải quyết vấn đề mà tôi không thể nhập cv2 trước đây.

+0

Và sau khi tôi thực hiện điều này, cv2.so trong /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so đã trở thành một liên kết bị hỏng. –

0

Tôi đã cố gắng xóa /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so. Bây giờ nó đang hoạt động.

0

Nếu bạn đang làm việc với anaconda, hãy kích hoạt môi trường bạn muốn làm việc và xóa thủ phạm khỏi sys.path.

Để làm như vậy, mở một python3 console, từ đó:

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

Bạn sẽ thấy một vài con đường, trong đó bạn sẽ nhận thấy:

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

Sau đó gỡ bỏ nó:

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

Thử nghiệm với python3.5 trên anaconda3 với opencv được biên dịch cục bộ. Điều này cũng có thể áp dụng cho virtualenvs.

Để có giải pháp lâu dài, hãy xóa đường dẫn '/opt/ros/kinetic/lib/python2.7/dist-packages' từ ~/.bashrc như được đề cập trong câu trả lời của @ Paul.

Các vấn đề liên quan