Se c'è una libreria della quale noi disperati gestori del sito ci siamo innamorati negli ultimi anni, questa è OpenCV, libreria in C++ per la Computer Vision e l'Image Analysis. Inizialmente nata da un progetto della Intel, è adesso disponibile dal sito ufficiale sotto licenza open source: questo significa che oltre a poterla utilizzare, è possibile aggiungere nuove funzionalità accedendo direttamente ai file sorgente del codice.
Se perciò il vostro obiettivo è quello di lavorare sulle immagini avete due opzioni: comprare Matlab ed i suoi tools per l'Image Analysis o configurarvi la vostra IDE preferita per il C++ e scaricare gratuitamente OpenCV.
Certo, le cose nella pratica non sono così semplici: tutte le funzioni implementate in OpenCV richiedono un minimo di conoscenza teorica dei metodi di analisi di immagini; è per questo motivo che altri articoli nel sito cercano di presentarvi alcuni dei metodi in maniera semplice e poi proporvi possibili applicazioni pratiche.
La libreria è scaricabile alla pagina di download del sito ufficiale. Vi basta scegliere la versione giusta per il vostro sistema operativo (Linux/Mac, Windows, iOS o Android).
Questa guida per la configurazione riguarda il sistema operativo Linux. A breve verranno presentate guide sicure anche per Windows e gli altri ambienti.
1) INIZIALIZZAZIONE
Prima di tutto, dovete sistemare le librerie e le suite di Linux per lavorare sui video. Queste sono ffmpeg e x264. Il primo passo è perciò rimuovere le possibili versioni già installate. Aprite un terminale e digitate:
sudo apt-get remove ffmpeg x264 libx264-dev
adesso che avete pulito, dovete preparare le dipendenze necessarie alle due librerie:
sudo apt-get update sudo apt-get install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev
sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg
Avete appena installato gstreamer, una piattaforma per lavorare sulle applicazioni multimediali.
Adesso mancano solo gtk e libjpeg:
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install libjpeg8 libjpeg8-dev
questi sono tutti preliminari necessari alla buona riuscita della configurazione.
2) x264
Per prima cosa dovete scaricare x264 da qui. Scaricate la versione stabile più recente.
Dopo di che, da terminale spostatevi nella vostra cartella di download (o la cartella dove avete appena scaricato il file .tar) e digitate i seguenti comandi per prepararvi all'installazione:
tar xvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable
ATTENZIONE: i comandi nella guida sono quelli relativi al momento in cui l'ho scritta. Questo significa che le versioni che andrete a scaricare potrebbero essere diverse da quelle indicate qua. Il mio consiglio (sia per x264 che per quello che verrà) è di digitare:
cd x264-snap
e poi dare un bel colpo di TAB per l'autocompletamento.
Adesso siamo pronti a cominciare l'installazione di x264. Se avete un sistema operativo a 32 bit, digitate:
./configure --enable-static
Se invece l'ambiente è a 64 bit, digitate:
./configure --enable-shared --enable-pic
a questo punto, siete pronti per il make e per la seguente installazione:
make sudo make install
Se non vi ha dato errori, ritenetevi fortunati e procediamo.
3) ffmpeg
Esattamente come per x264, scaricate l'ultima versione più stabile di ffmpeg da qui. Adesso di nuovo spostiamoci indietro di una cartella, o in generale andiamo nella directory che contiene il file appena scaricato e digitiamo su terminale:
tar xvf ffmpeg-0.11.1.tar.bz2
cd ffmpeg-0.11.1
Come prima, ci sono due possibilità. Se lavorate su ambiente a 32 bit, digitate:
./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
mentre se lavorate su 64 bit, digitate:
./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-shared --enable-pic
seguite come prima con l'installazione:
make sudo make install
Se tutto è andato bene, siamo effettivamente a buon punto.
4) v4l
Ricordate quando vi dicevo che per poter utilizzare OpenCV su Linux bastavano solo x265 e ffmpeg? Ho mentito. In realtà dovete avere anche v4l (video for Linux), una serie di API che vi consentirà di acquisire dati video dalla vostra webcam, per esempio. Scaricate l'ultima versione da qui e come prima procediamo all'estrazione nella cartella di download e alla successiva installazione:
tar xvf v4l-utils-0.8.8.tar.bz2 cd v4l-utils-0.8.8 make sudo make install
5) OpenCV
Ora finalmente dobbiamo sistemare OpenCV. Se non avete già scaricato l'ultima versione, fatelo adesso dal primo link di questo articolo e procedete ad estrarre ed installare come segue:
tar xvf OpenCV-2.4.2.tar.bz2 cd OpenCV-2.4.2/ mkdir build cd build
Nel caso in cui vogliate un giorno utilizzare CUDA accoppiato con OpenCV, digitate questo comando
cmake -D WITH_CUDA=YES -D CMAKE_BUILD_TYPE=RELEASE ..
altrimenti
cmake -D CMAKE_BUILD_TYPE=RELEASE ..
Al termine della procedura controllate che nella schermata siano apparse le seguenti scritte
- found gstreamer-base-0.10
- GTK+ 2.x: YES
- FFMPEG: YES
- GStreamer: YES
- V4L/V4L2: Using libv4l
Se c'è scritto diversamente, vuol dire che qualcosa è andato storto durante l'installazione di uno dei componenti. La soluzione è ricominciare da quel punto.
Altrimenti digitate come sempre "make" e "sudo make install" e andiamo avanti (si fa per dire, è un'operazione piuttosto lunga questa).
6) Configurare Linux
Adesso dobbiamo dire al sistema operativo che abbiamo intenzione di lavorare con la roba che abbiamo installato fino a questo momento. Digitate da terminale il comando:
export LD_LIBRARY_PATH=/usr/local/lib
copiate lo stesso comando all'interno del file .bashsrc nella vostra cartella Home e salvatelo.
Allo stesso modo, aggiungete al file /etc/bash.bashrc la seguenti righe:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
A questo punto, se tutto è andato bene, siete pronti per usare le librerie. La procedura che vi ho presentato nell'articolo è stata utilizzata da noi più e più volte sotto Linux ed ha sempre funzionato. Se avete avuto problemi, il mio primo consiglio è di ricominciare dal primo passo e vedere se per caso vi siete dimenticati qualcosa (può capitare, ve lo assicuro). E' un po frustrante come processo, ma alla fine dovrebbe dare i suoi frutti. Se dopo varie prove non siete riusciti a cavare un ragno dal buco, sentitevi liberi di commentare e di fare domande (questo per dirvi che è possibile abbia commesso errori io mentre stilavo questo tutorial).
Prima di lasciarvi però, se dopo aver passato un'oretta abbondante di configurazioni avete ancora voglia di provare OpenCV nella stessa giornata, voglio fare in modo che siate già pronti ad usare le funzioni della libreria per esempio su Eclipse (funziona analogamente per le altre IDE):
il codice per un classico "Hello World!" è il seguente:
#include <cv.h> #include <highgui.h> int main ( int argc, char **argv ) { cvNamedWindow( "My Window", 1 ); IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 ); CvFont font; double hScale = 1.0; double vScale = 1.0; int lineWidth = 1; cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC, hScale, vScale, 0, lineWidth ); cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font, cvScalar( 255, 255, 0 ) ); cvShowImage( "My Window", img ); cvWaitKey(); return 0; }
Prima di compilare, andate su Project -> Properties. Nella scheda scegliete C/C++ Build e poi aprite Settings. Ora sotto GCC C++ Compiler cercate Includes ed aggiungete il path /usr/local/include/ .
Allo stesso modo, andate in GCC C++ Linker ed il Libraries aggiungete il path /usr/local/lib/ e tra le librerie aggiungete opencv_core e opencv_highgui (queste dovrebbero bastare per il codice di esempio).
Consiglio personale: fatevi un giro in /usr/local/lib e /usr/local/includes/ per vedere dove si trovano le funzioni e come è strutturata la libreria.
