TX2下Python3.5-OpenCV3.4环境的安装部署

How to Install OpenCV (3.4.0) on Jetson TX2

Aug 7, 2017

2018-08-08 update: Verified opencv-3.4.2 built and run OK under JetPack-3.3.

2018-03-27 update: Update for JetPack-3.2.

2018-01-29 update: 1. Updated to opencv-3.4.0; 2. Added more apt package clean-up steps at the beginning; 3. Using Qt/OpenGL backend instead of GTK+ (this resolves the ‘protobuf double free’ issue for caffe: reference); 4. Install python3/python2 ‘matplotlib’ before building opencv (this is recommended by opencv’s official documentation).

2017-10-20 update: I added installation steps for python2, as well as the resulting cmake configuration on my Jetson TX2.

When I started programming with python3 on Jetson TX2, I found that import cv2 did not work. It appeared that the pre-installed OpenCV4Tegra (2.4.13.1) only provided bindings for python2.7. After some research, I found the recommended solution to this problem was to re-compile OpenCV.

I was kind of reluctant to remove OpenCV4Tegra and re-build OpenCV by myself. But anyway I finally decided to do it. I documented the procedure below.

Prerequisite

Complete installation of JetPack-3.3 (or JetPack-3.2.1 or JetPack-3.1) on the target Jetson TX2.

Reference

Installing OpenCV Guide for Jetson TK1
Ubuntu 16.04: How to install OpenCV
Install OpenCV-Python in Fedora
Building OpenCV with OpenGL support?
Resolved: Matplotlib figures not showing up or displaying
https://jkjung-avt.github.io/opencv3-on-tx2/

Installation Steps

I’d start by cleaning up older opencv packages and installing necessary dependencies for building opencv.

Regarding the python matplotlibrc modifications below, refer to this StackOverflow thread for more details.

### Remove all old opencv stuffs installed by JetPack (or OpenCV4Tegra)
sudo apt-get purge libopencv*
### I prefer using newer version of numpy (installed with pip), so
### I'd remove this python-numpy apt package as well
sudo apt-get purge python-numpy
### Remove other unused apt packages
sudo apt autoremove
### Upgrade all installed apt packages to the latest versions (optional)
sudo apt-get update
sudo apt-get dist-upgrade
### Update gcc apt package to the latest version (highly recommended)
sudo apt-get install --only-upgrade g++-5 cpp-5 gcc-5
### Install dependencies based on the Jetson Installing OpenCV Guide
sudo apt-get install build-essential make cmake cmake-curses-gui \
                       g++ libavformat-dev libavutil-dev \
                       libswscale-dev libv4l-dev libeigen3-dev \
                       libglew-dev libgtk2.0-dev
### Install dependencies for gstreamer stuffs
sudo apt-get install libdc1394-22-dev libxine2-dev \
                       libgstreamer1.0-dev \
                       libgstreamer-plugins-base1.0-dev
### Install additional dependencies according to the pyimageresearch
### article
sudo apt-get install libjpeg8-dev libjpeg-turbo8-dev libtiff5-dev \
                       libjasper-dev libpng12-dev libavcodec-dev
sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev \
                       libatlas-base-dev gfortran
sudo apt-get install libopenblas-dev liblapack-dev liblapacke-dev
### Install Qt5 dependencies
sudo apt-get install qt5-default
### Install dependencies for python3
sudo apt-get install python3-dev python3-pip python3-tk
sudo pip3 install numpy
sudo pip3 install matplotlib
### Modify matplotlibrc (line #41) as 'backend      : TkAgg'
sudo vim /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
### Also install dependencies for python2
### Note that I install numpy with pip, so that I'd be using a newer
### version of numpy than the apt-get package
sudo apt-get install python-dev python-pip python-tk
sudo pip2 install numpy
sudo pip2 install matplotlib==2.2.4 # 最新版的matplotlib 不支持python2.7
### Modify matplotlibrc (line #41) as 'backend      : TkAgg'
sudo vim /usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc

Before downloading and building opencv-3.4.0, I’d first do some modifications according to this post, in order to fix OpenGL related compilation problems . More specifically, I’d modify /usr/local/cuda/include/cuda_gl_interop.h and fix the symbolic link of libGL.so

