SlideShare una empresa de Scribd logo
<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 - Kinect
Frederick Farfán
 
NSCoder - Metal Collada
NSCoder - Metal ColladaNSCoder - Metal Collada
NSCoder - Metal Collada
NSCoder Mexico
 
‌Kinect v2 descripción
‌Kinect v2 descripción‌Kinect v2 descripción
‌Kinect v2 descripción
David López
 
Kinect
KinectKinect
Kinect
campus party
 
E book
E bookE book
E book
windixi
 
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
Bruno Capuano
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
Fe
 
Documentación1
Documentación1Documentación1
Documentación1
conifeliz
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Android
jezabelink
 
Laboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadoresLaboratorio 1 arquitectura de computadores
Laboratorio 1 arquitectura de computadores
jhonleal06
 
realidad aumentada
realidad aumentadarealidad aumentada
realidad aumentada
Esteban Garces
 
A
AA
Realidad aumentada
Realidad aumentadaRealidad aumentada
Realidad aumentada
mateo1982
 
Curso Desarrollo Android
Curso Desarrollo AndroidCurso Desarrollo Android
Curso Desarrollo Android
SlashMobility.com
 
Imagen Fundamentos II
Imagen Fundamentos IIImagen Fundamentos II
Imagen Fundamentos II
Omar Sanchez
 
Carlosalvarez realidadaumentada
Carlosalvarez realidadaumentadaCarlosalvarez realidadaumentada
Carlosalvarez realidadaumentada
CARLOS 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 Moran
alexmorang
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Day
videos
 

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

Titulo
Titulo Titulo
Titulo
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 voces
campus 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óvil
campus party
 
Liminal Bluevia 1
Liminal Bluevia 1Liminal Bluevia 1
Liminal Bluevia 1
campus 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 Contreras
campus 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 Contreras
campus party
 
X taller bluevialiminal
X taller bluevialiminalX taller bluevialiminal
X taller bluevialiminal
campus party
 
X liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-tallerX liminal buevia 2 (dllo.)-taller
X liminal buevia 2 (dllo.)-taller
campus 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 Bautista
campus 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 Fonseca
campus 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 OWASP
campus 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áctica
campus party
 
Android+Arduino
Android+ArduinoAndroid+Arduino
Android+Arduino
campus 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
 
Linux en caja
Linux en cajaLinux en caja
Linux en caja
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

Los catorce principios de calidad en las empresas, según Deming..pptx
Los catorce  principios de calidad en las empresas, según Deming..pptxLos catorce  principios de calidad en las empresas, según Deming..pptx
Los catorce principios de calidad en las empresas, según Deming..pptx
AbelQuispe31
 
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdfEjercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
MelisitaaQuionez
 
Normas de Seguridad Vial ISO 39001-2012.pdf
Normas de Seguridad Vial ISO 39001-2012.pdfNormas de Seguridad Vial ISO 39001-2012.pdf
Normas de Seguridad Vial ISO 39001-2012.pdf
henrywz8831
 
El sistema financiero mexicano PRESENTACIÓN
El sistema financiero mexicano PRESENTACIÓNEl sistema financiero mexicano PRESENTACIÓN
El sistema financiero mexicano PRESENTACIÓN
ArielFItzAlcal
 
CARTA CEVICHON restaunrante ceviche y mariscos
CARTA CEVICHON restaunrante ceviche y mariscosCARTA CEVICHON restaunrante ceviche y mariscos
CARTA CEVICHON restaunrante ceviche y mariscos
JorgeCruz476458
 
Trabajo sobre Presupuesto Empresarial .pdf
Trabajo sobre Presupuesto Empresarial .pdfTrabajo sobre Presupuesto Empresarial .pdf
Trabajo sobre Presupuesto Empresarial .pdf
YennyGarcia45
 
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdfPPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
JosEsneyderCaquiCaba
 
METODOS DE VALUACIÓN DE INVENTARIOS.pptx
METODOS DE VALUACIÓN DE INVENTARIOS.pptxMETODOS DE VALUACIÓN DE INVENTARIOS.pptx
METODOS DE VALUACIÓN DE INVENTARIOS.pptx
BrendaRub1
 
Tema 3 - Tecnicas de Recoleccion de Datos.pptx
Tema 3 - Tecnicas de Recoleccion de Datos.pptxTema 3 - Tecnicas de Recoleccion de Datos.pptx
Tema 3 - Tecnicas de Recoleccion de Datos.pptx
CarmeloPrez1
 
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptxANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
PalJosuTiznadoCanaza
 
El-Codigo-De-La-Abundancia para todos.pdf
El-Codigo-De-La-Abundancia para todos.pdfEl-Codigo-De-La-Abundancia para todos.pdf
El-Codigo-De-La-Abundancia para todos.pdf
AshliMack
 
Teoria del diseño organizacional. Admon.
Teoria del diseño organizacional. Admon.Teoria del diseño organizacional. Admon.
Teoria del diseño organizacional. Admon.
Vavendao
 
Técnica lúdica de organización para mejorar la productividad
Técnica lúdica de organización para mejorar la productividadTécnica lúdica de organización para mejorar la productividad
Técnica lúdica de organización para mejorar la productividad
ameliaarratiale12287
 
Glosario de Terminos de la Revolucion Rusa
Glosario de Terminos de la Revolucion RusaGlosario de Terminos de la Revolucion Rusa
Glosario de Terminos de la Revolucion Rusa
WelingtonOmarSanchez
 
