University Stuff

Hand Gesture Recognition powered by EmguCV

In questi giorni prima di rimettermi in moto in vista della tesi di laurea, ho ultimato e perfezionato un progetto personale che consiste nel riconoscere i gesti della mano utilizzando EmguCV. Le tecniche con cui è possibile estrarre e riconoscere una mano sono molteplici. Nell’approccio scelto sono andato a lavorare su alcuni spazi di colore quale ad esempio YCrCb oppure Hsv definendo una particolare regione dello spazio che contiene la distribuzione di colore della pelle. Eseguito questo filtraggio si ottiene una maschera binaria della nostra mano, che successivamente viene processata al fine di rimuovere il rumore residuo. Dopo aver ottenuto...

posted @ Friday, September 3, 2010 6:22 PM | Feedback (64)

Object Oriented Parser Design

Sulla scia del post precedente e dei commenti ricevuti, in particolar modo ho riflettuto molto sull’accusa :) mossa da Antonio circa la violazione dell’information hiding (aka stupro di oggetti) condivido l’approccio che ho seguito nel disegnare il parser per espressioni regolari a discesa ricorsiva (Recursive Descent Parser). Senza scendere troppo nei dettagli di come operi un parser, diciamo che in una prima fase il Parser esegue analisi lessicale appoggiandosi ad un oggetto Tokenizer che ha il compito di trasformare una stringa in input (nel caso in esame una regex) in uno stream di Tokens. Un token rappresenta un elemento di...

posted @ Thursday, April 29, 2010 11:18 AM | Feedback (25)

Ancora sulla complessità del codice