sudo vim /usr/local/cuda/include/cuda_gl_interop.h
cd /usr/lib/aarch64-linux-gnu/
sudo ln -sf tegra/libGL.so libGL.so

Here’s how the relevant lines (line #62~68) of cuda_gl_interop.h look like after the modification.

//#if defined(__arm__) || defined(__aarch64__)
//#ifndef GL_VERSION
//#error Please include the appropriate gl headers before including cuda_gl_interop.h
//#endif
//#else
 #include <GL/gl.h>
//#endif

Next, download opencv-3.4.0 source code, cmake and compile. Note that opencv_contrib modules (cnn/dnn stuffs) would cause problem on pycaffe, so after some experiments I decided not to include those modules at all.

### Download opencv-3.4.0 source code
mkdir -p ~/src
cd ~/src
wget https://github.com/opencv/opencv/archive/3.4.0.zip \
       -O opencv-3.4.0.zip
unzip opencv-3.4.0.zip
### Build opencv (CUDA_ARCH_BIN="6.2" for TX2, or "5.3" for TX1)
cd ~/src/opencv-3.4.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.2" -D CUDA_ARCH_PTX="" \
        -D WITH_CUBLAS=ON -D ENABLE_FAST_MATH=ON -D CUDA_FAST_MATH=ON \
        -D ENABLE_NEON=ON -D WITH_LIBV4L=ON -D BUILD_TESTS=OFF \
        -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF \
        -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j4
sudo make install

Just for reference, here’s the resulting opencv-3.4.0 cmake configuration for my Jetson TX2 system.

-- General configuration for OpenCV 3.4.0 =====================================
--   Version control:               unknown
-- 
--   Platform:
--     Timestamp:                   2018-01-29T07:58:45Z
--     Host:                        Linux 4.4.38-tegra aarch64
--     CMake:                       3.5.1
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
-- 
--   CPU/HW features:
--     Baseline:                    NEON FP16
--       required:                  NEON
--       disabled:                  VFPV3
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ Compiler:                /usr/bin/c++  (ver 5.4.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):
--     Linker flags (Debug):
--     ccache:                      NO
--     Precompiled headers:         YES
--     Extra dependencies:          dl m pthread rt /usr/lib/aarch64-linux-gnu/libGLU.so /usr/lib/aarch64-linux-gnu/libGL.so cudart nppc nppial nppicc nppicom nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cufft -L/usr/local/cuda-8.0/lib64
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 calib3d core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev dnn features2d flann highgui imgcodecs imgproc ml objdetect photo python2 python3 python_bindings_generator shape stitching superres video videoio videostab
--     Disabled:                    js world
--     Disabled by dependency:      -
--     Unavailable:                 java ts viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI: 
--     QT:                          YES (ver 5.5.1)
--       QT OpenGL support:         YES (Qt5::OpenGL 5.5.1)
--     GTK+:                        NO
--     OpenGL support:              YES (/usr/lib/aarch64-linux-gnu/libGLU.so /usr/lib/aarch64-linux-gnu/libGL.so)
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.8)
--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver )
--     WEBP:                        build (ver encoder: 0x020e)
--     PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.2.54)
--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.0.6)
--     JPEG 2000:                   /usr/lib/aarch64-linux-gnu/libjasper.so (ver 1.900.1)
--     OpenEXR:                     build (ver 1.7.1)
-- 
--   Video I/O:
--     DC1394:                      YES (ver 2.2.4)
--     FFMPEG:                      YES
--       avcodec:                   YES (ver 56.60.100)
--       avformat:                  YES (ver 56.40.101)
--       avutil:                    YES (ver 54.31.100)
--       swscale:                   YES (ver 3.1.101)
--       avresample:                NO
--     GStreamer:                   
--       base:                      YES (ver 1.8.3)
--       video:                     YES (ver 1.8.3)
--       app:                       YES (ver 1.8.3)
--       riff:                      YES (ver 1.8.3)
--       pbutils:                   YES (ver 1.8.3)
--     libv4l/libv4l2:              1.10.0 / 1.10.0
--     v4l/v4l2:                    linux/videodev2.h
--     gPhoto2:                     NO
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (built-in)
-- 
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.2.92)
--     Custom HAL:                  YES (carotene (ver 0.0.1))
-- 
--   NVIDIA CUDA:                   YES (ver 8.0, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             62
--     NVIDIA PTX archs:
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/nvidia/src/opencv-3.4.0/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.12)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython2.7.so (ver 2.7.12)
--     numpy:                       /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.14.0)
--     packages path:               lib/python2.7/dist-packages
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.5.2)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.5m.so (ver 3.5.2)
--     numpy:                       /usr/local/lib/python3.5/dist-packages/numpy/core/include (ver 1.14.0)
--     packages path:               lib/python3.5/dist-packages
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Matlab:                        NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------

