Difference between revisions of "Jetson/Installing OpenCV"

From eLinux.org
Jump to: navigation, search
(Rephrased the intro sections again)
(Natively compiling the OpenCV library from source onboard the device: Fixed the formatting)
Line 13: Line 13:
 
== Natively compiling the OpenCV library from source onboard the device ==
 
== Natively compiling the OpenCV library from source onboard the device ==
 
First you should download & install the CUDA Toolkit by following the [[Tegra/Installing_CUDA|Installing CUDA]] instructions.
 
First you should download & install the CUDA Toolkit by following the [[Tegra/Installing_CUDA|Installing CUDA]] instructions.
 +
 
If you haven't added the "universal" repository to Ubuntu, then do it now:
 
If you haven't added the "universal" repository to Ubuntu, then do it now:
    sudo add-apt-repository universe
+
sudo add-apt-repository universe
    sudo apt-get update
+
sudo apt-get update
 
Now you need to install many libraries:
 
Now you need to install many libraries:
    # Some general development libraries
+
# Some general development libraries
    sudo apt-get install build-essential make cmake cmake-curses-gui g++
+
sudo apt-get install build-essential make cmake cmake-curses-gui g++
    # libav video input/output development libraries
+
# libav video input/output development libraries
    sudo apt-get install libavformat-dev libavutil-dev libswscale-dev
+
sudo apt-get install libavformat-dev libavutil-dev libswscale-dev
    # Video4Linux camera development libraries
+
# Video4Linux camera development libraries
    sudo apt-get install libv4l-dev
+
sudo apt-get install libv4l-dev
    # OpenGL development libraries (to allow creating graphical windows)
+
# OpenGL development libraries (to allow creating graphical windows)
    sudo apt-get install libglew1.6-dev
+
sudo apt-get install libglew1.6-dev
    # Eigen3 math development libraries
+
# Eigen3 math development libraries
    sudo apt-get install libeigen3-dev
+
sudo apt-get install libeigen3-dev
Download the source code of OpenCV for Linux onto the device.
+
 
    eg: Open a web-browser to "www.opencv.org" & click on "OpenCV for Linux/Mac", or from the command-line you can run this on the device:
+
Download the source code of OpenCV for Linux onto the device. eg: Open a web-browser to "www.opencv.org" & click on "OpenCV for Linux/Mac", or from the command-line you can run this on the device:
        wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
+
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
 +
 
 
Install the GTK development package so that OpenCV will be able to create GUI windows (such as if you attac a HDMI screen to your board):
 
Install the GTK development package so that OpenCV will be able to create GUI windows (such as if you attac a HDMI screen to your board):
    sudo apt-get install libgtk2.0-dev
+
sudo apt-get install libgtk2.0-dev
 +
 
 
Unzip the OpenCV source code:
 
Unzip the OpenCV source code:
    cd Downloads
+
cd Downloads
    unzip opencv-2.4.9.zip
+
unzip opencv-2.4.9.zip
    mv opencv-2.4.9 ~
+
mv opencv-2.4.9 ~
 +
 
 
Configure OpenCV using CMake:
 
Configure OpenCV using CMake:
    cd ~/opencv-2.4.9
+
cd ~/opencv-2.4.9
    mkdir build
+
mkdir build
    cd build
+
cd build
    cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..
+
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..
 +
 
 
If you want to customize any more of the build settings such as whether to support Firewire cameras or Qt GUI, it is easiest to use the curses interactive version of CMake from here on:
 
If you want to customize any more of the build settings such as whether to support Firewire cameras or Qt GUI, it is easiest to use the curses interactive version of CMake from here on:
    ccmake ..
+
ccmake ..
    (Change any settings you want, then click Configure and Generate).
+
(Change any settings you want, then click Configure and Generate).
 +
 
 +
 
 
Now you should be ready to build OpenCV and then install it. Unfortunately, OpenCV is currently experiencing a problem with CMake where installing the built libraries (that normally takes a few seconds) re-compiles the whole OpenCV (that normally takes close to an hour). So to save time, instead of running "make -j4 ; make install", we will build & install OpenCV using a single command.
 
Now you should be ready to build OpenCV and then install it. Unfortunately, OpenCV is currently experiencing a problem with CMake where installing the built libraries (that normally takes a few seconds) re-compiles the whole OpenCV (that normally takes close to an hour). So to save time, instead of running "make -j4 ; make install", we will build & install OpenCV using a single command.
 +
 
