SlideShare ist ein Scribd-Unternehmen logo
1 von 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]

Weitere ähnliche Inhalte

Ähnlich wie Expo kinect

Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
Fe
 
Documentación1
Documentación1Documentación1
Documentación1
conifeliz
 
Realidad aumentada
Realidad aumentadaRealidad aumentada
Realidad aumentada
mateo1982
 
Imagen Fundamentos II
Imagen Fundamentos IIImagen Fundamentos II
Imagen Fundamentos II
Omar Sanchez
 
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
 

Ähnlich wie 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
 

Mehr von 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
 
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) 1
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
 
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
 

Mehr von 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
 

Kürzlich hochgeladen

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
AJYSCORP
 
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
salazarsilverio074
 
GUIA UNIDAD 3 costeo variable fce unc.docx
GUIA UNIDAD 3 costeo variable fce unc.docxGUIA UNIDAD 3 costeo variable fce unc.docx
GUIA UNIDAD 3 costeo variable fce unc.docx
AmyKleisinger
 
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
Evafabi
 
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptxDIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
7500222160
 
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdfSENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
JaredQuezada3
 
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptxsenati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
nathalypaolaacostasu
 
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
dostorosmg
 

Kürzlich hochgeladen (20)

Contabilidad Gubernamental guia contable
Contabilidad Gubernamental guia contableContabilidad Gubernamental guia contable
Contabilidad Gubernamental guia contable
 
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
 
EL REFERENDO para una exposición de sociales
EL REFERENDO para una exposición de socialesEL REFERENDO para una exposición de sociales
EL REFERENDO para una exposición de sociales
 
____ABC de las constelaciones con enfoque centrado en soluciones - Gabriel de...
____ABC de las constelaciones con enfoque centrado en soluciones - Gabriel de...____ABC de las constelaciones con enfoque centrado en soluciones - Gabriel de...
____ABC de las constelaciones con enfoque centrado en soluciones - Gabriel de...
 
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
 
GUIA UNIDAD 3 costeo variable fce unc.docx
GUIA UNIDAD 3 costeo variable fce unc.docxGUIA UNIDAD 3 costeo variable fce unc.docx
GUIA UNIDAD 3 costeo variable fce unc.docx
 
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
 
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
3ro - Semana 1 (EDA 2) 2023 (3).ppt. edx
 
liderazgo guia.pdf.............................
liderazgo guia.pdf.............................liderazgo guia.pdf.............................
liderazgo guia.pdf.............................
 
Correcion del libro al medio hay sitio.pptx
Correcion del libro al medio hay sitio.pptxCorrecion del libro al medio hay sitio.pptx
Correcion del libro al medio hay sitio.pptx
 
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
 
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
 
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 ...
 
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptxDIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
DIAPOSITIVAS LIDERAZGO Y GESTION INTERGENERACION (3).pptx
 
Las sociedades anónimas en el Perú , de acuerdo a la Ley general de sociedades
Las sociedades anónimas en el Perú , de acuerdo a la Ley general de sociedadesLas sociedades anónimas en el Perú , de acuerdo a la Ley general de sociedades
Las sociedades anónimas en el Perú , de acuerdo a la Ley general de sociedades
 
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdfSENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
SENTENCIA COLOMBIA DISCRIMINACION SELECCION PERSONAL.pdf
 
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptxsenati-powerpoint_5TOS-_ALUMNOS (1).pptx
senati-powerpoint_5TOS-_ALUMNOS (1).pptx
 
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
 
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
 

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]