La computer vision e la sicurezza biometria in ditta grazie a INTEL. L’uomo è un meccanismo che basa le sue funzionalità cerebrali su un sistema analogico il quale lo spinge in molti casi a comportarsi come animale illogico. Quando l’illogica crea troppi problemi a causa della sua complessità gli viene applicato un sistema di ‘ trasformate cerebrali ’ che possiede lo scopo di ridurre l’insieme rendendolo un sistema logico più facilmente comprensibile da parte dell’uomo ed in particolar modo utilizzabile su un sistema informatico. I sistemi algoritmici ne sono un esempio. Funzioni definite complesse vengono analizzate e scomposte in sottoproblemi i quali possedendo un grado di difficoltà minore rispetto al problema fondamentale, possono essere descritti medianti successioni di istruzioni semplici. L’illogicità umana crea però dei controsensi. Le cose che l’uomo fa con più difficoltà sono quelle che riesce a scomporre e a logicizzare più facilmente. Le cose invece che fa in modo immediato e molto semplicemente sono le cose che non riesce a logicizzare. Un esempio ? Se dovessimo calcolare la rotta che deve fare una navicella per entrare in un orbita intorno alla luna metteremmo insieme delle leggi fisiche legate alla gravità, alle forze di propulsione e altre legate alla fisica e potremmo creare un programma per computer che simuli il problema. Prendiamo invece una funzione che svolgiamo centinaia di volte al giorno come quella di riconoscere il volto di una persona. Nella nostra vita quotidiana incontriamo molte persone ogni volta che usciamo di casa e con un solo colpo ‘occhio sappiamo dire se si tratta di una persona conosciuta o di una mai vista. Il volto di questa persona potrebbe essere stato visto molto tempo prima, con caratteristiche fisiche differenti da quelle attuali (barba, fisionomia ecc.). Anche se la persona ha modificato leggermente le sue caratteristiche fisiche sappiamo dire se si tratta di una persona già vista. Il nostro cervello riceve sulla corteccia cerebrale , tramite fasci nervosi, degli impulsi dalla retina dell’occhio e grazie a questi riesce a fare il riconoscimento. Ma perché questo discorso ? L’informatica ha raggiunto un certo livello proprio mentre nel nostro mondo reale iniziano a comparire problemi che potrebbero essere risolti con questa. Prendiamo come esempio la sicurezza. La città di Londra a seguito degli attentati alla metropolitana ha creato la più grossa rete di telecamere adette alla videosorveglianza esistente a questo mondo. Il sistema vanta di 9000 telecamere piazzate su tutto il territorio cittadino, messe in modo tale che una singola persona potrebbe essere seguita per tutta la città. Il problema è che il controllo delle persone tramite operatore è un po’ troppo complicato e passibile degli errori legati alla disattenzione umana. La creazione di programmi intelligenti in grado di svolgere le funzioni fatte dalle persone sarebbe la soluzione al problema. La soluzione algoritmica diventa complessa in quanto atta a riprodurre delle funzionalità che il cervello svolge in modo analogico. Stiamo parlando i riconoscimento delle persone, di identificazione dei pacchi abbandonati, dell’interpretazione di azioni fino a giungere all’identificazione degli stati emotivi di un individuo. La neurologia ha lavorato in questi anni a passo con la computer vision e ha creato elle regole per la valutazione, ad esempio, della fisionomica facciale. Anni fa, dopo l’ 11 settembre, la CIA aveva istruito il personale al checkin degli aeroporti per individuare le persone sospette.
In altre parole erano state individuate delle regole come quella che segue riportata ad esempio di quanto detto. I neurologi hanno visto che una persona a cui viene sottoposto un quesito a cui è possibile rispondere con si o con no possedeva diverse contrazioni dei muscoli facciali a seconda che il SI detto corrispondeva a verità o meno. Il cervello nel caso di un SI convinto inviava un impulso più forte il quale creava una leggera contrazione della muscolatura a lato dell’occhio, rilevabile con un attenta osservazione. Un si detto senza questa contrazione significava una bugia e quindi la necessità di ulteriori controlli da parte del personale addetto alla sicurezza. Queste analisi della fisionomica facciale potrebbe essere fatta mediante un sistema informatico addetto all’analisi. In pratica una macchina della verità senza nessun collegamento con il corpo. Ma tutte queste analisi legate alle valutazioni biometriche delle persone come potrebbero essere fatte da una ditta che non abbia il pentagono o altro alle spalle ? Tutte queste tecnologie fanno parte del settore chiamato computer vision della quale fanno parte l’object recognition, le varie tecniche di riconoscimento (facciale, impronta, retinale, iride ecc.), la pattern extraction e cosi via. Tutte queste tecnologie possono essere riprodotte grazie a modelli matematici legati a studi condotti da numerose università, ricercatori e studiosi del settore. In molti casi si è seguito un semplice ragionamento. Se il cervello usa neuroni, sinapsi e altri componenti biologici, perché non creare ei modelli matematici che le riproducano e poi usare questi per lo svolgimento di certe funzioni ? A qui tutta la teoria sull’uso delle reti neurali artificiali e le loro applicazioni nel settore biometrico. L’suo di queste semplifica la soluzione di certi problemi in quanto invece di dover analizzare passo a passo un problema per creare l’algoritmo indirizzato a risolverlo, si insegna alla rete neurale a fare la stessa cosa ma mostrandogli degli esempi dai quali questa dedurrà il modo per svolgere il compito. Ne è un esempio la memoria associativa tratta in questo articolo : Associative Neural Network Library http://synapse.vit.iit.nrc.ca/memory/pinn/ In altri casi invece i sistemi i modelli matematici sono stati studiati da ricercatori come ad esempio l’utilizzo delle trasformate haar e dei classificatori di Viola e Jonnes utilizzati per estrarre oggetti da immagini. Altri modelli alla base di moltissimi processi sono i vettori di Eigen usati nei processi di eigenfaces indirizzati alla creazione di sistemi di riconoscimento facciale, oppure gli Hidden Markov Modell usati per il riconoscimento del parlato e degli oggetti. E cosi ci sono moltissimi esempi. Ma come potrebbe una ditta sviluppare software senza disporre di una centro di ricerca alle spalle ? INTEL ha creato una libreria di funzioni matematiche indirizzate alla computer vision mediante le quali si hanno a disposizione tutti le basi per la creazione di qualsiasi modello utilizzato nei processi biometrici. La libreria è gratuita e si chiama OPENCV. Entro a questa ci sono moltissimi esempi legati all’estrazione di volti da immagini, riconoscimento di oggetti, identificazione persone, riconoscimento gestuale, tracciamento e moltissime altri. OpenCV
http://sourceforge.net/projects/opencvlibrary/
Molti problemi venivano risolti mediante reti neurali o con reti probabilistiche. Intel di fatto tra le librerie opensource possiede anche le
OpenPNL https://sourceforge.net/projects/openpnl/ Nell’ultima versione di OPEENCV è stata inserita la libreria ML legata alla machine learning nella quale è possibile creare classificatori e chiaramente reti neurali. Le funzionalità gestite dalle OpenCV sono raggruppate sotto le seguenti voci. • • • • • • • • • • • • • • • • • • • •
Image Processing Structural Analysis Motion Analysis and Object Tracking Pattern Recognition Camera Calibration and 3D Reconstruction Stereo Correspondence Functions View Morphing Functions 3D Tracking Functions Eigen Objects (PCA) Functions Embedded Hidden Markov Models Functions Normal Bayes Classifier K Nearest Neighbors SVM Decision Trees Boosting Random Trees Expectation-Maximization Simple GUI Loading and Saving Images Video I/O
Le librerie sono fornite con sorgenti con i vari files per la compilazione in vari ambienti Windows e Linux. Pur non essendo una libreria per la gestione della user interface possiede una libreria che permette di creare semplici finestre e capture sia da videocamere che da files AVI. La libreria lavora su immagini in un formato INTEL chiamato IplImage facilmente convertibile in altri formati come ad esempio i Bitmap. Questo fa si che uno possa di fatto usare altre librerie per gestire videocamere o elaborazioni grafiche e poi possa sfruttare le OpenCV per le funzionalità legate alla computer vision. Nell’ambito della computer vision spesso si eseguono eleborazioni si immagini di oggetti specifici estratti da immagini complesse. Ad esempio se si volesse fare un riconoscimento facciale partendo da un immagine relativa ad una panoramica con dentro la persona da riconoscere, il processo sarebbe veramente complesso.
In questo caso converrebbe prima identificare il volto della persona, estrarlo dal contesto della foto panoramica e successivamente applicare l’algoritmo di riconoscimento sull’immagine della persona. La faccia in questo caso sarebbe un oggetto da identificare e da estrarre. Il sistema di object recognition i OpenCV è parametrizzabile dall’esterno grazie a elle funzionalità di training fatto su una serie di immagini positive, rappresentanti l’oggetto, e immagini negative, non relative all’oggetto. In altre parole è possibile istruire il sistema a fare i riconoscimenti che si desidera al fine di estrarre degli oggetti da contesti complessi. I files generati usati dai classificatori in cascata sono definiti con il termine di cascade files. In rete se ne trovano diversi adatti a identificare pedoni, occhi, vetture e altro ancora. Problemi complessi possono essere risolti anche con poche linee i programma. Il seguente esempio prende un immagine con elle persone e disegna un cerchio intorno alle facce presenti. const char* cascade_name = "haarcascade_frontalface_alt.xml"; cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); storage = cvCreateMemStorage(0); IplImage *src_image = cvLoadImage( “imagine.jpg”, 0 ); CvSeq* faces = cvHaarDetectObjects(src_image, cascade, storage, 1.1, 2, 0 , cvSize(30, 30) ); for( i = 0; i < (faces ? faces->total : 0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); CvPoint center; int radius; center.x = cvRound((r->x + r->width*0.5)*scale); center.y = cvRound((r->y + r->height*0.5)*scale); radius = cvRound((r->width + r->height)*0.25*scale); cvCircle(src_image, center, radius, colors[i%8], 3, 8, 0 ); }
,
La libreria di opencv possiede moltissimi wrapper che gli permettono di lavorare con molti linguaggi e sistemi di sviluppo compresi alcuni particolari come FLASH. Grazie alle sue funzioni sono possibili estrazioni facciali su pagine WEB come ad esempio nella prima pagina di un mio sito : http://www.bernardotti.it La pagina ufficiale i Opencv è quella di Intel all’indirizzo : http://www.intel.com/technology/computing/opencv/ Esiste inoltre una maillist con migliaia di utenti relativa all’argomento. http://www.yahoogroups.com/group/OpenCV