© 2019-2020 CerebrumEdge Technologies Private Limited

Compiling OpenCV with CUDA and FFMpeg on Ubuntu 16.04

December 26, 2017

Goal: Compile OpenCV 3.X using CUDA and FFMpeg to accelerate Deep Learning applications consisting image/video processing

 

Environment:

Operating System => Linux Ubuntu 16.04 LTS

Python => Anaconda Python 3.5.4

CUDA =>  release 9.0, V9.0.176

OpenCV => 3.3.1

 

GPU and OpenCV

 

GPU-accelerated computing offloads compute-intensive portions of the application to the GPU, while the remainder of the code still runs on the CPU. From a user's perspective, applications simply run much faster.

 

Significant part of Computer Vision is image processing, the area that graphics accelerators were originally designed for. Other parts also support massive parallel computations and often naturally map to GPU architectures. 

 

OpenCV GPU module is written using CUDA, therefore it benefits from the CUDA ecosystem.

 

The GPU module is designed as host API extension. This design provides the user an explicit control on how data is moved between CPU and GPU memory. Although the user has to write some additional code to start using the GPU, this approach is both flexible and allows more efficient computations. In general, it is a good idea to develop the application using the CPU part of OpenCV, and then accelerate it with the GPU module.

 

A comparison of performance on CPU and GPU provided below:

Reference link is provided in the end which describes the test and conditions

 

Tesla C2050 versus Core i5-760 2.8Ghz, SSE, TBB

 

 

FFMpeg and OpenCV

 

OpenCV can use the FFmpeg library (http://ffmpeg.org/) as backend to record, convert and stream audio and video. FFMpeg is a complete, cross-reference solution. If you enable FFmpeg while configuring OpenCV, then CMake will download and install the binaries in OPENCV_SOURCE_CODE/3rdparty/ffmpeg/. To use FFMpeg at runtime, you must deploy the FFMepg binaries with your application.

 

 

Install OpenCV 3.3 with Cuda 9.0

 

Prerequisites:

 

1. Python environment (anaconda/conda).

2. CUDA 9.0 libraries installed

 

Steps

 

Step 1: Update/Upgrade pre-installed packages:

 

$sudo apt-get update

$sudo apt-get upgrade

 

 

Step 2: Install developer tools used to compile OpenCV 3.X:

 

$sudo apt-get install build-essential cmake pkg-config

 

Step 3: Install libraries and packages used to read various image formats from disk

 

$sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev

 

Step 4: Install a few libraries used to read video formats from disk.

 

$sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

$sudo apt-get install libxvidcore-dev libx264-dev

 

Step 5:Install GTK so we can use OpenCV’s GUI features

 

$sudo apt-get install libgtk-3-dev

 

Step 6: Install packages that are used to optimize various functions inside OpenCV, such as matrix operations

 

$sudo apt-get install libatlas-base-dev gfortran

 

Step 7: Clone open cv from github. Make sure you have git installed.

 

$git clone https://github.com/opencv/opencv.git

$cd opencv

$git checkout 3.3.1

$cd ..

 

Step 8: Clone opencv_contrib from github.

 

$git clone https://github.com/opencv/opencv_contrib.git

$cd opencv_contrib

$git checkout 3.3.1

$cd ..

 

 

 

Note: Please make sure that you checkout the same version for opencv_contrib  that you did for opencv  above, otherwise you could run into compilation errors.

 

Step 9: Now set up the build

 

$cd opencv

$mkdir build

$cd build

 

Step 10: Run cmake command with appropriate options

 

$cmake -D CMAKE_BUILD_TYPE=RELEASE \

            -D CMAKE_INSTALL_PREFIX=/usr/local \

            -D INSTALL_C_EXAMPLES=ON \

            -D INSTALL_PYTHON_EXAMPLES=ON \

            -D OPENCV_EXTRA_MODULES_PATH=<<Directory>>/opencv_contrib/modules \

            -D BUILD_EXAMPLES=ON \

            -D BUILD_opencv_python2=OFF \

            -D WITH_FFMPEG=1 \

            -D WITH_CUDA=ON \

            -D CUDA_GENERATION=Pascal \

            -D ENABLE_FAST_MATH=1 \

            -D CUDA_FAST_MATH=1 \

            -D WITH_CUBLAS=1 \

            -D PYTHON_DEFAULT_EXECUTABLE=/opt/anaconda/bin/python \

            -D PYTHON3_INCLUDE_DIR=/opt/anaconda/include/python3.5m \

            -D PYTHON3_LIBRARY=/opt/anaconda/lib/libpython3.5m.so \

            -D PYTHON3_PACKAGES_PATH=/opt/anaconda/lib/python3.5 \

            -D WITH_LAPACK=OFF \

            -D PYTHON3_NUMPY_INCLUDE_DIRS=/opt/anaconda/lib/python3.5/site-packages/numpy/core/include ..

 

 

Note:

  • Replace the <<Directory>> with path where opencv_contrib is cloned

  • For CUDA_GENERATION, change architecture accordingly (Pascal in our case).

  • Change Python related directories as per your installation

  • WITH_FFMPEG flag decided on compilation with FFMpeg

 

Verify the configuration before proceeding. Python (for build)  and NVIDIA CUDA in particular.

 

 

 

 

Step 10: Make the build now.

 

$make -j16

 

Where number 16 should be replaced with the number of available cores on your processor to speedup the compilation time.

 

Step 11: Install OpenCV

 

$sudo make install

 

Step 11: To access OpenCV from Python, add environment variables in .bashrc

(Change directory as per your installation. The directory site-packages contains shared object cv2.cpython-35m-x86_64-linux-gnu.so after successful installation.)

 

export PYTHONPATH=$PYTHONPATH:/opt/anaconda/lib/python3.5/site-packages

export LD_LIBRARY_PATH=/opt/anaconda/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

 

Step 12: Verify opencv import in Python

 

$ python

Python 3.5.4 |Anaconda, Inc.| (default, Nov 20 2017, 18:44:38) [GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'3.3.1'

>>> 

 

C++ codes can be tested as well. A set of sample programs are provided with OpenCV.

 

References:

  1. Realtime Computer Vision with OpenCV: http://queue.acm.org/detail.cfm?id=2206309

  2. CUDA with OpenCV: https://opencv.org/platforms/cuda.html

Share on Facebook
Share on Twitter
Please reload

Featured Posts

Compiling OpenCV with CUDA and FFMpeg on Ubuntu 16.04

December 26, 2017

1/2
Please reload

Recent Posts
Please reload

Archive
Please reload

Search By Tags
Please reload

Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square