Ich werde im folgenden Artikel kurz erklären, wie man OpenCV 2 auf Ubuntu 9.10 Karmic Koala mit IPP Support installiert.
IPP(Integrated Performance Primitives)
ist eine Library von Intel, die auf den entsprechenden Prozessoren bestimmte Vorgänge beschleunigen kann. Für nicht kommerzielle Zwecke kann man sich eine kostenlose Version bei Intel herunterladen.
Hierbei gehe ich davon aus, dass die IPP Libraries bereits installiert und eingerichtet sind.
Die Anleitung sollte in ähnlicher Weise mit jeder Linux Distribution funktionieren, genauso wie die IPP Libraries nicht zwingend notwendig sind.

Zunächst lädt man sich OpenCv 2.0 herunter und entpackt es in ein beliebiges Verzeichnis.

Dann sollte man folgende Pakete installieren um einige Abhängigkeiten von OpenCV zu erfüllen.

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff4-dev sudo apt-get install libswscale-dev libswscale-unstripped-0

 

Nun muss man noch ein paar Verknüpfungen setzen, da sich die Struktur von ffmpeg geändert hat und das OpenCV Team dieses noch nicht berücksichtigt hat. Dafür macht man sich zuerst zum SuperUser um die nötigen Rechte zu erhalten:

 

sudo -s 
mkdir /usr/include/ffmpegl
n -s /usr/include/libavcodec/avcodec.h /usr/include/ffmpeg/avcodec.h
ln -s /usr/include/libavformat/avformat.h /usr/include/ffmpeg/avformat.h
ln -s /usr/include/libavformat/avio.h /usr/include/ffmpeg/avio.h
ln -s /usr/include/libavutil/avutil.h /usr/include/ffmpeg/avutil.h
ln -s /usr/include/libswscale/swscale.h /usr/include/ffmpeg/swscale.h

Jetzt kann man in einem Terminal wieder mit normalen Benutzerrechten weiter arbeiten. Mit cmake konfigurieren wir unsere Version der Library und teilen ihr unter Anderem mit dass wir IPP verwenden möchten. USE_IPP=ON -D IPP_PATH=/opt/intel/ipp/6.1.2.051/lp32/sharedlib Sollten Sie eine andere Version von IPP oder eine andere Architektur verwenden, muss der IPP_PATH entsprechend angepasst werden. Wenn überhaupt kein IPP verwendet werden soll, lässt man die beiden IPP Angaben einfach weg.

 

cd OpenCV-2.0.0
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON OPENCV_BUILD_3RDPARTY_LIBS=ON -D USE_SSE=ON -D USE_SSE2=ON -D USE_SSE3=ON -D USE_IPP=ON -D IPP_PATH=/opt/intel/ipp/6.1.2.051/lp32/sharedlib ..

 

Die Ausgabe von cmake sollte dann ungefähr so aussehen:

 

-- General configuration for opencv 2.0.0 ===================================== 
-- 
--     Compiler:                   
--     C++ flags (Release):         -Wall -pthread -ffunction-sections  -O3 -DNDEBUG  -fomit-frame-pointer -O3 -ffast-math -mmmx -msse -msse2 -msse3 -DNDEBUG 
--     C++ flags (Debug):           -Wall -pthread -ffunction-sections  -g  -O0 -DDEBUG -D_DEBUG 
--     Linker flags (Release):      
--     Linker flags (Debug):        
-- 
--   GUI: 
--     GTK+ 2.x:                  1 
--     GThread:                   1 
-- 
--   Image I/O: 
--     JPEG:                    TRUE 
--     PNG:                     TRUE 
--     TIFF:                    TRUE 
--     JASPER:                  FALSE 
-- 
--   Video I/O: 
--     DC1394 1.x:               
--     DC1394 2.x:              1 
--     FFMPEG:                  1 
--       codec:                 1 
--       format:                1 
--       util:                  1 
--       swscale:               1 
--       gentoo-style:          1 
--     GStreamer:               1 
--     UniCap:                     
--     V4L/V4L2:                1/1 
--     Xine:                    1 
-- 
--   Interfaces: 
--     Old Python:                0 
--     Python:                    ON 
--     Use IPP:                   /opt/intel/ipp/6.1.2.051/lp32/sharedlib 
--     Build Documentation        0 
-- 
--     Install path:              /usr/local 
-- 
--     cvconfig.h is in:          /home/asctec/Downloads/OpenCV-2.0.0/release 
-- ----------------------------------------------------------------- 
--
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/USER/Downloads/OpenCV-2.0.0/release

Wenn man mit den Einstellungen so weit zufrieden ist, kann man anfangen die Library zu erstellen. Bei Mulitcore System kann man make mit dem Parameter -jX verwenden. X steht hier für die Anzahl der gleichzeitig laufenden Prozesse und beschleunigt den Vorgang unter Anderem erheblich.

make -j4

Wenn Alles erfolgreich kompiliert wurde, erscheint folgende Meldung und man kann mit der Installation beginnen:

[100%] Built target cvtest sudo make install

Um zu Testen ob OpenCV auch funktioniert bzw. die IPP Library erkannt hat, kann man folgenden Code kompilieren.

#include <stdio.h>
#pragma comment( lib, "highgui.lib" )
#pragma comment( lib, "cxcore.lib" )
#include "cv.h" 
#include "highgui.h" 
int main(){       
       int NumUploadedFunction = 0;
       NumUploadedFunction = cvUseOptimized(1);
       printf("\t NumUploadedFunction = %d \n\n", NumUploadedFunction);
       const char* opencv_lib = 0;
       const char* add_modules = 0;
       cvGetModuleInfo(0, &;opencv_lib,&add_modules);
       printf("\t opencv_lib = %s,\n\t add_modules = %s\n\n", opencv_lib,add_modules);
       return 0;
 }

Die Ausgabe sollte dann wie folgt aussehen:

NumUploadedFunction = 1 opencv_lib = cxcore: 2.0.0, add_modules =

Wenn stattdessen eine Fehlermeldung kommt:

error while loading shared libraries: libcv.so.2.0: cannot open shared object file: No such file or directory

Muss man das Verzechnis /usr/local/lib zum LIBRARY_PATH hinzufügen:

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

Vorallem wenn man sich die Ausgabe des Test Codes anschaut, wird man feststellen dass da etwas nicht stimmt. Dies liegt daran, dass OpenCV 2 sich grundlegend von  OpenCV 1 unterscheidet. Während in Version 1 von OpenCV die IPP Libraries noch dynamisch verlinkt waren, sind sie dies mittlerweile statisch. Genauso wie in Version 2 schon viele Optimierungsfunktionen direkt in OpenCV eingebaut wurden und daher IPP kaum noch verwendet wird, auch wenn es erkannt wurde.


 

 


 

 

FaLang translation system by Faboba