2011-01-30 18 views
28

Ho acquistato un Kinect con cui giocare sul mio PC in C#. (E che divertimento è programmare!)Riconoscimento modello Kinect

Sto usando CLNUIDevice.dll per ottenere l'immagine di profondità da Kinect. Funziona bene e sono in grado di leggere la profondità attraverso i valori RGB nell'immagine.

Ora mi chiedo quali librerie ci sono per fare diversi tipi di riconoscimento. Ho visto riconoscimento mano, riconoscimento facciale, scheletro, emozioni, oggetti, ecc.

Le librerie di elaborazione immagini non devono essere per Kinect (anche se sarebbe bello) e non devono essere per .Net (anche se sarebbe bello). Ad esempio: Qualsiasi lib di tracciamento oggetto funzionerà, ma se può utilizzare correttamente la mappa termica 3D di Kinect, funzionerà molto meglio.

+0

Tutti i demo che ho visto l'uso OpenCV. È una libreria C con una brutta API ma dovrebbero esserci collegamenti C#. –

risposta

16

Puoi prendere la serie di matrici RGB prodotte dal Kinect ed eseguirle tramite algoritmi di elaborazione di immagini standard, in pratica gli algoritmi di elaborazione delle immagini sono normalmente combinati insieme per produrre risultati significativi. Qui ci sono alcune tecniche standard che potrebbero essere facilmente implementato (e combinati) in .net:

template matching - una tecnica di elaborazione di immagini digitali per la ricerca di piccole parti di un'immagine che corrispondono a un'immagine modello http://en.wikipedia.org/wiki/Template_matching

morfologica elaborazione immagine - una teoria e tecnica per l'analisi e l'elaborazione di strutture geometriche, basato sulla teoria degli insiemi, teoria dei reticoli, topologia e funzioni casuali http://ashleyaberneithy.wordpress.com/2011/08/08/automating-radiology-detecting-lung-nodules-using-morphological-image-processing-in-f/

ci sono anche tecniche di elaborazione delle immagini più avanzate che possono essere utilizzati in scenari specifici , ad es. riconoscimento facciale e pattern matching tramite machine learning

Principio Analisi dei componenti - ho usato questa tecnica in passato, e io penso che questo è utilizzato nelle moderne fotocamere consumer per eseguire il riconoscimento facciale pattern matching http://en.wikipedia.org/wiki/Principal_component_analysis

Machine Learning - Ho utilizzato in precedenza Support Vector Machines e algoritmi di apprendimento basati sulla rete neurale per rilevare i pattern nelle matrici di immagini. Vale la pena leggere la Teoria dell'apprendimento statistico di Vapnik - http://www.amazon.com/Statistical-Learning-Theory-Vladimir-Vapnik/dp/0471030031 che mostra come mappare correttamente i dati di allenamento in una struttura n-dimensionale e come modellare gli iperpiani all'interno della struttura che classificano i dati, quindi i nuovi dati possono essere classificati sulla base di questo modello. Esiste anche una libreria chiamata LibSVM che ho trovato utile. http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Solo una nota a margine, probabilmente sarebbe più naturale da usare F # all'interno del mondo .NET per implementare alcuni di questi algoritmi

EDIT: un altro buon libro è "Digital Image Processing"

2

una libreria utile Net per la visione artificiale e apprendimento automatico è AForge.NET

Ecco un esempio di codice e un video di qualcuno che utilizza con Kinect: Conquex

2

Scopri OpenCV. Oggi è una struttura standard per i laboratori di visione artificiale/apprendimento. Prova le strutture di ricerca dei contorni, i vicini più vicini a K, ecc. Ma prima impara la sua interfaccia (strutture dati, funzioni).

0

Siding with Kenny su questo - il wrapper Emgu C# per OpenCV è quello che vorrei. OpenCV (di solito basato in C++) è il framework di visione artificiale più diffuso in circolazione, ed è anche parzialmente mantenuto/ottimizzato da Intel. Un sacco di ricercatori e ingegneri attuali lo usano per creare i propri progetti, e il wrapper Emgu ti offre un'ottima traduzione per iniziare a utilizzare le sue librerie in C#. Sento che molte delle innovazioni open source nell'area Kinect stanno accadendo con i wrapper libfreenect (meglio usati con Linux/C++) e EmguCV dovrebbe darti il ​​modo migliore per imitare (o usare le imitazioni degli altri) di ciò che questi ricercatori della Vision sta facendo.

0

Alcune correzioni su OpenCV, era una libreria C, mentre il codice legacy è ancora in fase di manutenzione, OpenCV ora è quasi esclusivamente C++ dalla versione 2.1 in poi. Molte delle quali erano davvero complicate da gestire quando era solo una libreria C è stata semplificata nelle versioni più recenti.

Inoltre c'è un gruppo Yahoo OpenCV, che funziona come una grande risorsa. Anche openCV viene fornito con una serie di campioni che ti aiutano moltissimo a ottenere grip con il pattern matching di base.

Un link ai gruppi di Yahoo http://tech.groups.yahoo.com/group/OpenCV/

Un campione di Kinect e OpenCV http://www.morethantechnical.com/2010/11/22/kinect-and-opencv-2-1/