Calculo de amortización de un prestamo.pdf
Calculo de amortización de un prestamo.pdfCalculo de amortización de un prestamo.pdf
Calculo de amortización de un prestamo.pdf
LEIDYRIOFRIO
 
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
Mario Mendoza Marichal
 
PPT SUSTENTACION TESIS IV DE CONTABILIDAD
PPT SUSTENTACION TESIS IV DE CONTABILIDADPPT SUSTENTACION TESIS IV DE CONTABILIDAD
PPT SUSTENTACION TESIS IV DE CONTABILIDAD
edgarsnet5
 
ejecucion de la investigacion de mercados
ejecucion  de la investigacion de mercadosejecucion  de la investigacion de mercados
ejecucion de la investigacion de mercados
MARIAGUADALUPEMENDEZ10
 
Evolución de la mercadotecnia y selección del producto en la empresa KFC
Evolución de la mercadotecnia y selección del producto en la empresa KFCEvolución de la mercadotecnia y selección del producto en la empresa KFC
Evolución de la mercadotecnia y selección del producto en la empresa KFC
AndrobertoAlva
 
1-Infografia Cifras Nacional unimos j.pdf
1-Infografia Cifras Nacional unimos j.pdf1-Infografia Cifras Nacional unimos j.pdf
1-Infografia Cifras Nacional unimos j.pdf
paolamoreno683631
 

Último (20)

Los catorce principios de calidad en las empresas, según Deming..pptx
Los catorce  principios de calidad en las empresas, según Deming..pptxLos catorce  principios de calidad en las empresas, según Deming..pptx
Los catorce principios de calidad en las empresas, según Deming..pptx
 
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdfEjercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
Ejercicio de Contabilidad Segundo A Nocturno I y II Hemisemestre-2.pdf
 
Normas de Seguridad Vial ISO 39001-2012.pdf
Normas de Seguridad Vial ISO 39001-2012.pdfNormas de Seguridad Vial ISO 39001-2012.pdf
Normas de Seguridad Vial ISO 39001-2012.pdf
 
El sistema financiero mexicano PRESENTACIÓN
El sistema financiero mexicano PRESENTACIÓNEl sistema financiero mexicano PRESENTACIÓN
El sistema financiero mexicano PRESENTACIÓN
 
CARTA CEVICHON restaunrante ceviche y mariscos
CARTA CEVICHON restaunrante ceviche y mariscosCARTA CEVICHON restaunrante ceviche y mariscos
CARTA CEVICHON restaunrante ceviche y mariscos
 
Trabajo sobre Presupuesto Empresarial .pdf
Trabajo sobre Presupuesto Empresarial .pdfTrabajo sobre Presupuesto Empresarial .pdf
Trabajo sobre Presupuesto Empresarial .pdf
 
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdfPPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
PPT TRABAJO FINAL CREATIVIDAD EMPRESARIAL.pdf
 
METODOS DE VALUACIÓN DE INVENTARIOS.pptx
METODOS DE VALUACIÓN DE INVENTARIOS.pptxMETODOS DE VALUACIÓN DE INVENTARIOS.pptx
METODOS DE VALUACIÓN DE INVENTARIOS.pptx
 
Tema 3 - Tecnicas de Recoleccion de Datos.pptx
Tema 3 - Tecnicas de Recoleccion de Datos.pptxTema 3 - Tecnicas de Recoleccion de Datos.pptx
Tema 3 - Tecnicas de Recoleccion de Datos.pptx
 
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptxANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
ANÁLISIS FINANCIERO DE LA EMPRESA GLORIA.pptx
 
El-Codigo-De-La-Abundancia para todos.pdf
El-Codigo-De-La-Abundancia para todos.pdfEl-Codigo-De-La-Abundancia para todos.pdf
El-Codigo-De-La-Abundancia para todos.pdf
 
Teoria del diseño organizacional. Admon.
Teoria del diseño organizacional. Admon.Teoria del diseño organizacional. Admon.
Teoria del diseño organizacional. Admon.
 
Técnica lúdica de organización para mejorar la productividad
Técnica lúdica de organización para mejorar la productividadTécnica lúdica de organización para mejorar la productividad
Técnica lúdica de organización para mejorar la productividad
 
Glosario de Terminos de la Revolucion Rusa
Glosario de Terminos de la Revolucion RusaGlosario de Terminos de la Revolucion Rusa
Glosario de Terminos de la Revolucion Rusa
 
Calculo de amortización de un prestamo.pdf
Calculo de amortización de un prestamo.pdfCalculo de amortización de un prestamo.pdf
Calculo de amortización de un prestamo.pdf
 
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
Mario Mendoza Marichal — Un Líder con Maestría en Políticas Públicas por ...
 
PPT SUSTENTACION TESIS IV DE CONTABILIDAD
PPT SUSTENTACION TESIS IV DE CONTABILIDADPPT SUSTENTACION TESIS IV DE CONTABILIDAD
PPT SUSTENTACION TESIS IV DE CONTABILIDAD
 
ejecucion de la investigacion de mercados
ejecucion  de la investigacion de mercadosejecucion  de la investigacion de mercados
ejecucion de la investigacion de mercados
 
Evolución de la mercadotecnia y selección del producto en la empresa KFC
Evolución de la mercadotecnia y selección del producto en la empresa KFCEvolución de la mercadotecnia y selección del producto en la empresa KFC
Evolución de la mercadotecnia y selección del producto en la empresa KFC
 
1-Infografia Cifras Nacional unimos j.pdf
1-Infografia Cifras Nacional unimos j.pdf1-Infografia Cifras Nacional unimos j.pdf
1-Infografia Cifras Nacional unimos j.pdf
 

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]