Sulla scia dei post educativi di Luka e di Antonio ho riflettuto sul codice che sto producendo per il mio ultimo progetto che andrà a breve su codeplex, ovvero un parser di regex con successiva conversione ad automa deterministico minimizzato. L’implementazione “hand made” del parser  (lo scopo del progetto dovrebbe essere propedeutico per gli studenti che affrontano un primo corso sui compilatori o di informatica teorica) segue i consigli dell’ottimo testo Flexible Pattern Matching in Strings. Questo è la prima implementazione che segue passo passo lo pseudo codice del libro (con l’aggiunta del campo enum sulla tipologia di...

posted @ Monday, April 26, 2010 12:37 PM | Feedback (32)

Emgu CV: A computer vision Library

In questi ultimi mesi mi sto interessando di Computer Vision. Sto cercando di sfruttare gli ultimi mesi ed esami universitari per cercare di capire quale siano le varie aree di ricerca che maggiormente mi interessano e le prospettive presenti sul panorama nazionale.  Dopo essermi concentrato sugli algoritmi e le strutture dati, aver studiato ed implementato alcuni algoritmi di data mining e business intelligence, l’ultimo elaborato che ho svolto per un progetto universitario riguarda proprio la computer vision, in particolar modo il riconoscimento di oggetti. Attualmente sono davvero poche le librerie ed i wrapper C# che implementano algoritmi di computer vision....

posted @ Sunday, August 30, 2009 2:44 PM | Feedback (32)

SSAS: SVM algorithm Plugin

Difficilmente posto news, stavolta però farò un eccezione in quanto su codeplex, alcuni sviluppatori di Avanade hanno realizzato un plugin per Sql Server hostato su codeplex che implementa una SVM. Al momento attuale può essere utilizzato per eseguire classificazione confrontando le prestazioni del modello con gli altri che si possono costruire usando gli algoritmi inclusi in SSAS(Decision Trees, Naive Bayes, Neural Network ); ho condotto alcuni esperimenti e devo dire che l'implementazione dell'algoritmo è buona anche se come ho suggerito nel forum è necessario inserire un modo per calcolare i parametri ottimali per l'addestramento della macchina; il mio suggerimento è...

posted @ Thursday, February 5, 2009 9:54 PM | Feedback (33)

[University Stuff] Simple NAry Tree

In questi giorni, per un esame di algoritmi distribuiti ho avuto la necessità di lavorare con un particolare albero nario. Genericamente un albero nario è un albero in cui ogni nodo presenta al massino n figli. Un albero binario è un caso particolare di albero nario dove n=2; in figura viene mostrato un albero 3ario. Vediamo come realizzare un semplice albero nario che permetta di specificare il fattore di ramificazione e che permetta di inserire nodi all'interno dell' albero in modo tale che l'albero venga riempito livello per livello (prima ci creare un nuovo livello si...

posted @ Thursday, June 26, 2008 7:01 PM | Feedback (6)

Joining DSA project

Sono appena entrato a far parte del progetto DSA (Data Structure and Algorithms) giunto in questi giorni alla versione 0.5. Far parte di questo progetto per me è uno stimolo davvero interessante e per questo ringrazio il mio amico Granville Barnett, fondatore del progetto. Compito della libreria DSA è quello di cercare di colmare le lacune presenti all' interno della BCL in quanto ad algoritmi e strutture dati. In questi giorni stiamo lavorando con Granville per decidere quali strutture ed algoritmi implementare sino al rilascio della versione 1.0. Devo subito dire che la metodologia TDD adottata da Granville aiuterà a...

posted @ Monday, June 2, 2008 4:58 PM | Feedback (4)

Nth Root

In questo post mostro poche linee di codice che permettono di calcolare la radice ennesima (nth-root) di un numero in C#. Prima di buttar giù queste righe di codice mi sono chiesto se nel framework ci fosse qualche cosa che facesse al caso mio... risposta negativa :(  Con l' ausilio di un pò di matematica però si può ovviare a ciò, sfruttando la definizione di logaritmo e le proprietà che lo legano alla funzione esponenziale. Possiamo infatti scrivere: La dimostrazione di questa formula è piuttosto semplice in quanto la prima uguaglianza è una proprietà che deriva dalla nozione di base...

posted @ Sunday, May 18, 2008 12:47 PM | Feedback (10)

Data Mining Algorithms : Microsoft Association Rules Revealed

Dopo l' introduzione del post precedente, oggi esamineremo la fase cruciale e maggiormente complessa di ogni algoritmo di Association Mining ovvero la fase di estrazione dei frequent pattern. Ricordo che i frequent pattern sono gli insiemi di prodotti che hanno supporto maggiore di quello minimo. Possiamo effettuare una prima classificazione degli algoritmi di frequent pattern mining individuando da una parte quelli che si basano su di un processo iterativo di generazione di itemset candidati, dall' altra quelli che calcolano i frequent pattern senza questo processo.  ESTRAZIONE FREQUENT CON GENERAZIONE DEI CANDIDATI Questa famiglia vede come capostite il...

posted @ Wednesday, April 16, 2008 7:01 PM | Feedback (5)

Data Mining Algorithms : Microsoft Association Rules Introduction

Oggi voglio analizzare ed illustrare uno dei task maggiormente ricorrenti quando si ha a che fare con operazioni di Data Mining, l' Association Mining. Farò riferimento sia all' implementazione fornita all' interno della suite di algoritmi di Data Mining inclusi in SSAS che ad ulteriori approcci maggiormente efficienti.Defiamo innanzitutto che cosa sia l'Association Mining con riferimento a possibili contesti applicativi. Un algoritmo di Association Mining permette di identificare all' interno di un insieme di prodotti (itemset) delle regole che correlano la presenza di un insieme di prodotti con quella di un altro insieme; vengono quindi dapprima estratti dei pattern frequenti e...

posted @ Tuesday, April 15, 2008 5:57 PM | Feedback (5)

Bioinformatics: Sequence Alignment Algorithms

  La Bioinformatica è una disciplina scientifica dedicata alla risoluzione di problemi biologici con metodi informatici; le attività di base della Bioinformatica comprendono il retrieval delle informazioni all' interno di databases biologici, il confronto fra sequenze genomiche e la rappresentazione delle strutture proteiche. Prima di analizzare le tecniche di allineamento fra sequenze proteiche, volevo ricordare come quest' ultime siano composte dai 20 tipi di amminoacidi presenti in natura; una proteina sarà quindi composta da una particolare sequenza di amminoacidi come nel caso dell' insulina (prima proteina scoperta nel '51)                                                                       insulina = MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERG                                                                       FFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLY                                                                      QLENYCN Ogni giorno all' interno dei laboratori di tutto...

posted @ Tuesday, October 9, 2007 6:59 PM | Feedback (1)

[University Stuff] Kernel Gaussiano

