2011-01-30 25 views
28

Compré un Kinect para jugar en mi PC en C#. (¡Y qué divertido es programar!)Reconocimiento de patrones de Kinect

Estoy usando CLNUIDevice.dll para obtener la imagen de profundidad de Kinect. Esto funciona bien y puedo leer la profundidad a través de los valores RGB en la imagen.

Ahora me pregunto qué bibliotecas hay para hacer diferentes tipos de reconocimiento. He visto reconocimiento de manos, reconocimiento de rostros, esqueleto, emociones, objetos, etc.

Las bibliotecas de procesamiento de imágenes no tienen que ser para Kinect (aunque eso sería bueno) y no tienen que ser para .Net (aunque eso sería bueno). Por ejemplo: cualquier lib de seguimiento de objetos funcionará, pero si puede usar el mapa de calor 3D de Kinect correctamente, funcionará mucho mejor.

+0

Todas las demos que he visto el uso OpenCV. Es una biblioteca C con una API fea pero debería haber enlaces C#. –

Respuesta

16

Puede tomar la serie de matrices RGB producidas por Kinect y ejecutarlas a través de algoritmos de procesamiento de imágenes estándar, en la práctica los algoritmos de procesamiento de imágenes normalmente se combinan para producir resultados significativos. Aquí están algunas técnicas estándar que podrían ser fácilmente implementadas (y combinada) en .NET:

Plantilla Cards - una técnica de procesamiento de imágenes digitales para la búsqueda de pequeñas partes de una imagen que se ajustan a una imagen de la plantilla http://en.wikipedia.org/wiki/Template_matching

morfológica procesamiento de imágenes - una teoría y la técnica para el análisis y el procesamiento de las estructuras geométricas, basado en la teoría de conjuntos, la teoría de celosía, la topología y funciones aleatorias http://ashleyaberneithy.wordpress.com/2011/08/08/automating-radiology-detecting-lung-nodules-using-morphological-image-processing-in-f/

también hay técnicas de procesamiento de imágenes más avanzadas que se pueden utilizar en escenarios específicos , por ejemplo, reconocimiento facial y coincidencia de patrones a través de aprendizaje

Principio Análisis de los componentes de la máquina - He usado esta técnica en el pasado, y yo creo que este se utiliza en las cámaras de consumo modernos para llevar a cabo el reconocimiento facial patrón http://en.wikipedia.org/wiki/Principal_component_analysis

aprendizaje de la máquina juego - Tengo utilizaba máquinas de vectores de soporte y algoritmos de aprendizaje basados ​​en redes neuronales en el pasado para detectar patrones en matrices de imágenes. Vale la pena leer Vapnik's Statistical Learning Theory - http://www.amazon.com/Statistical-Learning-Theory-Vladimir-Vapnik/dp/0471030031 que muestra cómo mapear con éxito los datos de entrenamiento en una estructura n-dimensional y cómo modelar con éxito los hiperplanos dentro de la estructura que clasifica los datos, los nuevos datos pueden clasificarse según este modelo. También existe una biblioteca llamada LibSVM que he encontrado útil. http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Sólo una nota, probablemente sería más natural para usar F # dentro del mundo .NET para poner en práctica algunos de estos algoritmos

EDIT: otro buen libro es "Procesamiento Digital de Imágenes"

2

una biblioteca .Net útil para la visión artificial y aprendizaje automático es AForge.NET

Aquí es un ejemplo de código y un video de alguien que use con Kinect: Conquex

2

Aprende OpenCV. Es un marco estándar para laboratorios de visión por computadora/aprendizaje hoy. Pruebe las instalaciones de búsqueda de contorno, los vecinos más cercanos a K, etc. Pero primero, aprenda su interfaz (estructuras de datos, funciones).

0

Siding with Kenny en este caso - el envoltorio Emgu C# para OpenCV es lo que yo elegiría. OpenCV (generalmente basado en C++) es el marco de Visión por Computadora más utilizado, y Intel también lo mantiene/optimiza parcialmente. Muchos investigadores e ingenieros actuales lo utilizan para crear sus propios proyectos, y el envoltorio Emgu le da una excelente traducción para comenzar a hacer uso de sus bibliotecas en C#. Siento que gran parte de la innovación de código abierto en el área de Kinect está sucediendo con las envolturas libfreenect (mejor usadas con Linux/C++) y EmguCV debería darte la mejor manera de imitar (o usar imitaciones ajenas) lo que estos investigadores de Vision estás haciendo.

0

Alguna corrección sobre OpenCV, solía ser una biblioteca C, mientras que el código heredado aún se mantiene, OpenCV ahora es casi puramente C++, es decir, desde la versión 2.1 en adelante. Mucho de lo cual fue realmente complicado de tratar cuando se trataba de una biblioteca C solo se ha simplificado en las versiones más nuevas.

También hay un grupo Yahoo OpenCV, que funciona como un gran recurso. También openCV viene con un conjunto de muestras que te ayudan mucho con respecto a obtener agarres con la coincidencia de patrones básicos.

Un enlace a los grupos de Yahoo http://tech.groups.yahoo.com/group/OpenCV/

Una muestra de Kinect y OpenCV http://www.morethantechnical.com/2010/11/22/kinect-and-opencv-2-1/