Build opencv_contrib with dnn module {#tutorial_dnn_build}
====================================

Introduction
------------
opencv_dnn module is placed in the secondary [opencv_contrib](https://github.com/Itseez/opencv_contrib) repository,
which isn't distributed in binary form, therefore you need to build it manually.

To do this you need to have installed: [CMake](http://www.cmake.org/download), git, and build system (*gcc* with *make* for Linux or *MS Visual Studio* for Windows)

Steps
-----
-# Make any directory, for example **opencv_root**

-# Clone [opencv](https://github.com/Itseez/opencv) and [opencv_contrib](https://github.com/Itseez/opencv_contrib) repos to the **opencv_root**.
   You can do it in terminal like here:
@code
cd opencv_root
git clone https://github.com/Itseez/opencv
git clone https://github.com/Itseez/opencv_contrib
@endcode

-# Run [CMake-gui] and set source and build directories:

    - Set source code directory to **opencv_root**/opencv;

    - Set binaries directory, for example, to **opencv_root**/build_opencv.
      This directory will contain built libraries.
      ![](images/build_1.png)

-# Configure opencv:
       - press *Configure*;
       - choose the preferred project generator (Makefiles for Linux, MS Visual Studio for Windows);
       - also you can set many opencv build options, for more details see @ref tutorial_linux_install.
         ![](images/build_2.png)

-# In the appeared list of build parameters find parameter `OPENCV_EXTRA_MODULES_PATH` and set it to the **opencv_root**/opencv_contrib.
   ![](images/build_3.png)

-# *Configure* the project again, and set build options of dnn module:

    - `BUILD_opencv_dnn` parameter must exist and be checked.

    - dnn module covers waste part of [Caffe](http://caffe.berkeleyvision.org) framework functionality.
      However, to load Caffe networks libprotobuf is required.
      You you can uncheck `BUILD_LIBPROTOBUF_FROM_SOURCES` flag to try use protobuf installed in your system.
      Elsewise libpotobuf will be built from opencv sources.

    - You can additionally check `opencv_dnn_BUILD_TORCH_IMPORTER` parameter to build [Torch7](http://torch.ch/) importer.
      It allows you to use networks, generated by [Torch7.nn](https://github.com/torch/nn/blob/master/README.md/) module.
      ![](images/build_4.png)

-# Press *Configure* and *Generate*.
   ![](images/build_5.png)

-# Build the generated project:
    - If Makefiles generator on Unix was used, run the following in terminal:
      @code
      cd opencv_root/build_opencv
      make all
      @endcode
    - If MS Visual Studio generator was used, then open OpenCV.sln from **opencv_root**/build_opencv folder in the Visual Studio,
      and build it by choosing **Build** -> **Build Solution** menu or using **F7** short-cut.

-# Now you can build own program by using libraries were built into **opencv_root**/build_opencv/lib.
   See the following tutorials to learn how to create a program using OpenCV:
       - @ref tutorial_windows_install
       - @ref tutorial_linux_gcc_cmake