OpenCv e Ffmpeg

11 12 2008

Premesse

Con OpenCv è possibile, oltre che acquisire il video da una webcam, anche farlo a partire da un filmat, ad esempio un AVi. Tuttavia è necessario compilare OpenCv con il supporto per Ffmepg la nota e stra-usata librerie per l’elaborazione di media. Vediamo come riuscire a compilare e far funzionare il tutto

Ffmpeg

Per prima cosa installiamo i pacchetti gtk2 e SDL devel

ad es. da fedora

yum install gtk2-devel SDL-devel

mentre da ubuntu

apt-get install libgtk2.0-dev libsdl1.2-dev

Ora possiamo scaricare ed installare ffmpeg da svn

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-shared --enable-swscale --enable-gpl
make
make install
echo "/usr/local/lib" >/etc/ld.so.conf.d/ffmpeg.conf
ldconfig

Per testare il funzionamento provare
ffplay passandogli un qualunque file video (mpg, flv, avi, …).

OpenCv

Scarichiamo l’ultima versione da qui

Prima di passare alla compilazione bisogna aggiungere al classico path degli includes la cartella di ffmpeg

cd /usr/local/include/
mkdir ffmpeg
cd ffmpeg
find ../ -name "*.h" | xargs -n1 ln -s

Opa possiamo scompattare opencv e lanciare l’installazione:

tar -zxvf opencv-1.1pre1.tar.gz
./configure --enable-gpl --enable-apps --enable-shared --with-ffmpeg --with-gnu-ld --with-x --without-quicktime CXXFLAGS=-fno-strict-aliasing CFLAGS=-I/usr/local/include/ffmpeg CPPFLAGS=-I/usr/local/include/ffmpeg LDFLAGS=-L/usr/local/lib

Dopo il configure bisogna notare che sia posto a yes il supporto a ffmpeg

...
Use gtk+ 2.x: yes
Use gthread: yes
...
Use ffmpeg: yes
...

se tutto è a posto possiamo dare il classico make e …andare a prendere un bel caffè

make
make install

Alcuni errori di compilazione…

Durante la compilazione potrebbero presentarsi degli errori (anche se con le ultime versioni di ffmpeg dovrebbero essere stati corretti…)

Qualcosa del tipo integer constant is too large for ‘long’ type

Per ovviare al problema bisogna aggiungere in testa al file “otherlibs/highgui/cvcap_ffmpeg.cpp” le seguenti righe:

#define INT64_C
#define __STDC_CONSTANT_MACROS

Inoltre nelle versioni più recenti di ffmpeg si potrebbe presentare un problema su un puntatore, in questo caso sempre in “otherlibs/highgui/cvcap_ffmpeg.cpp” bisogna sostituire:

url_fclose(&mywriter->oc->pb);
con
url_fclose(mywriter->oc->pb);

Inoltre mi è capitato con ultime versioni di ffmpeg ed OpenCv 1.1pre di trovare alla compilazione di opencv i seguenti errori

error: invalid conversion from ‘int’ to ‘PixelFormat’

per risolverlo bisogna fare uin casting forzato dal tipo int in PixelFormat nel file cvcap_ffmpeg.cpp. Nello specifico sostituire:

tutte le occorrenze di pix_fmt con (PixelFormat)pix_fmt

Ancora sostiutire

int input_pix_fmt;

con

PixelFormat input_pix_fmt;

e modificare l’inizializzazione da

input_pix_fmt = 0;

con

input_pix_fmt = PIX_FMT_NONE;

ricompilando comparirà poi l’errore

error: ‘PIX_FMT_RGBA32’ was not declared in this scope

questo si risolve aprendo il solito file

vi otherlibs/highgui/cvcap_ffmpeg.cpp

e modificando

PIX_FMT_RGBA32

con

PIX_FMT_RGB32

Ultima cosa: è importante controllare le versioni di OpenCv ed Ffmpeg, in particolare io ho testato il tutto con una Fedora Core 8, OpenCv 1.1pre e Ffmpeg SVN-r16043 o superiore. Utilizzando una versione più vecchia di OpenCv (1.0) si presenta in compilazione un errore su “img_conver” che e’ una funzione obsoleta e non più presente nelle ultime versioni di Ffmpeg.

Annunci




OpenCV e Kdevelop

4 10 2008

Premessa

In questo periodo mi sto dedicando ad un interessante ambito, la computer vision e, per quello che riguarda lo sviluppo in questo ambito, a quanto mi risulta, ad oggi uno degli strumenti migliori è senza dubbio OpenCv (Open Computer Vision). Questa è una libreria derivante dalla Intel Image Processing Library (IPL) sviluppata da Intel e completamente open source, infatti rilasciata sotto licenza BSD. Le OpenCv sono utilizzabili come una comune libreria C/C++ (anche se dovrebbe esistere anche un wrapper Python, ma non ne so molto) in ambito Win/Linux. In questo articolo tratterò l’installazione e l’utilizzo in Kdevelop su un sistema (K)ubuntu 8.04.

Mettiamoci a lavoro…

Preparazione sistema

