SlideShare una empresa de Scribd logo
1 de 30
<Desarrollo con Kinect> Por: Fabián Andrés Gómez
Introducción 	El periférico Kinect de Microsoft ofrece posibilidades sin precedentes para la experimentación interactiva y el desarrollo de aplicaciones de realidad aumentada (AR) con interfaces naturales de usuario (NUI).  Lo particular del kinect es la conjunción de un amplio conjunto de sensores, bajo costo, preprocesamientoon-board, apoyo de la comunidad libre y un respaldo –ambiguo, debe decirse- del propio Microsoft al desarrollo por fuera de la Xbox.
<Generalidades>
Detalles del hardware 	El Kinect es un dispositivo USB multicomponenteque incluye dos cámaras, una VGA (640x480) y una QVGA (320x240).  La primera de estas es una cámara normal (similar a una webcam), mientras la segunda carece de filtro IR y se emplea para medir distancias a partir del proyector IR integrado.  La frecuencia de actualización de ambas cámaras es de 30 fps. Adicionalmente el Kinect cuenta con un array de micrófonos (con cancelación de eco y ruido on-board).  Curiosidades: 64 MB de memoria DDR2, lámina peltier tras proyector IR, acelerómetro, 12W de consumo (vs. 2.5 suministrados por un USB).
Fuente:  http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown
Alternativas de desarrollo (1) 	Antes del 16 de Junio existían dos alternativas para desarrollar en Kinect: OpenNI+ NITE: librería y drivers del fabricante del Kinect (PrimeSense).  Soporta audio, video, profundidad, skeletal tracking y handgesturerecognition. Tiempo de instalación: 5 minutos. Libfreenect: de Openkinect.org, con gran apoyo por parte de la comunidad Open Source.  Soporta audio y video.  Tiempo de instalación: 1 hora.
Alternativas de desarrollo (2) El 16 de Junio de 2011 Microsoft liberó el SDK beta para desarrollo de aplicaciones en Windows 7 para Kinect.  Este incluye un API para desarrollo (en C#, VB y C++), y ejemplos de código.  El instalador y la documentación están disponibles en la URL http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/(más fácil: tinyurl.com/sdkkinect)
Características SDK oficial Soporta skeletal tracking de dos personas y rastreo de posición de hasta cuatro. Soporta múltiples dispositivos Kinect. Streams de vídeo estándar y de datos de distancia de los objetos con respecto al sensor. Streams de audio del array de 4 micrófonos con identificación de fuente y soporte de reconocimiento de voz vía Microsoft.Speech. Baja latencia para los streams de datos recuperados (similar a la disponible en la Xbox 360).
Limitaciones SDK oficial No permite el desarrollo comercial Las aplicaciones desarrolladas deben correr sobre la máquina física y no en VMs Creado para desarrollo en conjunto con herramientas de Microsoft (Visual Studio 2010 sobre Windows 7) Sólo soporta desarrollo x86 (aunque se incluyen drivers x64 y x86 las librerías son para x86) Los motores pueden ser activados 1 vez por segundo o máximo 15 veces en 20 segundos. El skeletal tracking sólo opera con figuras en posición de pie.
Arquitectura SDK oficial (1) Fuente:  “Getting Started with the Kinect for Windows SDK Beta from Microsoft Research”. P. 15.  Disponible en http://http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ docs/ProgrammingGuide_KinectSDK.pdf (Consultado el 28 de Junio de 2011)
Arquitectura SDK oficial (2) Fuente:  “Getting Started with the Kinect for Windows SDK Beta from Microsoft Research”. P. 15.  Disponible en http://http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ docs/ProgrammingGuide_KinectSDK.pdf (Consultado el 28 de Junio de 2011)
Archivos del API
<Desarrollo con el SDK>
La demo desarrollada consiste en un Arkanoid o Breakout simplificado.  La interacción del usuario se realiza a partir de skeletal tracking e interpretación de gestos basada en el sensor de imagen de video.  Está implementada en C# con WPF (Windows PresentationFoundation) para la interfaz.
Uso del SDK (preliminares) Se debe adicionar como referencia del proyecto en Visual Studio la dll que contiene el namespaceMicrosoft.Research.Kinect.Nui (el archivo en cuestión es homónimo y está en el directorio del SDK).  Adicionalmente se debe declarar el uso del namespace asociado en la clase de la ventana principal.
Uso del SDK (inicialización) Todo programa desarrollado en Kinect debe iniciar creando un objeto Runtime, el cual representa al dispositivo Kinect y todos sus recursos disponibles.  Se le pasa como parámetro un OR con los sensores y configuraciones de los mismos que se van a emplear: Esto tiene lugar en el método que maneja el evento de carga de la ventana (Window_loaded) Runtime kinect = new Runtime(); kinect.initialize(RuntimeOptions.UseSkeletalTracking 	| RuntimeOptions.UseColor)
Uso del SDK (inicialización) Al finalizar el uso de los sensores se debe “apagar” el uso de los servicios del kinect: kinect.Shutdown();
Uso del SDK (flujos de datos) Como parte del mismo método llamado al cargar la ventana se abren los flujos de los sensores: Kinect generará eventos de esqueleto y cuadros de video, por lo que deben registrarse métodos para manejarlos: kinect.VideoStream.Open(ImageStreamType.Video, 2, 	ImageResolution.Resolution640x480, 	ImageType.Color);       kinect.DepthStream.Open(ImageStreamType.Depth, 2, 	ImageResolution.Resolution320x240, 	ImageType.DepthAndPlayerIndex); kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(SkeletonFrameReady); kinect.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(ColorFrameReady);
Uso del SDK (flujos de datos) Como alternativa a esta aproximación (de tipo PUSH o suscripción) puede hacerse PULL de las actualizaciones con ImageStream.GetNextFrameoSkeletonEngine.GetNextFrame.  En este caso la lógica de la aplicación debe controlar el ritmo al que se solicitan los datos de acuerdo a la configuración elegida para el sensor (los API de imagen y datos de distancias nunca entregan el mismo frame dos veces).
Uso del SDK (captura video) En el caso de la fuente de video se recuperará un objeto PlanarImage que representa la imagen con una profundidad de color de 32 bits.  WPF integra el método BitmapSource.Create que convierte los bits en bruto recibidos en un bmp: void ColorFrameReady(object sender, ImageFrameReadyEventArgs e)       { PlanarImage Image = e.ImageFrame.Image; ideo.Source = BitmapSource.Create( Image.Width, Image.Height, 96, 96, 			     	PixelFormats.Bgr32, null, Image.Bits,                    	     	Image.Width * Image.BytesPerPixel); }
Uso del SDK (skeletal tracking) Ahora bien en cuanto al skeletal tracking este puede ser activo (2 jugadores) o pasivo (4 jugadores).  Las 20 articulaciones (representadas por objetos Joint), requieren una triple conversión de coordenadas para trazar un esqueleto en pantalla.
Uso del SDK (conversiones) La conversión de coordenadas (para articulaciones y huesos) tiene lugar así: private Point getDisplayPosition(Jointjoint)         { floatdepthX, depthY; kinect.SkeletonEngine.SkeletonToDepthImage(joint.Position, 		outdepthX, outdepthY); depthX = Math.Max(0, Math.Min(depthX * 320, 320));   depthY = Math.Max(0, Math.Min(depthY * 240, 240));   intcolorX, colorY; ImageViewAreaiv = new ImageViewArea(); kinect.NuiCamera.GetColorPixelCoordinatesFromDepthPixel( 			ImageResolution.Resolution640x480, iv, 				(int)depthX,(int)depthY, (short)0, outcolorX, outcolorY); 	     return new Point((int)(skeleton.Width * colorX / 640.0), 		(int)(skeleton.Height * colorY / 480));         }
Uso del SDK (salida gráfica) A la conversión referida deben recurrir el método que hace el manejo de los eventos del esqueleto, pues este se ocupa de dibujar articulaciones y huesos.  Para ello inicia recuperando del frame recibido un arreglo de datos de esqueletos capturados…  voidnui_SkeletonFrameReady(objectsender, SkeletonFrameReadyEventArgs e)         { SkeletonFrameskeletonFrame = e.SkeletonFrame; intiSkeleton = 0; Brush[] brushes = new Brush[6]; brushes[0] = new SolidColorBrush(Color.FromRgb(255, 		  	0, 0));             //Omitida definición de los otros 5 pinceles... SkeletonData[] skeletonArray = skeletonFrame.Skeletons;  skeleton.Children.Clear(); …
Uso del SDK (manejo esqueleto) …y hace un recorrido doble sobre este arreglo para dibujar huesos y articulaciones: foreach (SkeletonData data in skeletonFrame.Skeletons)       { if (SkeletonTrackingState.Tracked == data.TrackingState)          { Brushbrush = brushes[iSkeleton % brushes.Length]; skeleton.Children.Add(getBodySegment(data.Joints, brush, 	     JointID.HipCenter, JointID.Spine, JointID.ShoulderCenter, 	     JointID.Head)); //Omitida adición a Children de los 4 segmentos de cuerpo restantes foreach (Jointjoint in data.Joints)                {                         Point jointPos = getDisplayPosition(joint);                         Line jointLine = new Line(); 			 //Omitida ampliación de la dimensión de la art. skeleton.Children.Add(jointLine);                }           } …
Uso del SDK (gestos) Dado que el SDK no ofrece soporte de gestos estos deben ser interpretados en el código de las aplicaciones.  Para lograr esto se emplean los siguientes recursos: ,[object Object]
Emulación de eventos de mouse mediante el API de Windows (user32.dll). Una clase helper (MouseHelper) traduce el input generado por las articulaciones en los argumentos que acepta SendInput de dicho API. ,[object Object]
Uso del SDK (gestos) …y tras escalar a las dimensiones de la pantalla las coordenadas de las manos…  … intcursorX, cursorY; JointjointRight = data.Joints[JointID.HandRight]; JointjointLeft = data.Joints[JointID.HandLeft]; JointscaledRight = 			jointRight.ScaleTo((int)SystemParameters.PrimaryScreenWidth, 		(int)SystemParameters.PrimaryScreenHeight, SkeletonMaxX, 		SkeletonMaxY); JointscaledLeft = 	jointLeft.ScaleTo((int)SystemParameters.PrimaryScreenWidth, 		(int)SystemParameters.PrimaryScreenHeight, SkeletonMaxX, 		SkeletonMaxY); cursorX = (int)scaledRight.Position.X; cursorY = (int)scaledRight.Position.Y; …
Uso del SDK (gestos) …se pueden remitir los datos al método de MouseHelper encargado de la emulación del mouse: … boolleftClick; if (jointLeft.Position.Y > ClickThreshold) leftClick = true; else leftClick = false; MouseHelper.SendMouseInput(cursorX, cursorY, 		     		(int)SystemParameters.PrimaryScreenWidth, 				(int)SystemParameters.PrimaryScreenHeight, leftClick);      }
Si bien el SDK de Kinect exige más al programador que OpenNI+ NITE al no contar con reconocimiento de gestos, al tratarse del SDK oficial cuenta con soporte pleno de Microsoft (y es probable que se imponga frente a sus alternativas).  Se recomienda no obstante probar OpenNI+ NITE, pues con más de 6 meses de desarrollos en Kinectofreceuna base sólida a quien se iniciaen estaslides.
Referencias “Getting started with Microsoft KinectSDK”.  Disponible en http://www.i-programmer.info/programming/hardware/2623-getting-started-with-microsoft-kinect-sdk [Consultado el 28 de Julio de 2011] “Programming Guide: Getting Started with the Kinect for Windows SDK Beta”.  Incluido en la documentación del SDK. “SkeletalViewerWalkthrough”.  Disponible en http://research.microsoft.com/ en-us/um/redmond/projects/kinectsdk/guides.aspx [Consultado el 29 de Julio de 2011]

Más contenido relacionado

Similar a Expo kinect

Motion Control Computing - Kinect
Motion Control Computing - KinectMotion Control Computing - Kinect
Motion Control Computing - KinectFrederick Farfán
 
NSCoder - Metal Collada
NSCoder - Metal ColladaNSCoder - Metal Collada
NSCoder - Metal ColladaNSCoder Mexico
 
‌Kinect v2 descripción
‌Kinect v2 descripción‌Kinect v2 descripción
‌Kinect v2 descripciónDavid López
 
12 Horas de Visual Studio - Kinect SDK
12 Horas de Visual Studio - Kinect SDK12 Horas de Visual Studio - Kinect SDK
12 Horas de Visual Studio - Kinect SDKBruno Capuano
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Documentación1
Documentación1Documentación1
Documentación1conifeliz
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Androidjezabelink
 
Laboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadoresLaboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadoresjhonleal06
 
Realidad aumentada
Realidad aumentadaRealidad aumentada
Realidad aumentadamateo1982
 
Imagen Fundamentos II
Imagen Fundamentos IIImagen Fundamentos II
Imagen Fundamentos IIOmar Sanchez
 
Carlosalvarez realidadaumentada
Carlosalvarez realidadaumentadaCarlosalvarez realidadaumentada
Carlosalvarez realidadaumentadaCARLOS ALVAREZ
 
MOOC de Realidad aumentada (Coursera)
MOOC de Realidad aumentada (Coursera)MOOC de Realidad aumentada (Coursera)
MOOC de Realidad aumentada (Coursera)C Xyon PalaXy
 
Historia de flash por
Historia de flash por Historia de flash por
Historia de flash por alexmorang
 
Historia de Flash por Alex Moran
Historia de Flash por Alex MoranHistoria de Flash por Alex Moran
Historia de Flash por Alex Moranalexmorang
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Dayvideos
 

Similar a Expo kinect (20)

Motion Control Computing - Kinect
Motion Control Computing - KinectMotion Control Computing - Kinect
Motion Control Computing - Kinect
 
NSCoder - Metal Collada
NSCoder - Metal ColladaNSCoder - Metal Collada
NSCoder - Metal Collada
 
‌Kinect v2 descripción
‌Kinect v2 descripción‌Kinect v2 descripción
‌Kinect v2 descripción
 
Kinect
KinectKinect
Kinect
 
E book
E bookE book
E book
 
12 Horas de Visual Studio - Kinect SDK
12 Horas de Visual Studio - Kinect SDK12 Horas de Visual Studio - Kinect SDK
12 Horas de Visual Studio - Kinect SDK
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Documentación1
Documentación1Documentación1
Documentación1
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Android
 
Laboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadoresLaboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadores
 
realidad aumentada
realidad aumentadarealidad aumentada
realidad aumentada
 
A
AA
A
 
Realidad aumentada
Realidad aumentadaRealidad aumentada
Realidad aumentada
 
Curso Desarrollo Android
Curso Desarrollo AndroidCurso Desarrollo Android
Curso Desarrollo Android
 
Imagen Fundamentos II
Imagen Fundamentos IIImagen Fundamentos II
Imagen Fundamentos II
 
Carlosalvarez realidadaumentada
Carlosalvarez realidadaumentadaCarlosalvarez realidadaumentada
Carlosalvarez realidadaumentada
 
MOOC de Realidad aumentada (Coursera)
MOOC de Realidad aumentada (Coursera)MOOC de Realidad aumentada (Coursera)
MOOC de Realidad aumentada (Coursera)
 
Historia de flash por
Historia de flash por Historia de flash por
Historia de flash por
 
Historia de Flash por Alex Moran
Historia de Flash por Alex MoranHistoria de Flash por Alex Moran
Historia de Flash por Alex Moran
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Day
 

Más de campus party

¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? ¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? campus party
 
Producción del largometraje pequeñas voces
Producción del largometraje pequeñas vocesProducción del largometraje pequeñas voces
Producción del largometraje pequeñas vocescampus party
 
Conferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilConferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilcampus party
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contrerascampus party
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contrerascampus party
 
X taller bluevialiminal
X taller bluevialiminalX taller bluevialiminal
X taller bluevialiminalcampus party
 
X liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallerX liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallercampus party
 
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1campus party
 
Theremin Alfredo Vargas
Theremin Alfredo Vargas Theremin Alfredo Vargas
Theremin Alfredo Vargas campus party
 
Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon campus party
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés BautistaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautistacampus party
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés FonsecaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonsecacampus party
 
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPAseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPcampus party
 
Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping campus party
 
Creación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticaCreación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticacampus party
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...campus party
 

Más de campus party (20)

Titulo
Titulo Titulo
Titulo
 
¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad? ¿Qué es SCADA y cómo me afecta su (in)seguridad?
¿Qué es SCADA y cómo me afecta su (in)seguridad?
 
Producción del largometraje pequeñas voces
Producción del largometraje pequeñas vocesProducción del largometraje pequeñas voces
Producción del largometraje pequeñas voces
 
Conferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvilConferencia: Aplicaciones y el reto del desarrollo móvil
Conferencia: Aplicaciones y el reto del desarrollo móvil
 
Liminal Bluevia 1
Liminal Bluevia 1Liminal Bluevia 1
Liminal Bluevia 1
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
 
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel ContrerasComo sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
Como sería un viaje a la velocidad de la luz - Miguel Ángel Contreras
 
X taller bluevialiminal
X taller bluevialiminalX taller bluevialiminal
X taller bluevialiminal
 
X liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallerX liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-taller
 
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
X elalgoritmodelamemoria maria juliana soto (social media) (1) 1
 
Theremin Alfredo Vargas
Theremin Alfredo Vargas Theremin Alfredo Vargas
Theremin Alfredo Vargas
 
Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon Sonido y cine Ricardo Escallon
Sonido y cine Ricardo Escallon
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés BautistaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Bautista
 
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés FonsecaPhotoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
Photoshop para fotógrafos. Del cuarto oscuro al cuarto digital - Andrés Fonseca
 
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASPAseguramiento de Vulnerabilidades Web con tecnologías OWASP
Aseguramiento de Vulnerabilidades Web con tecnologías OWASP
 
Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping Mundos virtuales inmersivos y social shopping
Mundos virtuales inmersivos y social shopping
 
Creación transmediática y comunidades en práctica
Creación transmediática y comunidades en prácticaCreación transmediática y comunidades en práctica
Creación transmediática y comunidades en práctica
 
Android+Arduino
Android+ArduinoAndroid+Arduino
Android+Arduino
 
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
Implementación de Cloud Computing con Software Libre y medidas de seguridad p...
 
Linux en caja
Linux en cajaLinux en caja
Linux en caja
 

Último

Empresa Sazonadores Lopesa estudio de mercado
Empresa Sazonadores Lopesa estudio de mercadoEmpresa Sazonadores Lopesa estudio de mercado
Empresa Sazonadores Lopesa estudio de mercadoPsicoterapia Holística
 
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptxsenati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptxnathalypaolaacostasu
 
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptx
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptxHIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptx
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptxTecvalSAS2
 
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...TaniaCruzInga
 
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBREDISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBREdianayarelii17
 
Catalogo de tazas para la tienda nube de dostorosmg
Catalogo de tazas para la tienda nube de dostorosmgCatalogo de tazas para la tienda nube de dostorosmg
Catalogo de tazas para la tienda nube de dostorosmgdostorosmg
 
liderazgo guia.pdf.............................
liderazgo guia.pdf.............................liderazgo guia.pdf.............................
liderazgo guia.pdf.............................MIGUELANGELLEGUIAGUZ
 
2 Tipo Sociedad comandita por acciones.pptx
2 Tipo Sociedad comandita por acciones.pptx2 Tipo Sociedad comandita por acciones.pptx
2 Tipo Sociedad comandita por acciones.pptxRicardo113759
 
Sostenibilidad y continuidad huamcoli robin-cristian.pptx
Sostenibilidad y continuidad huamcoli robin-cristian.pptxSostenibilidad y continuidad huamcoli robin-cristian.pptx
Sostenibilidad y continuidad huamcoli robin-cristian.pptxmarlonrea6
 
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptxi7ingenieria
 
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADA
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADADECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADA
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADAgordonruizsteffy
 
mapa-conceptual-evidencias-de-auditoria_compress.pdf
mapa-conceptual-evidencias-de-auditoria_compress.pdfmapa-conceptual-evidencias-de-auditoria_compress.pdf
mapa-conceptual-evidencias-de-auditoria_compress.pdfAndresSebastianTamay
 
Hiperbilirrubinemia en el recién nacido.pptx
Hiperbilirrubinemia en el recién nacido.pptxHiperbilirrubinemia en el recién nacido.pptx
Hiperbilirrubinemia en el recién nacido.pptxsalazarsilverio074
 
Analisis del art. 37 de la Ley del Impuesto a la Renta
Analisis del art. 37 de la Ley del Impuesto a la RentaAnalisis del art. 37 de la Ley del Impuesto a la Renta
Analisis del art. 37 de la Ley del Impuesto a la Rentamarbin6
 
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdfSENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdfJaredQuezada3
 
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docx
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docxCRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docx
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docxgeuster2
 
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdf
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdfComparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdf
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdfAJYSCORP
 
Manual de Imagen Personal y uso de uniformes
Manual de Imagen Personal y uso de uniformesManual de Imagen Personal y uso de uniformes
Manual de Imagen Personal y uso de uniformesElizabeth152261
 
4 Tipos de Empresa Sociedad colectiva.pptx
4 Tipos de Empresa Sociedad colectiva.pptx4 Tipos de Empresa Sociedad colectiva.pptx
4 Tipos de Empresa Sociedad colectiva.pptxRicardo113759
 
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptx
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptxCORRIENTES DEL PENSAMIENTO ECONÓMICO.pptx
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptxJOHUANYQUISPESAEZ
 

Último (20)

Empresa Sazonadores Lopesa estudio de mercado
Empresa Sazonadores Lopesa estudio de mercadoEmpresa Sazonadores Lopesa estudio de mercado
Empresa Sazonadores Lopesa estudio de mercado
 
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptxsenati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
 
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptx
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptxHIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptx
HIGIENE_POSTURAL-_MANEJO_DE_CARGA1compr.pptx
 
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...
2024 - 04 PPT Directiva para la formalizacion, sustento y registro del gasto ...
 
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBREDISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE
 
Catalogo de tazas para la tienda nube de dostorosmg
Catalogo de tazas para la tienda nube de dostorosmgCatalogo de tazas para la tienda nube de dostorosmg
Catalogo de tazas para la tienda nube de dostorosmg
 
liderazgo guia.pdf.............................
liderazgo guia.pdf.............................liderazgo guia.pdf.............................
liderazgo guia.pdf.............................
 
2 Tipo Sociedad comandita por acciones.pptx
2 Tipo Sociedad comandita por acciones.pptx2 Tipo Sociedad comandita por acciones.pptx
2 Tipo Sociedad comandita por acciones.pptx
 
Sostenibilidad y continuidad huamcoli robin-cristian.pptx
Sostenibilidad y continuidad huamcoli robin-cristian.pptxSostenibilidad y continuidad huamcoli robin-cristian.pptx
Sostenibilidad y continuidad huamcoli robin-cristian.pptx
 
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx
260813887-diagrama-de-flujo-de-proceso-de-esparrago-fresco-verde.pptx
 
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADA
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADADECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADA
DECRETO-2535-DE-1993-pdf.pdf VIGILANCIA PRIVADA
 
mapa-conceptual-evidencias-de-auditoria_compress.pdf
mapa-conceptual-evidencias-de-auditoria_compress.pdfmapa-conceptual-evidencias-de-auditoria_compress.pdf
mapa-conceptual-evidencias-de-auditoria_compress.pdf
 
Hiperbilirrubinemia en el recién nacido.pptx
Hiperbilirrubinemia en el recién nacido.pptxHiperbilirrubinemia en el recién nacido.pptx
Hiperbilirrubinemia en el recién nacido.pptx
 
Analisis del art. 37 de la Ley del Impuesto a la Renta
Analisis del art. 37 de la Ley del Impuesto a la RentaAnalisis del art. 37 de la Ley del Impuesto a la Renta
Analisis del art. 37 de la Ley del Impuesto a la Renta
 
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdfSENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
 
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docx
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docxCRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docx
CRITERIOS DE EVALUACIÓN - NIVEL INICIAL.docx
 
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdf
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdfComparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdf
Comparativo DS 024-2016-EM vs DS 023-2017-EM - 21.08.17 (1).pdf
 
Manual de Imagen Personal y uso de uniformes
Manual de Imagen Personal y uso de uniformesManual de Imagen Personal y uso de uniformes
Manual de Imagen Personal y uso de uniformes
 
4 Tipos de Empresa Sociedad colectiva.pptx
4 Tipos de Empresa Sociedad colectiva.pptx4 Tipos de Empresa Sociedad colectiva.pptx
4 Tipos de Empresa Sociedad colectiva.pptx
 
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptx
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptxCORRIENTES DEL PENSAMIENTO ECONÓMICO.pptx
CORRIENTES DEL PENSAMIENTO ECONÓMICO.pptx
 

Expo kinect

  • 1. <Desarrollo con Kinect> Por: Fabián Andrés Gómez
  • 2. Introducción El periférico Kinect de Microsoft ofrece posibilidades sin precedentes para la experimentación interactiva y el desarrollo de aplicaciones de realidad aumentada (AR) con interfaces naturales de usuario (NUI). Lo particular del kinect es la conjunción de un amplio conjunto de sensores, bajo costo, preprocesamientoon-board, apoyo de la comunidad libre y un respaldo –ambiguo, debe decirse- del propio Microsoft al desarrollo por fuera de la Xbox.
  • 4. Detalles del hardware El Kinect es un dispositivo USB multicomponenteque incluye dos cámaras, una VGA (640x480) y una QVGA (320x240). La primera de estas es una cámara normal (similar a una webcam), mientras la segunda carece de filtro IR y se emplea para medir distancias a partir del proyector IR integrado. La frecuencia de actualización de ambas cámaras es de 30 fps. Adicionalmente el Kinect cuenta con un array de micrófonos (con cancelación de eco y ruido on-board). Curiosidades: 64 MB de memoria DDR2, lámina peltier tras proyector IR, acelerómetro, 12W de consumo (vs. 2.5 suministrados por un USB).
  • 6. Alternativas de desarrollo (1) Antes del 16 de Junio existían dos alternativas para desarrollar en Kinect: OpenNI+ NITE: librería y drivers del fabricante del Kinect (PrimeSense). Soporta audio, video, profundidad, skeletal tracking y handgesturerecognition. Tiempo de instalación: 5 minutos. Libfreenect: de Openkinect.org, con gran apoyo por parte de la comunidad Open Source. Soporta audio y video. Tiempo de instalación: 1 hora.
  • 7. Alternativas de desarrollo (2) El 16 de Junio de 2011 Microsoft liberó el SDK beta para desarrollo de aplicaciones en Windows 7 para Kinect. Este incluye un API para desarrollo (en C#, VB y C++), y ejemplos de código. El instalador y la documentación están disponibles en la URL http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/(más fácil: tinyurl.com/sdkkinect)
  • 8. Características SDK oficial Soporta skeletal tracking de dos personas y rastreo de posición de hasta cuatro. Soporta múltiples dispositivos Kinect. Streams de vídeo estándar y de datos de distancia de los objetos con respecto al sensor. Streams de audio del array de 4 micrófonos con identificación de fuente y soporte de reconocimiento de voz vía Microsoft.Speech. Baja latencia para los streams de datos recuperados (similar a la disponible en la Xbox 360).
  • 9. Limitaciones SDK oficial No permite el desarrollo comercial Las aplicaciones desarrolladas deben correr sobre la máquina física y no en VMs Creado para desarrollo en conjunto con herramientas de Microsoft (Visual Studio 2010 sobre Windows 7) Sólo soporta desarrollo x86 (aunque se incluyen drivers x64 y x86 las librerías son para x86) Los motores pueden ser activados 1 vez por segundo o máximo 15 veces en 20 segundos. El skeletal tracking sólo opera con figuras en posición de pie.
  • 10. Arquitectura SDK oficial (1) Fuente: “Getting Started with the Kinect for Windows SDK Beta from Microsoft Research”. P. 15. Disponible en http://http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ docs/ProgrammingGuide_KinectSDK.pdf (Consultado el 28 de Junio de 2011)
  • 11. Arquitectura SDK oficial (2) Fuente: “Getting Started with the Kinect for Windows SDK Beta from Microsoft Research”. P. 15. Disponible en http://http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/ docs/ProgrammingGuide_KinectSDK.pdf (Consultado el 28 de Junio de 2011)
  • 14. La demo desarrollada consiste en un Arkanoid o Breakout simplificado. La interacción del usuario se realiza a partir de skeletal tracking e interpretación de gestos basada en el sensor de imagen de video. Está implementada en C# con WPF (Windows PresentationFoundation) para la interfaz.
  • 15. Uso del SDK (preliminares) Se debe adicionar como referencia del proyecto en Visual Studio la dll que contiene el namespaceMicrosoft.Research.Kinect.Nui (el archivo en cuestión es homónimo y está en el directorio del SDK). Adicionalmente se debe declarar el uso del namespace asociado en la clase de la ventana principal.
  • 16. Uso del SDK (inicialización) Todo programa desarrollado en Kinect debe iniciar creando un objeto Runtime, el cual representa al dispositivo Kinect y todos sus recursos disponibles. Se le pasa como parámetro un OR con los sensores y configuraciones de los mismos que se van a emplear: Esto tiene lugar en el método que maneja el evento de carga de la ventana (Window_loaded) Runtime kinect = new Runtime(); kinect.initialize(RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor)
  • 17. Uso del SDK (inicialización) Al finalizar el uso de los sensores se debe “apagar” el uso de los servicios del kinect: kinect.Shutdown();
  • 18. Uso del SDK (flujos de datos) Como parte del mismo método llamado al cargar la ventana se abren los flujos de los sensores: Kinect generará eventos de esqueleto y cuadros de video, por lo que deben registrarse métodos para manejarlos: kinect.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color); kinect.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution320x240, ImageType.DepthAndPlayerIndex); kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(SkeletonFrameReady); kinect.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(ColorFrameReady);
  • 19. Uso del SDK (flujos de datos) Como alternativa a esta aproximación (de tipo PUSH o suscripción) puede hacerse PULL de las actualizaciones con ImageStream.GetNextFrameoSkeletonEngine.GetNextFrame. En este caso la lógica de la aplicación debe controlar el ritmo al que se solicitan los datos de acuerdo a la configuración elegida para el sensor (los API de imagen y datos de distancias nunca entregan el mismo frame dos veces).
  • 20. Uso del SDK (captura video) En el caso de la fuente de video se recuperará un objeto PlanarImage que representa la imagen con una profundidad de color de 32 bits. WPF integra el método BitmapSource.Create que convierte los bits en bruto recibidos en un bmp: void ColorFrameReady(object sender, ImageFrameReadyEventArgs e) { PlanarImage Image = e.ImageFrame.Image; ideo.Source = BitmapSource.Create( Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel); }
  • 21. Uso del SDK (skeletal tracking) Ahora bien en cuanto al skeletal tracking este puede ser activo (2 jugadores) o pasivo (4 jugadores). Las 20 articulaciones (representadas por objetos Joint), requieren una triple conversión de coordenadas para trazar un esqueleto en pantalla.
  • 22. Uso del SDK (conversiones) La conversión de coordenadas (para articulaciones y huesos) tiene lugar así: private Point getDisplayPosition(Jointjoint) { floatdepthX, depthY; kinect.SkeletonEngine.SkeletonToDepthImage(joint.Position, outdepthX, outdepthY); depthX = Math.Max(0, Math.Min(depthX * 320, 320)); depthY = Math.Max(0, Math.Min(depthY * 240, 240)); intcolorX, colorY; ImageViewAreaiv = new ImageViewArea(); kinect.NuiCamera.GetColorPixelCoordinatesFromDepthPixel( ImageResolution.Resolution640x480, iv, (int)depthX,(int)depthY, (short)0, outcolorX, outcolorY); return new Point((int)(skeleton.Width * colorX / 640.0), (int)(skeleton.Height * colorY / 480)); }
  • 23. Uso del SDK (salida gráfica) A la conversión referida deben recurrir el método que hace el manejo de los eventos del esqueleto, pues este se ocupa de dibujar articulaciones y huesos. Para ello inicia recuperando del frame recibido un arreglo de datos de esqueletos capturados… voidnui_SkeletonFrameReady(objectsender, SkeletonFrameReadyEventArgs e) { SkeletonFrameskeletonFrame = e.SkeletonFrame; intiSkeleton = 0; Brush[] brushes = new Brush[6]; brushes[0] = new SolidColorBrush(Color.FromRgb(255, 0, 0)); //Omitida definición de los otros 5 pinceles... SkeletonData[] skeletonArray = skeletonFrame.Skeletons; skeleton.Children.Clear(); …
  • 24. Uso del SDK (manejo esqueleto) …y hace un recorrido doble sobre este arreglo para dibujar huesos y articulaciones: foreach (SkeletonData data in skeletonFrame.Skeletons) { if (SkeletonTrackingState.Tracked == data.TrackingState) { Brushbrush = brushes[iSkeleton % brushes.Length]; skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.Spine, JointID.ShoulderCenter, JointID.Head)); //Omitida adición a Children de los 4 segmentos de cuerpo restantes foreach (Jointjoint in data.Joints) { Point jointPos = getDisplayPosition(joint); Line jointLine = new Line(); //Omitida ampliación de la dimensión de la art. skeleton.Children.Add(jointLine); } } …
  • 25.
  • 26.
  • 27. Uso del SDK (gestos) …y tras escalar a las dimensiones de la pantalla las coordenadas de las manos… … intcursorX, cursorY; JointjointRight = data.Joints[JointID.HandRight]; JointjointLeft = data.Joints[JointID.HandLeft]; JointscaledRight = jointRight.ScaleTo((int)SystemParameters.PrimaryScreenWidth, (int)SystemParameters.PrimaryScreenHeight, SkeletonMaxX, SkeletonMaxY); JointscaledLeft = jointLeft.ScaleTo((int)SystemParameters.PrimaryScreenWidth, (int)SystemParameters.PrimaryScreenHeight, SkeletonMaxX, SkeletonMaxY); cursorX = (int)scaledRight.Position.X; cursorY = (int)scaledRight.Position.Y; …
  • 28. Uso del SDK (gestos) …se pueden remitir los datos al método de MouseHelper encargado de la emulación del mouse: … boolleftClick; if (jointLeft.Position.Y > ClickThreshold) leftClick = true; else leftClick = false; MouseHelper.SendMouseInput(cursorX, cursorY, (int)SystemParameters.PrimaryScreenWidth, (int)SystemParameters.PrimaryScreenHeight, leftClick); }
  • 29. Si bien el SDK de Kinect exige más al programador que OpenNI+ NITE al no contar con reconocimiento de gestos, al tratarse del SDK oficial cuenta con soporte pleno de Microsoft (y es probable que se imponga frente a sus alternativas). Se recomienda no obstante probar OpenNI+ NITE, pues con más de 6 meses de desarrollos en Kinectofreceuna base sólida a quien se iniciaen estaslides.
  • 30. Referencias “Getting started with Microsoft KinectSDK”. Disponible en http://www.i-programmer.info/programming/hardware/2623-getting-started-with-microsoft-kinect-sdk [Consultado el 28 de Julio de 2011] “Programming Guide: Getting Started with the Kinect for Windows SDK Beta”. Incluido en la documentación del SDK. “SkeletalViewerWalkthrough”. Disponible en http://research.microsoft.com/ en-us/um/redmond/projects/kinectsdk/guides.aspx [Consultado el 29 de Julio de 2011]