Recensione Libro : OpenCV 2 Computer Vision Application Programming Cookbook

Da poco ho ricevuto un nuovo libro sulle OpenCV.
OpenCV Computer Vision Application Programming Cookbook, scritto da Robert Leganière, docente dell’University of Ottawa.
Il campo di ricerca di Leganière è (naturalmente) la computer vision, in particolare video analisi e sistemi di videosorveglianza intelligente.

OpenCV 2 Computer Vision Application Programming CookbookPotete visionare sia l’anteprima del libro, sia l’indice degli argomenti su questa pagina.

Devo dire che a differenza del manuale sacro di Bradski e Kaehler, “Learning OpenCV”, ho trovato molti aspetti nuovi.
Innanzitutto il linguaggio di programmazione : l’autore ha scelto (ed era ora che qualcuno lo facesse) di utilizzare il linguaggio C++.

Il libro è diviso in 10 capitoli, tutti ben chiari e corredati di codici di esempio.

Vengono trattati sia argomenti relativi alla computer vision(algoritmi di image processing, istogrammi, filtraggi,estrazioni di forme, etc…) sia metodologie tecniche di programmazione (installazione delle Opencv su Visual Studio e QT, approccio ad oggetti, pattern di programmazione, etc…).

La versione delle Opencv utilizzata è la 2.2.0, ovvero la versione modulare del framework.
Inoltre sono presenti alcune chicche che molti programmatori gradiranno (come per esempio i vari metodi di accesso ai pixel, con tanto di analisi computazionale comparativa !!!).

Insomma, è un ottimo libro per iniziare a utilizzare le Opencv.

Per opinioni più dettagliate su questo libro, vi consiglio di contattarmi.

Pubblicato in Visione Artificiale | Contrassegnato , , , , | Lascia un commento


La Computer Vision al tempo del Web

Poche settimane fa, due notizie hanno fatto scalpore nell’universo del web.
Entrambe aventi come obiettivo due colossi del web (Google e Facebook, e chi altri ?) e entrambe avente come mattone basilare la Computer Vision.

Zuckerberg conosce la tua faccia.
La notizia, apparsa su molte testate giornalistiche, ha avuto il solito effetto di attacco alla privacy da parte del Grande Fratello Digitale di turno.
Stavolta è stata la volta di Facebook e il suo famigerato Tag Suggestions.
Questa funzionalità permette di identificare automaticamente i volti presenti in una foto e di associarli alla persona relativa.
Premetto che non mi interessano le questioni relative alla privacy, semplicemente perchè la privacy è  un concetto che ha perso significato con l’avvento delle tecnologie digitali.
Basti pensare che è sufficiente un contatore di visite su un sito (poche linee di codice associate a servizi gratuiti come il whois) per tracciare il comportamento dei visitatori, senza ricorrere a tecnologie da conquista dello spazio.
Torniamo ora alla Computer Vision applicata da Facebook.
Personalmente non conosco nè gli algoritmi utilizzati nè tantomeno l’intera piattaforma, ma credo di poter tracciare a grosse linee un funzionamento di massima.

Descriviamo di nuovo la funzionalità : data una foto, il sistema riconosce i volti e li associa alla relativa persona.

Ma come fa ?
Chi mastica un pò di computer vision, sarà a conoscenza di algoritmi per il riconoscimento di volti.
Questa è la pagina relativa a questa funzionalità delle opencv : http://opencv.willowgarage.com/wiki/FaceRecognition

Una volta caricare l’immagine, viene effettuata un’operazione di pre-processamento (Pre Processing) che permette di “pulire” l’immagine.
Dopo il riconoscimento del volto (detection) vengono estratte delle caratteristiche, relative al volto stesso,  e “trasformate” in forma numerica (Feature Extraction).
Se avete taggato un vostro amico su Facebook, il sistema di Zuckerberg farà corrispondere a queste feature il volto del vostro amico.
All’atto del caricamento di una nuova foto, si farà un comparazione tra le feature nuove e quelle già presenti in archivio (naturalmente non verrà fatta una ricerca su tutte le persone iscritte a facebook, ma la ricerca verrà limitata ai vostri amici e se essa fallisce, verrà fatta sugli amici dei vostri amici) e avverrà il riconoscimento vero e proprio del volto presente nella foto.
Da premettere che il software può essere “aiutato” da voi stessi.
Se segnalate 10 foto dove è presente Elvis Priesley, il sistema saprà già, grazie a voi, le caratteristiche del noto Re del Rock And Roll, e non avrà problemi a riconoscerlo all’undicesima foto.