Per prima cosa scarichiamo il tar.gz di OpenCv da SourceForge

Dopo aver scopattato il pacchetto, prima di compilare è necessario scaricare g++, e pkg-config, e consiglio di installare anche i seguenti pacchetti

apt-get install automake g++ pkg-config libgtk2.0-dev libjasper-dev libpng-dev zlib1g-dev python

Passiamo ora all’installazione

./configure
make
make install

Controllate la cartella in cui sono installate le librerie

updatedb
locate cv.h

Di solito questte sono in /usr/local/include/opencv; ora bisogna aggiungere /usr/local/lib e /usr/local/include/opencv in /etc/ld.so.conf o in vim /etc/ld.so.conf.d/libc.conf (a seconda dei casi il primo può semplicemente includere il secondo). Poi lanciare

ldconfig

Configurazione di Kdevelop

Se non è presente installare Kdevelop con il classico

apt-get install kdevelop

Create un nuovo progetto e chiamatelo come vi pare

Progetto ->Nuovo Progetto -> C++ -> Simple Hello World Program

andate in Gestion automake (sulla dx nel pannello principale)
cliccate con il tasto dx sul nome del progetto ed andate in “opzioni” ed entrare nel tab “Librerie”

Inserire le librerie

-lcv
-lcxcore
-lhighgui
-lcvaux

Ora il sistema dovrebbe funzionare a dovere!

Buon divertimento!





OpenCv Netbeans e Webcam (WinXP)

14 06 2008

OpenCv è la nota libreria OpenSource di Intel per lo sviluppo di applicazioni dedicate alla Computer Vision (un interessante articolo su http://www.matteolucarelli.net/opencv/opencv-dev142.pdf). Per lavoro mi sono imbattuto in questa tipologia di applicazioni e, visto ke per ora le ho momentaneamente abbandonate per dedicarmi ad altro, mi piaceva ricreare a casa un piccolo laboratorio di test sul mio portatile con webcam a seguito. Questi sono i passi per iniziare a lavorare sotto winXp.

Installazione IDE

Ho scelto di installare Netbeans come ambiente di sviluppo, in quanto è free, è multipiattaforma e seppur non velocissimo (necessita di un pò di ram x fungere bene) lo conosco abbastanza bene e mi sembra molto semplice. Per scaricare l’ultima versione http://download.netbeans.org/netbeans/6.0/final/ (qui potete trovare sia la versione completa x sviluppare sotto tutti i linguaggi supportati sia le versioni monche dedicate al C/C++ o al Java, ecc…).

Installazione Cygwin

Per compilare adeguatamente i progetti in C/C++ è necessario installare il compilatore gcc e il make. Questi sw necessitano, per funzionare sotto windozze, di Cygwin. Quindi al sito http://www.cygwin.com scaricate il setup.exe e lanciatelo da locale. Selezionate, come prima opzione Install from Internet , scegliete una root dir (di default C:\cygwin) e scegliete un mirror fra quelli proposti da cui iniziare a scaricare. Dopo aver atteso il tempo necessario alla connessione vi comparirà un elenco di pacchetti da scaricare. Andate sotto la voce Devel e selezionate tutti i pacchetti autoconf, automake, gcc, make. Poi cliccate su avanti ed attendete la fine dell’installazione.

Aggiunta delle variabili di ambiente

E’ importante ora, per usare gcc, far capire a windozze dove si trova il compilatore. Andate quindi su

Pannello di controllo -> Sistema -> Avanzate -> Variabili d’ambiente. Nel menu Variabili di Sistema selezionate path ed aggiungete alla riga “;C:\cygwin\bin” (dove ovviamente cygwin è la cartella in cui avete scelto di installare cygwin.

Configurazione di Netbeans

Ok, il lavoraccio è quasi finito. Da Netbeans create un nuovo progetto C/C++, facciamo ProvaOpenCv e vedrete che nella parte sx dello schermo comparirà una struttura ad albero del progetto proprio col nome che avete scelto. Cliccateci sopra con il tasto dx e selezionate Proprietà. Andate in Build -> C compiler e inserite in General->Include Directories

C:\Programmi\OpenCV\cxcore\include
C:\Programmi\OpenCV\cv\include
C:\Programmi\OpenCV\otherlibs\highgui
C:\Programmi\OpenCV\cvaux\include
C:\Programmi\OpenCV\otherlibs\cvcam\include

Rifate lo stesso in C++ compiler.

Rimane ora solo da aggiungere le librerie da linkare. Sempre cliccando con il tasto destro sul progetto e selezionando proprieties andate su Build->Linker ed inserite il path delle librerie di OpenCv (di default C:/Programmi/OpenCV/lib).

Testing

Rimane ora solo da testare il progetto. Io ho provato il tutto con una webcam logitech (una vecchia quickcam connect) e va abbastanza bene. Come codice di prova ho semplicamente copiato e incollato il codice di facedetect.c (dal path C:\Programmi\OpenCV\samples\c). In questo caso fate attenzione a copiare il file xml di haarcascade da C:\Programmi\OpenCV\data\haarcascades al path in cui avete salvato il progetto Netbeans.