-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/src/opencv-3.4.0/build

To verify the installation:

ls /usr/local/lib/python3.5/dist-packages/cv2.*
/usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-aarch64-linux-gnu.so
ls /usr/local/lib/python2.7/dist-packages/cv2.*
/use/local/lib/python2.7/dist-packages/cv2.so
python3 -c 'import cv2; print(cv2.__version__)'
3.4.0
python2 -c 'import cv2; print(cv2.__version__)'
3.4.0

Bonus:

With opencv-3.4.0 properly installed on the Jetson TX2, we could use a python script to capture and display live video from either the Jetson onboard camera, a USB webcam or an IP CAM. Just follow along this post: How to Capture and Display Camera Video with Python on Jetson TX2.

OPENCV_CONTRIB 安装配置

首先,先将下载的opencv_contrib-3.4.0包,将其放进opencv-3.4.0中,之后进入opencv根目录:

sudo mkdir build
cd /build
sudo gedit CMakeList.txt

输入以下内容:

cmake \  
    -DCMAKE_BUILD_TYPE=Release \  
    -DCMAKE_INSTALL_PREFIX=/usr/local \  
    -DBUILD_PNG=OFF \  
    -DBUILD_TIFF=OFF \  
    -DBUILD_TBB=OFF \  
    -DBUILD_JPEG=OFF \  
    -DBUILD_JASPER=OFF \  
    -DBUILD_ZLIB=OFF \  
    -DBUILD_EXAMPLES=OFF \  
    -DBUILD_opencv_java=OFF \  
    -DBUILD_opencv_python2=OFF \  
    -DBUILD_opencv_python3=ON \  
    -DENABLE_PRECOMPILED_HEADERS=OFF \  
    -DWITH_OPENCL=OFF \  
    -DWITH_OPENMP=OFF \  
    -DWITH_FFMPEG=ON \  
    -DWITH_GSTREAMER=OFF \  
    -DWITH_GSTREAMER_0_10=OFF \  
    -DWITH_CUDA=ON \  
    -DWITH_GTK=ON \  
    -DWITH_VTK=OFF \  
    -DWITH_TBB=ON \  
    -DWITH_1394=OFF \  
    -DWITH_OPENEXR=OFF \  
    -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 \  
    -DCUDA_ARCH_BIN=6.2 \  
    -DOPENCV_EXTRA_MODULES_PATH = /home/nvidia/src/opencv-3.4.0/opencv_contrib-3.4.0/modules \
    -DCUDA_ARCH_PTX="" \  
    -DINSTALL_C_EXAMPLES=ON \  
    -DINSTALL_TESTS=OFF \  
    -DOPENCV_TEST_DATA_PATH="" \  
    ../opencv  

之后:

cmake ..
...
make -j6
...
sudo make install

参考:

TX2–OpenCV3.2+OpenCV_contrib3.2+CUDA8.0+python3.5安装

ERROR

.....
--error:
dpkg: dependency problems prevent configuration of dh-python:
 dh-python depends on python3:any (>= 3.3.2-2~); however:
  Package python3 is not configured yet.

dpkg: error processing package dh-python (--configure):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Errors were encountered while processing:
 python3
 python3-dev
 python3-pip
 python3-pkg-resources
 python3-setuptools
 python3-tk
 python3-wheel
 dh-python
E: Sub-process /usr/bin/dpkg returned an error code (1)

--method:
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
sudo mkdir /var/lib/dpkg/info/
sudo apt-get update
...
sudo apt-get -f install
...
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
-------------------------------------------------------------------------------------------
--error:
Errors were encountered while processing:
 /var/cache/apt/archives/libgtk-3-bin_3.18.9-1ubuntu3.3_arm64.deb
 /var/cache/apt/archives/dictionaries-common_1.26.3_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

--method:
-sudo rm -rf xxxx   (need overwriting file)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值