PARP Research Group University of Murcia, Spain


Introduction to QVision

What is QVision?

The QVision can be considered a meeting point between several programming tecnhologies related to computer vision. It integrates Intel's IPP image processing, GSL, BLAS and OpenCV functionality (among many others), and MPlayer video under an homogeneously documentend and designed programming interface built over C++ and Qt.

The QVision is intended to be a tool for fast prototyping of real-time applications. It is mainly intended for research purposes, to rapidly implement and test new ideas, without investing too much time and effort in the gory details of video and image input/output programming, graphical user interface, debugging, testing, measuring performance, and the like. It also includes a number of implementation of well known computer vision and image processing algorithms.

However, the framework aims to preserve the maximal efficiency in the resulting applications. It offers versatile design tools for multithreaded application programming.

The framework is currently is developed and mantained to work only under Linux, but in a future it is planned to work under other operating systems such as Windows and MacOS, taking advantage of the portability of the underlying Qt library.

These are some of the main features of the application development cycle on the QVision framework:

Easy to use block oriented application design

The developer/researcher can code simple, independent, and well encapsulated data processing blocks in the QVision, and compose them with video input, image output or graphical user interface blocks to create new computer vision applications. This approach encourages reusability and modularity, easing the development of fast and reliable applications with a powerful and versatile user interface, while reducing significatively the programming effort to create them.

Interestingly, this modularity also leads to a very easy to use parallel programming paradigm. The modular design can be used to divide an application or algorithm into a set of tasks or processing stages, each of those can be asigned to a different thread to obtain parallel performance gain on multicore processors.

Section Block programming of this documentation reviews that block oriented programming paradigm in detail.

Versatile video input functionality

The QVision offers the QVMPlayerCamera class for image input based on the well known MPlayer multimedia player. It offers functionality to read image frames from a very heterogeneous set of video sources:

  • A wide set of video file formats and encodings: for a full list of the codecs and video formats which MPlayer is capable of reading, see video formats, and the codecs status reference list.
  • Video Streaming sources: via HTTP/FTP, RTP/RTSP, MMS/MMST, MPST, or SDP.
  • Webcams: only in linux, using the underlying v4l and v4l2 API's.
  • Digital/analog TV grabbing: through a capable video card.
  • Physical media: CDs, DVDs, Video CDs.
  • Individual images (and sequences of them): JPGs, PPMs, etc.

For complete flexibility, a QVision application does not require to be recompiled to read from any of these different types of image or video sources.

Efficient performance functionality

As we already stated, efficiency is one of the main design goals of the framework. The image processing and scientific numeric functionality of QVision is built upon highly efficient libraries such as the Intel Performance Primitives, and the Gnu Scientific Library, making the QVision perfectly adequate for real-time application prototyping.

The QVision contains wrapper functions and classes to offer that functionality under an homogeneous and object oriented programming interface. For example, to create image and matrix objects (wrapping IPP image data pointers and specifications and GSL matrices, respectively), the framework offers the well documented and easy to use classes QVImage and QVMatrix. We have also created many other wrapper classes which use underlying GSL functionality, such as QVVector, QVQuaternion and QVTensor.

The documentation for the module Image processing describes the image processing functionality offered by the QVision. This module implements a lot of image filtering functions, arithmetic and morphological operations, several commonly used feature extraction algorithms, and the like. It also includes the submodule IPP wrapper functions, which contains a comprehensive set of wrapper functions to use QVImage objects and other object oriented data types as arguments to IPP functions.

For the scientific computations, the module Math extensions contains all the wrapper functionality offered by the QVision regarding matrix, vector and algebraic operations based on the GSL, Blas and Lapack libraries.

Versatile user interface

The framework includes a powerful set of graphical user interface widgets, which can be straightforwardly included in any QVision application, at a very low programming cost overhead (in just a few lines of code). The developer can use them to offer user control on the input video sources sequences at execution time; even the execution flow of the different image processing algorithms implemented in the different threads which compose the application, can be controlled by the user at execution time.

This is a snapshot of a typical application developed under the QVision framework, running in six different computation threads (plus the independent GUI thread):

qvision-screenshot.png

The final user of the application can stop, resume and execute step by step the application while it reads input frames from a given (live or recorded) video source. He or she can also control the execution of the algorithms, stopping and resuming them just like he can do with the cameras, while modifying the values of the desired parameters. Both features can be used to debug and test the algorithms in different conditions, which can be very interesting for research purposes.

Besides the control widgets, the framework also includes a set of ready-to-use output and display widgets, which can be easily used to show output images with marks or notations on them, to plot the evolution of output values from the algorithms through time, and generally represent to the user a lot of relevant information about the processing and results of the algorithms. A CPU time consumption measuring widget is also included to easily inspect the computational load of the serveral computation stages involved in the application.

Best of all, all these widgets are specifically designed to be used at a minimal programming cost: in just a few lines of code, and with an intuitive and homogeneous programming interface, the framework automatically creates and manages the whole programming interface, letting the researcher to focus on creating, testing and debugging its image processing and computer vision algorithms, without worrying at all for this powerful and descriptive user interface.

Finally, and besides the graphical user interface, the QVision also smoothly integrates an extendable solution to let the final user of a QVision application set the initial values of the different algorithm parameters through the command line. This allows the easy recreation of test conditions for the algorithms implemented by the applications.

QVision is free

The framework is an open source project. It is released under the GNU Lesser General Public License, version 3, so it can be used to develop either free or commercial applications (as long as you respect the conditions of the different licenses of the underlying libraries and tools -Qt, IPP, GSL, BLAS, LAPACK, OpenCV, QWT, MPlayer, MEncoder, etc.-; consult their corresponding licenses for details). Anyone can contribute to the project by submitting suggestions, bugs, or new code or functionality.



QVision framework. PARP research group, copyright 2007, 2008.