Solitamente un kernel gaussiano viene utilizzato come filtro di smoothing per diminuire il rumore presente nelle immagini o come kernel per una SVM.In questi giorni ho avuto la necessità di eseguire una convoluzione fra una matrice a valori reali ed un kernel gaussiano; mi sono quindi creato un piccolo metodo di cui vi allego il codice... private static double[,] gaussian(int length) { //Dimensione dispari if (length % 2 == 0) ...

posted @ Thursday, August 2, 2007 2:38 PM | Feedback (4)

[University Stuff] Genetic Algorithms Applied

Dopo la rassegna prettamente teorica con cui abbiamo analizzato gli Algoritmi Genetici, vediamo tramite un semplice esempio come sia possibile mettere in pratica i principi sui quali si fondano. L' esempio che prenderemo in considerazione è il classico problema dello zaino (Knapsack Problem): supponiamo di dover partire per le tanto attese vacanze estive; supponiamo inoltre di avere una valigia con una capacità C limitata, e un insieme di n oggetti ciascuno con un peso wi e un valore ci; il problema consiste nel decidere quali oggetti mettere in valigia massimizzandone il valore, non superando la capacità massima della valigia. In termini un pò più formali possiamo definire...

posted @ Tuesday, July 24, 2007 6:49 PM | Feedback (6)

[University Stuff] Genetic Algorithms

Visto l' ottimo interesse suscitato, sia all' interno della community che all' esterno ( due tesisti mi hanno contattato dopo aver letto i miei post sul Machine Learning), voglio presentarvi un metodo molto interessante che viene utilizzato per risolvere problemi di ottimizazzione: gli Algoritmi Genetici (AG). Gli algoritmi genetici costituiscono un sottoinsieme degli Algoritmi Evolutivi, termine generico che indica una gamma di sistemi di risoluzione dei problemi che riproducono il processo evolutivo cosi come descritto nella teoria Darwiniana. Tra la fine degli anni '50 e l'inizio degli anni '60 alcuni ricercatori cominciarono a interessarsi ai sistemi naturali nella convinzione che potessero fornire le...

posted @ Monday, July 23, 2007 4:57 PM | Feedback (5)

[University Stuff] Machine Learning Applied

Dopo un bel pò di tempo (troppo per la verità) finalmente vediamo di mettere in pratica quello che vi ho raccontato nei post precedenti (1, 2) riguardo all' Apprendimento Automatico. Per coloro che vogliono approfondire di più la conoscenza dell' Apprendimento Automatico con particolare riferimento alle SVM esistono diverse risorse in rete tra le quali spiccano: www.kernel-machines.org (sito contenente informazioni generali sia di carattere tecnico che relativo ai vari eventi internazionali) www.kernel-methods.net (sito contenente informazioni riguardanti il libro "Kernel Methods for Pattern Analysis",testo scritto da due guru del settore quali John Shawe-Taylor e Nello Cristianini che tratta in...

posted @ Friday, May 11, 2007 6:30 PM | Feedback (7)

Entering StudentMode.MSP...

In qualità di Microsoft Student Partner, investitura ricevuta grazie al magnifico sforzo prodotto da Academic Club, vorrei fare alcuni chiarimenti sulle possibilità che Microsoft offre agli studenti. Attualmente circa l' 80% degli Atenei italiani  hanno sottoscritto l'  MSDN Academic Alliance;  questo permette loro di mettere a disposizione sia dei docenti che degli studenti  strumenti di sviluppo, piattaforme e server Microsoft a scopo didattico e di ricerca ad un prezzo contenuto. In riferimento al post di Simone, posso evidenziare come l'elenco dei prodotti che può scaricare utilizzando MSDNAA permetta a qualsiasi studente di conoscere il mondo .NET supportandolo nello sviluppo con un IDE di assoluto livello. Un' altra iniziativa che offre...

posted @ Tuesday, January 16, 2007 1:21 PM | Feedback (1)

[University Stuff] Machine Learning II

  Nello post precedente vi ho introdotto quelli che sono i concetti base dell' Apprendimento Automatico; senza scendere troppo nelle dimostrazioni matematiche vi illustrerò una serie di metodi basati sull'Apprendimento con supervisone di nome Support Vector Machines (SVM). Le SVM trovano impiego sia nella risoluzione di problemi di classificazione (spam) che nei problemi di regressione. Prima di scendere in dettaglio devo fare alcuni richiami matematici sui vettori e le loro proprietà ... speriamo bene    In R2 (geometricamente, nel piano) i punti sono rappresentati da coppie ordinate (x1,x2) di numeri reali (coordinate).Tali punti sono facilmente rappresentabili attraverso dei segmenti orientati                                                                    Un punto...

posted @ Friday, November 17, 2006 12:25 PM | Feedback (2)

[University Stuff] Machine Learning

Con questo post voglio raccontarvi qualcosa sull' Apprendimento Automatico rimandando se di vostro interesse ad un prossimo post una trattazione delle Support Vector Machines (SVM). No, non pensate che siano cose totalmente astratte in quanto sul loro utilizzo si basano programmi che utilizzate quotidianamente . L' Apprendimento Automatico nasce come una sottoarea dell' Intelligenza artificiale; nel corso degli ultimi anni ha comunque raggiunto una completa autonomia nei confronti di quest'ultima. L'idea che sta alla base del Machine Learning è che i pc non vengano più programmati a mano bensì abbiano la capacità di programmarsi da soli. La programmazione tradizionale in alcuni contesti presenta infatti delle...

posted @ Thursday, November 16, 2006 2:06 PM | Feedback (11)