Montag, 16. April 2012

Installation OpenCV (Debian Squeeze-amd64)

Heute stellen wir Euch in der ersten Seminarveranstaltung einige Werkzeuge vor, die wir im Seminar verwenden werden. Dazu zählen ffmpeg und die OpenCV. Für verschiedene Betriebsysteme existieren diese Programme/Libraries bereits vorkompiliert. Dennoch ist es häufig nötig sie manuell zu kompilieren. Damit das bei euch möglichst reibungslos klappt, werden wir das heute gemeinsam machen.Hier schon mal im Voraus die Anleitung für Debian Linux (Squeeze 6.0.4).

Prepare local install dir:
  • cd ~
  • mkdir ~/.local
  • cd ~/.local
Download and install ffmpeg:
  • wget http://ffmpeg.org/releases/ffmpeg-0.10.2.tar.bz2
  • tar xjvf ffmpeg-0.10.2.tar.bz2
  • cd ffmpeg-0.10.2
  • ./configure --prefix=/home/username/.local --enable-pic --enable-shared --enable-gpl --enable-nonfree --enable-postproc --enable-version3
  • make
  • make install
Achtung: bei der Angabe des Prefix --prefix darf keine Tilde ~ im Pfad verwendet werden, um z.B. das Home-Verzeichnis zu referenzieren.

Mac User sollten noch -cc=clang angeben.


Update Environment Variables:

Damit OpenCV auch das ffmpeg findet, das ja nicht im System, sondern lokal installiert ist, müssen einige Umgebungsvariablen aktualisiert werden:

in ~/.bashrc:

  • LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.local/lib
  • export LD_LIBRARY_PATH
  • PKG_CONFIG_PATH=$PKG_CONFIG_PATH:~/.local/lib/pkgconfig
  • export PKG_CONFIG_PATH
in ~/.bash_profile:
  • if [ -f ~/.bashrc ];
  • then
  • source ~/.bashrc
  • fi
einmalig:
  • source ~/.bashrc

Download and install OpenCV:
  • wget http://dfn.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2
  • tar xjvf OpenCV-2.3.1a.tar.bz2
  • cd OpenCV-2.3.1
  • mkdir build
  • cd build
  • cmake -D CMAKE_INSTALL_PREFIX=~/.local ../
  • make
  • make install
Damit ist die installation abgeschlossen. Hier nun ein kleines Beispielprogramm, das aus einem Video jedes 100ste Frame auf die Festplatte schreibt:

    #include <iostream>
    #include <string>
    #include <opencv2/opencv.hpp>

    int main(int argc, char** argv) {
         cv::VideoCapture capture(argv[1]);
         if(!capture.isOpened())
              return -1;
         cv::Mat frame;
         int frameCnt = 0;
         while(1){
              if(!capture.read(frame))
                   break;
              if (frameCnt % 100 == 0) {
                   std::stringstream ss;
                   ss << "frames/" << frameCnt << ".jpg";
                   std::string filename = ss.str();
                   cv::imwrite(filename, frame);
              }
              ++frameCnt;
         }
         std::cout << "Extracted " << frameCnt << " frames from videofile " << argv[1] << std::endl;
    }
Das Projekt kann dann kompiliert werden via:
  • g++ `pkg-config --cflags opencv` frameextractor.cpp -o frameextractor `pkg-config --libs opencv`

Kommentare:

  1. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  2. Hi,
    leider scheint die ~ auch bei den anderen Schritten ein Problem zu sein. Ich glaube das wurde im Seminar zwar erwähnt, aber hier im Tutorial nicht ganz durchgezogen.

    Mac: ~ durch /users/deinusername/
    Linux: ~ durch /home/deinusername/ austauschen.

    Ich habe es bei den bashconfigs und im cmake Schritt ersetzt und nun geht es :)

    AntwortenLöschen