To build & install the OpenCV library using all 4 Tegra CPU cores (takes around 40 minutes), copying the OpenCV library to "/usr/local/include" and "/usr/local/lib":
 
To build & install the OpenCV library using all 4 Tegra CPU cores (takes around 40 minutes), copying the OpenCV library to "/usr/local/include" and "/usr/local/lib":
    sudo make -j4 install
+
sudo make -j4 install
 +
 
 
Make sure your system searches the "/usr/local/lib" folder for libraries:
 
Make sure your system searches the "/usr/local/lib" folder for libraries:
    echo "# Use OpenCV and other custom-built libraries." >> ~/.bashrc
+
echo "# Use OpenCV and other custom-built libraries." >> ~/.bashrc
    echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/" >> ~/.bashrc
+
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/" >> ~/.bashrc
    source ~/.bashrc
+
source ~/.bashrc
 +
 
 
Compile & run a few of the OpenCV sample programs. For simple programs you can just link to a few OpenCV libs, but for other programs you might as well link to all the OpenCV libs:
 
Compile & run a few of the OpenCV sample programs. For simple programs you can just link to a few OpenCV libs, but for other programs you might as well link to all the OpenCV libs:
    # Test a simple OpenCV program. Creates a graphical window, hence you should plug a HDMI monitor in or use a remote viewer such as X Tunneling or VNC or TeamViewer on your desktop.
+
# Test a simple OpenCV program. Creates a graphical window, hence you should plug a HDMI monitor in or use a remote viewer such as X Tunneling or VNC or TeamViewer on your desktop.
    cd ~/opencv-2.4.9/samples/cpp
+
cd ~/opencv-2.4.9/samples/cpp
    g++ edge.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -o edge
+
g++ edge.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -o edge
    ./edge
+
./edge
    # If you have a USB webcam plugged in to your board, then test one of the live camera programs.
+
 
    g++ laplace.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o laplace
+
# If you have a USB webcam plugged in to your board, then test one of the live camera programs.
    ./laplace
+
g++ laplace.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o laplace
    # Test a GPU accelerated OpenCV sample.
+
./laplace
    cd ../gpu
+
 
    g++ houghlines.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o houghlines
+
# Test a GPU accelerated OpenCV sample.
    ./houghlines ../cpp/logo_in_clutter.png
+
cd ../gpu
If the houghlines GPU sample program worked then you have successfully installed OpenCV and its GPU module! Now you can start building your own projects using OpenCV on CPU and GPU, such as by following the [TODO Using OpenCV with gcc and CMake] introduction tutorial or playing with the sample GPU programs in the *samples/gpu* folder of OpenCV. To get offline documentation and tutorials of OpenCV, the easiest way is to download the PDF files from the [TODO OpenCV Documentation page], or if you want offline HTML docs then try building it with *sudo apt-get install python sphinx-common python-sphinx texlive-binaries && make html_docs* then open the *“doc/_html/index.html”* page.
+
g++ houghlines.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o houghlines
 +
./houghlines ../cpp/logo_in_clutter.png
 +
 
 +
