ICL can be downloaded as source code via svn or as binary debian packages (soon). Please refer to the download instructions for details. ICL uses stardard CMake as its build system (for more details on CMake visit http://www.cmake.org/) ICL comes with only very few installation dependencies. We decided to make a small set of dependencies compulsory in order to limit the set of possible combinations.
Most external dependencies are kept purely optional. The few mandatory dependencies are very general libraries already installed on most systems. For the debian-package based install, dependencies are automatically installed recursively by the package manager. However, the debian package-based installation does only include dependencies that are available as standard debian packages.
In case of compiling ICL manually from source, the -dev packages that include C/C++-headers are needed. The corresponding Ubuntu packages can be installed via:
sudo apt-get install libjpeg-dev libpng-dev libz-dev
The libpthread-dev library comes with the C/C++ compiler
In general each optional dependency adds some extra functionality to ICL. In some of the cases, also a slower but native fallback implementation is provided. In the following, the external dependencies are listed and their benefits are explained.
The Intel IPP is a proprietary library that provides a very large set of highly optimized functions for different domains, such as linear algebra and in particular computer-vision and image processing. Important: Since Intel IPP is proprietary software, Intel IPP linkage must be established by manually compiling ICL from source. However, we plan to replace the static linkage against Intel IPP with a run-time linking approach that would also work for binary installation sources.
The Intel Math Kernel Library dependency is quite similar to the Intel IPP dependency. However, Intel MKL is only used for a much smaller set of linear algebra functions. Global mathematical utility functions such as math::big_matrix_mult_t or DynMatrix::big_matrix_pinv significantly accelerated if Intel MKL is available. However, in contrast to the Intel IPP dependency, all MKL-accelerated functions have an equivalent C++ fallback implementation.
We use OpenCV mainly in order to provide a compatibility interface that converts OpenCV’s common image data types IplImage and CvMat into ICL’s images type core::ImgBase and vice versa. the header OpenCV.h in the ICLCore module provides efficient and simple to use converter methods. These are only available if the OpenCV dependency is met. In addition, OpenCV is currently needed for the LibOpenSurf (http://www.chrisevansdev.com/computer-vision-opensurf.html) based backend of the cv::SurfFeatureDetector which is directly part of ICL.
LibMesaSR is a proprietary library that allows to grab images from SwissRanger 3D time-of-flight cameras provided by the Mesa Imaging company (http://www.mesa-imaging.ch) The library is closed source.
ImageMagick is used to provide a large set of support image types. Most types are supported in both reading and writing. Without ImageMagick, only a few image data types are supported: .ppm, .pnm and .pgm as well as ICL’s internal image format .bicl are natively supported, .png and .jpg are supported explicitly by other external dependencies.
The dc1394 (digital firewire camera) library allows to grab image from firewire cameras and to set camera parameters.
The libfreenect provides a lightweight interface for grabbing images from Microsoft Kinect cameras. The library allows to grab color, depth and IR-images and to set some internal camera properties
The xine library provides a very intuitive yet powerful interface for grabbing video in a frame-by-frame manner.
The well known Qt Library is used for ICL’s rapid GUI creation toolkit. Actually Qt is also a prerequisite for most ICL applications and for the whole ICLQt module. We strongly recommend to have at least Qt support when building ICL
The closed source basler pylon drivers (including the Genicam libraries) are used for accessing Gigabit-Ethernet (GIG-E) cameras.
(see also Installing and Using Basler Pylon Drivers)
OpenCL is used to significantly speed up a set of processing units using the computing units of graphics cards or other OpenCL platforms. We mainly use it for point cloud processing units located in the ICLGeom module
Right now, we only use OpenNI as an alternative backend to grab images from Kinect and other PrimeSense 3D cameras
(see also Installing OpenNI / Nite)
PCL has become some kind of a quasi-standard for point cloud processing. ICL’s ICLGeom module provides the generic geom::PointCloudObjectBase interface that is implemented by the geom::PCLPointCloudObject class. In case of having PCL support, ICL can seamlessly interface to PCL algorithms using this class.
Todo
There is an unsolved dependency between PCL and OpenNI, since our PCD-File Grabber uses libpcl-io, which in turn depends on openni.
The robotics service bus is a new and versatile library for interprocess communications. ICL uses it as backends for the io::GenericGrabber and the io::GenericImageOutput to exchange image data between different processes and PCs.
Since some special dependencies are more difficult to get running, we will here share our experiences with you.
Download binary packages e.g.
For developing and running applications with pylon two environment variables must be exported:
export PYLON_ROOT=/your-desired-install-directory
export GENICAM_ROOT_V2_1=${PYLON_ROOT}/genicam
To extract and install pylon type:
tar -xzf pylon-2.3.3-1337-32.tar.gz # ...-62-tar-gz for 64-bit version
cd pylon-2.3.3-1337-bininst/
mkdir $(PYLON_ROOT) # if not already existing
tar -C $(PYLON_ROOT) -xzf pylon-bininst-32.tar.gz # ...-62-tar-gz for 64-bit version
Because of the way Pylon is using shared libraries it may be, that some libraries form the Pylon distribution can not be found at runtime, although the corresponding path is provided in the rpath-list. In this case it is necessary to add the following library search path.:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PYLON_ROOT}/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PYLON_ROOT}/genicam/bin/Linux32_i86
or for 64-bit version:
export LD_LIBRARY_PATH=${PYLON_ROOT}/lib64
Further suggestions:
To check whether pylon can establish a connection to a camera the IpConfigurator can be used.:
export PATH=${PATH}:${PYLON_ROOT}/bin
IpConfigurator
When the IpConfigurator does not find the camera, Pylon and accordingly ICL will neither. In that case the camera is most likely not in the same ip-address block. Unfortunately it is not possible to change the cameras ip-settings without the IpConfigurator. There are two known workarounds in this case. Setting the ip-address of the computer to the same address block as the camera or using the Windows version of the IpConfigurator - which does not seem to have this problem - to change the cameras ip settings once to the correct block.
Todo
write how to install use OpenNI and Nite