Getting Started with OpenCV feature of the Intel® INDE

Introduction

The Intel® Integrated Native Developer Experience (Intel® INDE) is a cross-architecture productivity suite that provides developers with tools, support, and IDE integration to create high-performance C++/Java* applications for Windows* on Intel® architecture and Android* on ARM* and Intel® architecture.

The new OpenCV beta, a feature of Intel INDE, is compatible with the new open source OpenCV 3.0 beta (Open Source Computer Vision Library: http://opencv.org). OpenCV beta provides free binaries for computer vision applications development and production for usages like enhanced photography, augmented reality, video summarization, and more.

Key features of the Intel® INDE OpenCV are:

  • Compatibly with OpenCV 3.0
  • Pre-build and validated binaries, cleared of IP protected building blocks.
  • Easy-to-use and to maintain with IDE integration for both Windows and Android development.
  • Optimized for Intel® platforms with heterogeneous computing.

The Intel INDE OpenCV Beta release focuses on simplifying the development process and shortening the development time. You do not need to configure, build, or integrate OpenCV libraries into your environment yourself. This enables you to start development immediately.

Finally, performance-wise, the Intel INDE OpenCV is an optimized backend implementation of the OpenCV technology for Windows* and Android* platforms based on Intel processors.

Latest OpenCV from the OpenCV Foundation

Recently, the OpenCV foundation announced OpenCV 3.0, the new iteration of this now de-facto standard library for vision and image processing. OpenCV 3.0 provides a technology called “Transparent API”, which comprises more GPU-specific functions.  Directly from the OpenCV 3.0 Beta changelog:

  • OpenCV 3.0 brings more GPU accelerated functions and makes it in much more convenient form than OpenCV 2.4
  • The new technology is nick-named "Transparent API" and, in brief, is extension of classical OpenCV functions, such as cv::resize(), to use OpenCL underneath.

OpenCV 3.0 also brings significant performance improvements for Intel SoCs, explained in separate document. For details on the “Transparent API” refer to the OpenCV 3.0 Architecture Guide.

  • NOTE: By the day of the official Intel INDE OpenCV Beta release, the most recent version of the community OpenCV 3.0 is also Beta.

The official “Beta” status of the current Intel INDE-OpenCV release implies that there might be API changes in the final OpenCV 3.0 (“Gold”) release. Therefore, whenever you start development with the Intel INDE OpenCV 3.0 Beta, you might need to change your code to make sure it works with “Gold” versions of the component.

Unique Features in the Intel INDE OpenCV Implementation

Intel INDE OpenCV Libraries in a Ready-to-Use Form

Intel INDE OpenCV is shipped in the pre-built (binary) form, which simplifies the process of compiling applications, especially for Android targets. So you don’t have to build OpenCV from sources, which might be a complex and frustrating process

Intel INDE OpenCV contains the ready-to-use binaries for the following targets:

  • Android (x86),
  • Windows (x86/x64), for Visual Studio* (2012/2013/2015 versions)

As with the original OpenCV implementation, Intel INDE OpenCV also comes with Java and Python support.

Intel INDE OpenCV Leverages GPU Performance through OpenCL™

OpenCL optimizations in OpenCV 3.0 ensure Intel INDE OpenCV applications are optimized to run on Intel’s heterogonous platforms, accelerated with Intel® Processor Graphics family. Recently, the particular performance improvements for OpenCV 3.0 were made by Itseez* and Intel directly, refer to the IDF Shenzhen 2014 presentation in the See Also section. These results show substantial performance gains on Intel Processor Graphics. For details refer to the Performance Promise of OpenCV 3.0 and INDE-OpenCV.

Intel INDE OpenCV Support Intel® TBB and Intel® IPP

Original OpenCV offers a flexibility to use Intel® Integrated Performance Primitives (Intel® IPP) and Intel® Threading Building Blocks (Intel® TBB), but the latter is off in CMake by default. For both Android* and Windows* targets, the Intel INDE OpenCV library is pre-built and fully validated with both Intel® TBB and a relevant subset of Intel® Integrated Performance Primitives (Intel® IPP-ICV).

Intel INDE OpenCV Dispatcher

The original OpenCV makes coarse decisions about which function to run on which particular piece of hardware.  If an OpenCL-enabled GPU is present in the target system, and the function has an OpenCL implementation, it runs on the GPU. If not - on the CPU.  This approach does not always result in the best performance.

To pick up the better of two worlds: the Intel INDE OpenCV comprises a Dispatcher that allows to select the fastest implementation inside each OpenCV function call - OpenCL on GPU, IPP, or default C code-path on the CPU. This way the Intel INDE OpenCV offers GPU acceleration paired with efficient CPU implementation in a way that is transparent to the user. The details of dispatcher logic are available in the tutorial.

Refer to the Performance Promise of OpenCV 3.0 and INDE-OpenCV for details on the recent OpenCL performance improvements for Intel® Processor Graphics devices. The document also covers performance benefits for the CPU code-path coming from the Intel IPP, providing a powerful (single-threaded) implementation of the OpenCV functions, while Intel TBB provides parallelism across CPU cores.

Intel INDE OpenCV Profiler

Since the OpenCV technology operates within a shared resource environment with the rest of application, it is important to analyze how the execution fits into the larger environment. Intel INDE OpenCV implementation is instrumented with Intel’s Instrumentation and Tracing Technology (ITT), letting you view and correlate OpenCV and general execution like CPU or GPU utilization on the same timeline of the profiling tools. Refer to the dedicated tutorial to learn how you can generate highly detailed traces from devices running Windows* and Android* OS.

Intel INDE OpenCV Integration into IDEs

Intel INDE is a one stop development suite for Windows* and Android* platforms. Upon Intel INDE installation, Intel INDE OpenCV enables you to develop computer vision applications right within your favorite IDEs. The installer fully handles integration into the IDEs of your choice, setting up include/lib paths, project dependencies, and so on. Once installation is complete, you can start coding immediately. See Installation Guide for quick Intel INDE OpenCV installation guidelines.

There are several wizards available to start a new Intel INDE OpenCV project, as well as pop-up menus that help you enable Intel INDE OpenCV for an existing project.

Finally, installation also provides the Microsoft* ImageWatch plugin for Visual Studio*, which enables viewing in-memory OpenCV objects like cv::Mat when debugging native code on Windows.

Note on Android* OS Support

The OpenCV 3.0 Beta (community version) does not offer Android* OS support. Intel INDE OpenCV implementation (which is also Beta) provides preview Android* (32-bit) binaries.

Also, notice that for the Beta release, some important OpenCV 3.0 features on Android* are limited to JNI only. For example, UMat support is available only in the native C++ code, and not available through the OpenCV Java API. Refer to the “OpenCV 3.0 Architecture Guide for INDE OpenCV” for details.

Generally, Intel INDE OpenCV APIs are in a preview (Beta) form, so you might expect minor API changes over time.

Intel INDE OpenCV Compatibility with the Community OpenCV

The official “Beta” status of the OpenCV 3.0 community version implies that the API is not settled yet and might be changed in next releases. The Intel INDE OpenCV “Beta” implementation does not guarantee compatibility with the OpenCV 3.0 “Gold” implementation.

Also binary compatibility is not preserved in case you use any additional APIs that Intel INDE OpenCV adds on top of the original OpenCV (like Dispatcher APIs).

References for Further Reading

For more complete information about compiler optimizations, see our Optimization Notice.
AttachmentSize
PDF icon inde_opencv_getting_started.pdf64.59 KB