Naturalmente ho illustrato una possibile soluzione di massima.

A Mountain View* la computer vision non interessa tanto (e si vede).

Da poche settimane la Ricerca Per Immagini di Google, si è arricchita di una funzionalità totalmente nuova ( stesso discorso di Facebook, ovvero chi sa cosa sia la computer vision, avrà sicuramente sentito parlare di Image Retrival) : invece di scrivere il testo nel campo di ricerca, si carica un’immagine e il grande motore di ricerca vi offrirà tutti i siti che hanno la stessa immagine o un’immagine simile.

Google Image Retrival Computer Vision

Come nel caso di Facebook, non considero le implicazioni sociali della tecnologia, ma mi limito a commentare ciò che vedo.
A mio personale avviso, questa funzionalità è da migliorare, sia a livelli tecnici che di marketing.
Innanzitutto la quantità di immagini indicizzate da Google è inimmaginabile ed è relativa alle più disparati soggetti, mentre le foto auto-taggate da Facebook sono relative soltanto a quelle dove sono presenti volti.
Mettiamoci poi tutte quelle immagini che Google non riesce ad indicizzare per vari motivi.
Il problema , secondo me, è legato sia alla quantità delle immagini in gioco sia all’obiettivo che si vuole raggiungere con tale tecnologia.
Mettiamo per esempio di voler cercare una foto del famoso Generale Lee (mitica autovettura rossa di Hazzard) .
Uno dei possibili risultati potrebbe essere il seguente :

Ricerca per immagini di google

Come potete notare, non c’è nessuna immagine, tra quelle proposte, della famosa auto rossa. Addirittura ci sono dei risultati che non sono nemmeno delle auto.
Naturalmente ho preso un caso particolare, ma sono sicuro che su altri Google ci restituirà i risultati attesi.
Magari vengono tratti loghi o immagini binarie più semplici.
La mia attenzione, invece di essere rivolta alle tecniche utilizzate, è stata catturata dalla motivazione dello sviluppo di tale funzionalità.
Sicuramente c’è una questione di marketing : essendo Google la prima grande aziende del Web, non poteva non entrare in un campo come quella della computer vision.
Io credo che Google voglia entrare con le “armi pesanti” nel campo dell’Image Retrieval,  per un altro scopo : youtube.
Una volta affinati gli algoritmi di riconoscimenti, essi possono essere portati , con le opportune modifiche, sulla piattaforma Youtube.com . Questo per permettere a Google di effettuare una ricerca per immagini all’interno dei filmati.
Ciò permetterebbe all’azienda di Mountain View di indicizzare i video caricati, in maniera più efficiente e soprattutto puntuale.
Ricordate il caso del video che riprendeva lo studente down picchiato e deriso dai compagni ?
Alcuni dirigenti di Google furono condannati (fonte) perchè avevano lasciato il video sulla famosa piattaforma di condivisione video.
Bene,  se ci fosse stato un sistema automatico di rilevazione di immagini inadatte, un video del genere non sarebbe stato proprio pubblicato.

Naturalmente queste sono mie idee, e (per fortuna o sfortuna) non so cosa passi per la mente dei geni di Mountain View.

* Mountain View è la storica sede californiana di Google

Pubblicato in Visione Artificiale | Contrassegnato , , , , , | Lascia un commento


HighGui : la libreria OpenCv per la visualizzazione di immagini e video (seconda parte)

Nell’articolo precedente ho illustrato le funzioni per poter effettuare la visualizzazione e il salvataggio di un’immagine tramite la libreria highgui delle OpenCV .

Ora descriverò le funzioni per la visualizzazione di un video e di un flusso video proveniente da una webcam.

Visualizzazione di un video

#include <highgui.h>
int main( int argc, char** argv ) {
cvNamedWindow( “Example2″, CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture(“prova.avi”);
IplImage* frame;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( “Example2″, frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( “Example2″ );
}

Visualizzazione di un flusso video proveniente da una fonte esterna

#include <highgui.h>
int main( int argc, char** argv ) {
cvNamedWindow( “Example3″, CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateCameraCapture(0);
IplImage* frame;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( “Example3″, frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( “Example3″ );
}

Come si può notare, le due funzioni principali per la visualizzazione dei filmati sono cvCreateFileCapture e cvCreateCameraCapture : la prima funzione è utilizzata per i file, mentre la seconda per i flussi video provenienti da telecamere.

Pubblicato in Visione Artificiale | Contrassegnato , | Lascia un commento