If the houghlines GPU sample program worked then you have successfully installed OpenCV and its GPU module! Now you can start building your own projects using OpenCV on CPU and GPU, such as by following the [http://docs.opencv.org/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html Using OpenCV with gcc and CMake] introduction tutorial or playing with the sample GPU programs in the '''samples/gpu''' folder of OpenCV. To get offline documentation and tutorials of OpenCV, the easiest way is to download the [http://docs.opencv.org/opencv2refman.pdf OpenCV Reference Manual] PDF file, or if you want offline HTML docs then try building it with: <code>sudo apt-get install python sphinx-common python-sphinx texlive-binaries && make html_docs</code> then open the '''"doc/_html/index.html"''' page.

Revision as of 08:17, 7 June 2014

Native vs Cross-development

Just like with CUDA development, you have two options for developing OpenCV applications for Jetson TK1:

  • native compilation (compiling code onboard the Jetson TK1)
  • cross-compilation (compiling code on an x86 desktop in a special way so it can execute on the Jetson TK1 target device).

Native compilation is generally the easiest option, but takes longer to compile, whereas cross-compilation is typically more complex to configure and debug, but for large projects it will be noticeably faster at compiling.

Prebuilt OpenCV library vs Building the OpenCV library from source

There are two options for getting the OpenCV library:

  • prebuilt library: The Jetson TK1 Support Page contains .deb packages for the prebuilt OpenCV library that you can simply install onto your device using "sudo dpkg -i <PackageName>".
  • building the library from source: If you want the latest OpenCV code, or you want to customize the OpenCV library, then follow the instructions below to compile the OpenCV library from source code.

Natively compiling the OpenCV library from source onboard the device

First you should download & install the CUDA Toolkit by following the Installing CUDA instructions.

If you haven't added the "universal" repository to Ubuntu, then do it now:

sudo add-apt-repository universe
sudo apt-get update

Now you need to install many libraries:

# Some general development libraries
sudo apt-get install build-essential make cmake cmake-curses-gui g++
# libav video input/output development libraries
sudo apt-get install libavformat-dev libavutil-dev libswscale-dev
# Video4Linux camera development libraries
sudo apt-get install libv4l-dev
# OpenGL development libraries (to allow creating graphical windows)
sudo apt-get install libglew1.6-dev
# Eigen3 math development libraries
sudo apt-get install libeigen3-dev

Download the source code of OpenCV for Linux onto the device. eg: Open a web-browser to "www.opencv.org" & click on "OpenCV for Linux/Mac", or from the command-line you can run this on the device:

wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip

Install the GTK development package so that OpenCV will be able to create GUI windows (such as if you attac a HDMI screen to your board):

sudo apt-get install libgtk2.0-dev

Unzip the OpenCV source code:

cd Downloads
unzip opencv-2.4.9.zip
mv opencv-2.4.9 ~

Configure OpenCV using CMake:

cd ~/opencv-2.4.9
mkdir build
cd build
cmake -DWITH_CUDA=ON -DCUDA_ARCH_BIN="3.2" -DCUDA_ARCH_PTX="" -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..

If you want to customize any more of the build settings such as whether to support Firewire cameras or Qt GUI, it is easiest to use the curses interactive version of CMake from here on:

ccmake ..

(Change any settings you want, then click Configure and Generate).


Now you should be ready to build OpenCV and then install it. Unfortunately, OpenCV is currently experiencing a problem with CMake where installing the built libraries (that normally takes a few seconds) re-compiles the whole OpenCV (that normally takes close to an hour). So to save time, instead of running "make -j4 ; make install", we will build & install OpenCV using a single command.

To build & install the OpenCV library using all 4 Tegra CPU cores (takes around 40 minutes), copying the OpenCV library to "/usr/local/include" and "/usr/local/lib":

sudo make -j4 install

Make sure your system searches the "/usr/local/lib" folder for libraries:

echo "# Use OpenCV and other custom-built libraries." >> ~/.bashrc
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/" >> ~/.bashrc
source ~/.bashrc

Compile & run a few of the OpenCV sample programs. For simple programs you can just link to a few OpenCV libs, but for other programs you might as well link to all the OpenCV libs:

# Test a simple OpenCV program. Creates a graphical window, hence you should plug a HDMI monitor in or use a remote viewer such as X Tunneling or VNC or TeamViewer on your desktop.
cd ~/opencv-2.4.9/samples/cpp
g++ edge.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -o edge
./edge
# If you have a USB webcam plugged in to your board, then test one of the live camera programs.
g++ laplace.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o laplace
./laplace
# Test a GPU accelerated OpenCV sample.
cd ../gpu
g++ houghlines.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_calib3d -lopencv_contrib -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_video -lopencv_videostab -o houghlines
./houghlines ../cpp/logo_in_clutter.png

If the houghlines GPU sample program worked then you have successfully installed OpenCV and its GPU module! Now you can start building your own projects using OpenCV on CPU and GPU, such as by following the Using OpenCV with gcc and CMake introduction tutorial or playing with the sample GPU programs in the samples/gpu folder of OpenCV. To get offline documentation and tutorials of OpenCV, the easiest way is to download the OpenCV Reference Manual PDF file, or if you want offline HTML docs then try building it with: sudo apt-get install python sphinx-common python-sphinx texlive-binaries && make html_docs then open the "doc/_html/index.html" page.