Reconocimiento de Gestos Kinect CSharp

  

IMPLEMENTACIÓN DE RECONOCIMIENTO FACIAL Y

GESTICULACIONES PARA EL MANEJO Y CONTROL DE

PROYECTO RESA

JHONNATAN FLORES MIRAMON

  

ASESOR INTERNO: M.T.I. EDUARDO VASQUEZ ZAYAS

ASESOR EXTERNO: I.S.C. SILVIA DURÁN BRAVO

TEHUACÁN, PUEBLA JUNIO 2013

  

ÍNDICE

Introducción

  Hoy en día las TIC (tecnologías de la información y la comunicación) son tan usuales en la vida cotidiana que las encontramos en casi todos los aspectos, desde mandar un simple SMS, hasta realizar una videoconferencia por internet a través de un dispositivo móvil. Estas tecnologías han cambiado la forma en que las personas llevan a cabo sus actividades, que él no contar con nociones básicas de cómo utilizar un dispositivo electrónico (computadora, celular, tableta, etc.) podría limitar las posibilidades de desarrollo y/o interacción social de las mismas. Actualmente el internet y las aplicaciones están ante la tercera generación de desarrollo. La primera generación consistió en trabajar con información estática que podía ser consultada a través de exploradores como si de un tablón de noticias se tratara. La segunda generación se ha basado en que las aplicaciones pudieran interaccionar con las personas; sirva como ejemplo los famosos carritos de compra. La tercera generación se caracteriza por aplicaciones que puedan interaccionar con otras aplicaciones; por ejemplo, para programar una reunión de negocios, su aplicación de contactos interaccionará con su aplicación de calendario que, a su vez, interaccionará con una aplicación de reserva de billetes para viajar en avión, que consultará a su aplicación de preferencias de usuario, y así cancelar alguna actividad ya programada. Para usar una computadora lo primero el usuario piensa es el uso del teclado, el ratón y el monitor esencialmente, ya que estos dispositivos son las interfaces fundamentales mediante las cuales accederemos al control y manejo de los programas que dentro funcionan, además de la interfaz de usuario la cual se complementa con menús, iconos, ventanas, sonidos para avisar de informes, errores o alertas, etcétera. Y aunque este tipo de interfaz ha sido muy bien aceptado y utilizado en las últimas décadas, este modelo presenta grandes limitaciones ante los nuevos escenarios de Tics.

  Actualmente se busca que las interfaces sean más naturales e intuitivas, como por ejemplo interfaces de voz y dialogo, reconocimiento de lenguaje natural, reconocimiento de características humanas (gestos, movimientos, etc.), así, estas interfaces son más amigables y ergonómicas ofreciéndonos una comunicación más natural entre hombre-computadora, más eficiente y productiva para interactuar de forma nativa, inspirado en la forma en la que el ser humano se comunica.

Justificación

  Las interfaces son la principal forma en que las personas interactúan con los sistemas y aplicaciones, por lo tanto es de vital importancia hacerlas mucho más amigables y naturales, por ese motivo el proyecto RESA busca en esta parte del proyecto, además de simplificar las tareas junto con la domótica, que las interfaces sean mucho más fáciles de entender y de utilizar. Los escenarios actuales como ambientes 3D, entornos gráficos aumentados y demás, han provocado que el uso de un teclado y un mouse sean ineficientes por lo cual es esencial buscar nuevas alternativas de interacción hombre- computadora. La interfaz natural de usuario (en inglés natural user interface o NUI) es aquella en las que se interactúa con un sistema, aplicación, etc., sin utilizar sistemas de mando o dispositivos de entrada de lascomo sería un ratón, lápiz óptico,etc., y en su lugar se hace uso de movimientos gestuales tales como las manos o el cuerpo es el mismo mando de control, en el caso de pantallas capacitivas multitáctiles la operación o control es por medio de la yemas de los dedos en uno o varios contactos, también el control de sistemas operativos por medio de voz humana y control cercano a la pantalla pero sin

  1 tocarla.

  La evolución de las computadoras además de centrarse en el desarrollo de hardware y software cada vez más potente, ha llevado también a la investigación y creación de nuevas opciones de interfaces de usuario que se adapten a lo que ya conoce y sabe el usuario y no lo contrario. La interfaz ideal sería aquella en que los usuarios interactúen con las computadoras y dispositivos de manera natural e intuitiva igual que lo hacen en el mundo real, invisible sin darse cuenta del uso de alguna herramienta o hardware para llevar a cabo una tarea, esto incluso ya está siendo posible gracias a que proyectos como RESA y similares se están llevando a cabo.

  El proyecto RESA es una forma de contribuir a aumentar la calidad de vida de las personas, hacer más versátil la distribución de la casa, cambiar las condiciones ambientales creando diferentes escenas predefinidas, y conseguir que la vivienda sea más funcional al permitir desarrollar facetas domésticas, profesionales, y de ocio bajo un mismo techo.

  

Objetivo General

  Implementar reconocimiento facial y gesticulaciones del cuerpo para interactuar con una aplicación de escritorio para el control y manejo de proyecto RESA (Residencias Automáticas).

Objetivos Específicos

   Implementar el comportamiento de un ratón con el dispositivo Kinect para Windows sobre un sistema de interfaz natural.  Implementar el reconocimiento de gesticulaciones del cuerpo.  Implementar la navegación de menús a través del dispositivo Kinect para Windows sobre un sistema de interfaz natural.  Implementar comandos para manipular y manejar aplicaciones con el dispositivo Kinect sobre un sistema de interfaz natural.  Implementar el reconocimiento facial para administrar el acceso y control a aplicaciones.  Integración de la interfaz gráfica para interactuar entre una aplicación de escritorio y el hardware (dispositivos Inalámbricos) para crear una ambiente más intuitivo.

  

Caracterización del área en que participó

  ArqInSoftware es una empresa de profesionales dedicados a proporcionar soluciones integrales basadas en el desarrollo de software y el uso de las nuevas tendencias tecnológicas. Además brinda soporte técnico a las empresas y particulares que lo soliciten, y su misión es: Producir software de calidad y

  

soluciones tecnológicas innovadoras, adaptables a las necesidades de

  nuestros socios comerciales para fomentar su desarrollo y crecimiento, utilizando un equipo de profesionales en desarrollo de software y tecnologías de

  información altamente competitivo.

  La empresa se divide en diferentes departamentos y el proyecto RESA se encuentra dentro del área de Desarrollo de Software Interactivo que a su vez pertenece al departamento de Sistemas y Desarrollo de Software. En la siguiente figura se muestra el organigrama de la empresa y se identifica el área donde se desarrolló el proyecto.

  

Figura 1 Organigrama de ArqInSoftware El departamento de Desarrollo de Software Interactivo se encarga del estudio, diseño, programación e implementación de soluciones que cubran los requerimientos específicos para cada proyecto. Se basa en estándares de calidad y con el personal profesional capacitado, lo cual permite crear soluciones innovadoras, escalables y fáciles de usar. Todo esto con ideas que surgen de un equipo de trabajo de gente joven, entusiasta y con gran experiencia en el ramo.

  Las características principales que debe poseer cada aplicación que se desarrolla en el departamento de desarrollo de software interactivo son las siguientes:  Debe ser muy fácil de manejar.  Un usuario con conocimientos informáticos mínimos debe ser capaz de interactuar con las aplicaciones.  Se utiliza una computadora como soporte, excepto donde se trabaje con algún otro dispositivo.  Control intuitivo que no hace falta haber manejado algo parecido antes.

  

Problemas a resolver, priorizándolos

  El desarrollo del proyecto de residencia se centrara en resolver los siguientes problemas:  Análisis de cada parte en que se divide el proyecto.  Documentar y comprender el funcionamiento de las librerías y dispositivos que se utilizaran en el proyecto.  Diseñar los algoritmos con los cuales se llevaran a cabo los reconocimientos de gestos del cuerpo.  Implementar los algoritmos necesarios para el reconocimiento de gestos.  Evaluar y optimizar los resultados obtenidos.  Integración con la interfaz de usuario, así como los dispositivos inalámbricos que trabajaran en conjunto.

  

Alcances

Se manejara el reconocimiento de gestos e interacción con las aplicaciones.

  Se manejara el reconocimiento facial para el seguimiento de gestos del rostro. Se integrara la interfaz y los dispositivos para interactuar con el proyecto RESA.

Limitaciones Se trabajará en un ambiente controlado

  Se necesita una computadora con Procesador Dual Core como mínimo y por lo menos contar con 2GB RAM para el manejo de los dispositivos. Para las pruebas es necesario contar con un dispositivo Kinect para Windows. Se trabajará solo con algunos aparatos electrónicos por el momento con opción de ampliar a más equipos en un futuro. El tiempo establecido y sobre todo comprender el funcionamiento de las bibliotecas utilizadas pueden ser un factor determinante para el desarrollo de aplicaciones con el Kinect para Windows.

  

Fundamentos Teóricos

Domótica

  La domótica es el conjunto de tecnologías aplicadas al control y la automatización inteligente de la vivienda, que permite una gestión eficiente del uso de la energía, además de aportar seguridad, confort, y comunicación entre el usuario y el sistema.

  Un sistema domótico es capaz de recoger información proveniente de unos sensores o entradas, procesarla y emitir órdenes a unos actuadores o salidas. El sistema puede acceder a redes exteriores de comunicación o información. La domótica aplicada a edificios no destinados a vivienda, es decir oficinas, hoteles, centros comerciales, de formación, hospitales y terciario, se denomina, inmótica.

  La domótica permite dar respuesta a los requerimientos que plantean estos cambios sociales y las nuevas tendencias de nuestra forma de vida, facilitando el diseño de casas y hogares más humanos, más personales, poli funcionales y flexibles.

  El sector de la domótica ha evolucionado considerablemente en los últimos años, y en la actualidad ofrece una oferta más consolidada. Hoy en día, la domótica aporta soluciones dirigidas a todo tipo de viviendas, incluidas las construcciones de vivienda oficial protegida. Además, se ofrecen más funcionalidades por menos dinero, más variedad de producto, y gracias a la evolución tecnológica, son más fáciles de usar y de instalar. En definitiva, la oferta es mejor y de mayor calidad, y su utilización es ahora más intuitiva y perfectamente manejable por cualquier usuario. Paralelamente, los instaladores de domótica han incrementado su nivel de formación y los modelos de implantación se han perfeccionado. Asimismo, los servicios posventa garantizan el perfecto mantenimiento de todos los sistemas.

  La red de control del sistema domótico se integra con la red de energía eléctrica y se coordina con el resto de redes con las que tenga relación: telefonía, televisión, y tecnologías de la información (Figura 2), cumpliendo con las reglas de

  

2

instalación aplicables a cada una de ellas.

  

Figura 2 Domótica

¿Qué aporta la domótica?

  La domótica contribuye a mejorar la calidad de vida del usuario:

   Facilitando el ahorro energético: gestiona inteligentemente la iluminación, climatización, agua caliente sanitaria, el riego, los electrodomésticos, etc., aprovechando mejor los recursos naturales, utilizando las tarifas horarias de menor coste, y reduce de esta manera la factura energética. Además, mediante la monitorización de consumos, se obtiene la información necesaria para modificar los hábitos y aumentar el ahorro y la eficiencia.

   Fomentando la accesibilidad: facilita el manejo de los elementos del hogar a las personas con discapacidades de la forma que más se ajuste a sus necesidades, además de ofrecer servicios de tele asistencia para aquellos que lo necesiten.

   Aportando seguridad de personas, animales y bienes: controles de intrusión y alarmas técnicas que permiten detectar incendios, fugas de gas o inundaciones de agua, etc.

   Convirtiendo la vivienda en un hogar más confortable: gestión de electrodomésticos, climatización, ventilación, iluminación natural y artificial…

   Garantizando las comunicaciones: recepción de avisos de anomalías e información del funcionamiento de equipos e instalaciones, gestión remota del hogar, etc.

  Además, la domótica facilita la introducción de infraestructuras y la creación de escenarios (ver Figura 3) que se complementan con los avances en la sociedad de la información:

   Comunicaciones: Transmisión de voz y datos, incluyendo textos, imágenes, sonidos (multimedia) con redes locales (LAN) compartiendo acceso a Internet, recursos e intercambio entre todos los dispositivos, acceso a nuevos servicios de telefonía sobre IP, televisión digital, televisión por cable, diagnóstico remoto, videoconferencias, etc.

   Mantenimiento: Con capacidad de incorporar el tele mantenimiento de los equipos.

   Ocio y tiempo libre: Descansar y divertirse con radio, televisión, multi-room, cine en casa, videojuegos, captura, tratamiento y distribución de imágenes fijas (foto) y dinámicas (vídeo) y de sonido (música) dentro y fuera de la casa, a través de Internet, etc.

   Salud: Actuar en la sanidad mediante asistencia sanitaria, consultoría sobre alimentación y dieta, telecontrol y alarmas de salud, medicina monitorizada, cuidado médico, etc.

   Compra: Comprar y vender mediante la telecompra, televenta, telereserva, desde la casa, etc.

   Finanzas: Gestión del dinero y las cuentas bancarias mediante la telebanca, consultoría financiera.

   Aprendizaje: Aprender y reciclarse mediante la tele-enseñanza, cursos a distancia.

   Actividad profesional: Trabajar total o parcialmente desde el hogar, posibilidad viable para ciertas profesiones (teletrabajo), etc.

   Ciudadanía: Gestiones múltiples con la Administración del Estado, la Comunidad Autónoma y el Municipio, voto electrónico, etc.

   Acceso a información: Museos, bibliotecas, libros, periódicos, información meteorológica, etc.

  Figura 3 Ejemplo de escenario domótica

Interfaz natural de usuario (NUI)

Los dispositivos móviles como teléfonos inteligentes y “tablets” han hecho popular el uso de atractivas interfaces “multitouch”, este tipo de interfaces están

  extendiéndose a otros dispositivos como mesas interactivas, cristales inteligentes y otros tipos de superficies, para permitir interactuar de una manera más natural a las personas con la información (ver Figura 4). Con la aparición de Wii y Kinect que ha agregado el lenguaje corporal, los diseñadores y programadores han pensado en una gran cantidad de aplicaciones que en los próximos años cambiaran la manera en que nos comunicamos con las computadoras. En computación, una interfaz natural de usuario o NUI, es el término común usado por diseñadores y desarrolladores de interfaces de computadora para referirse a una interfaz de usuario que es efectivamente invisible, o se vuelve invisible con las interacciones aprendidas sucesivamente por sus usuarios. La palabra natural se utiliza porque la mayoría de las interfaces de computadora utilizan dispositivos artificiales de control, cuyo funcionamiento se tiene que aprender. Una NUI se basa en que un usuario puede rápidamente hacer la transición de principiante a experto. Mientras que la interfaz requiere de aprendizaje, por lo tanto, “Natural” se refiere a un objetivo en la experiencia del usuario, que un

  3 usuario siente “como algo natural” mientras interactúa con la tecnología. 3 Figura 4 Evolución de las Interfaces Información de Wikipedi

Entorno de Desarrollo Integrado (IDE)

  Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés de integrated development environment), es uncompuesto por un conjunto de herramientas deo bien puede utilizarse para varios.

  Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en un editor de código, un compilador, un depurador y un constructor de(GUI). Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguajeen forma de Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como etc. En algunos lenguajes, un IDE puede funcionar como unen donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a

Microsoft Visual Studio

  Microsoft Visual Studio es unSoporta varios lenguajes de programación tales comoAunque actualmente se han desarrollado las extensiones necesarias para muchos otros. Visual Studio permite a los desarrolladores crear aplicaciones, sitios y aplicaciones web, así como servicios web en cualquier entorno que soporte la plataforma .NET (a partir de la versión .NET 2002). Así se pueden crear aplicaciones que se intercomuniquen entre estaciones de trabajo, páginas web y dispositivos móviles.

C#

  C#, pronunciado C Sharp, es actualmente junto con Java, uno de los lenguajes de programación más populares en Internet. Pero, además, apoyándose en la biblioteca .NET, está disponible para el desarrollo de aplicaciones de propósito general, aplicaciones con interfaz gráfica, aplicaciones para internet y aplicaciones para móviles. En los últimos tiempos C y C++ han sido los lenguajes más utilizados en el desarrollo de aplicaciones en general. Ambos lenguajes proporcionan al programador el nivel de abstracción preciso para abordar el desarrollo de cualquier aplicación por compleja que sea, así como mecanismos de bajo nivel para utilizar las características más avanzadas de las plataformas sobre las que se desarrolla; pero, en general, el tiempo necesario para desarrollar una aplicación resulta largo comparado con otros lenguajes como Visual Basic, que ofrecen además de facilidad, una elevada productividad en el desarrollo de aplicaciones, aunque eso sí, sacrificando la flexibilidad que los desarrolladores de C y C++ requieren. La solución que Microsoft da a este problema es el lenguaje denominado C#. Se trata de un lenguaje moderno orientado a objetos que permite desarrollar una amplia gama de aplicaciones para la nueva plataforma Microsoft .NET. Más que otra cosa, el objetivo de C# es permitir a todos los desarrolladores en general, y a los de C y C++ en particular, abordar el desarrollo de aplicaciones complejas con facilidad y rapidez pero sin sacrificar la potencia y el control que ofrecen C y C++. Es un poco como tomar todas las cosas buenas de Visual Basic y añadirlas a C++, aunque recortando algunas de las tradiciones más ocultas y difíciles de conocer de C y C++. Esto elimina los errores de programación más comunes en C/C++. Por ejemplo:

   El recolector de basura libera al programador del peso que conlleva el manejo manual de la memoria.

   Todos los objetos creados dinámicamente así como as matrices son iniciados a cero, y aunque C# no inicia automáticamente las variables locales, el compilador avisará siempre que se intente utilizar una antes de iniciarla.

   C# unifica el sistema de tipos permitiendo ver a cada uno de ellos en el lenguaje como un objeto.

  Resumiendo, C# es un lenguaje orientado a objetos seguro y elegante que permite a los desarrolladores construir un amplio rango de aplicaciones seguras y robustas que se ejecutan sobre .NET Framework. .NET Framework (que incluye entre otras cosas la biblioteca básica de .NET y el compilador C#) junto con otros componentes de desarrollo como ASP.NET (formularios Web y servicios Web) y ADO.NET, forman un paquete de desarrollo denominado Microsoft Visual Studio que podemos utilizar para crear aplicaciones Windows tradicionales (aplicaciones de escritorio que muestran una interfaz gráfica al usuario) y aplicaciones para la Web. Para ello, este paquete proporciona un editor de código avanzado, diseñadores de interfaces de usuario apropiados, depurador integrado y muchas otras utilidades para facilitar un desarrollo rápido de aplicaciones. L a palabra “Visual” hace referencia, desde el lado del diseño, al método que se utiliza para crear la interfaz gráfica de usuario si se dispone de la herramienta adecuada (con Microsoft Visual Studio se utiliza el ratón para arrastrar y colocar los objetos prefabricados en el lugar deseado dentro de un formulario) y desde el lado de la ejecución, al aspecto grafico que toman los objetos cuando se ejecuta el código que los crea, objetos que formara la interfaz gráfica que el usuario de la aplicación utiliza para acceder a los servicios que ésta ofrece. Y “.NET” hace referencia al ámbito donde operaran nuestras aplicaciones Web (Network - red).

Windows Presentation Foundation (WPF)

  Windows Presentation Foundation (WPF) es una tecnología de Microsoft, presentada como parte de Windows Vista. Permite el desarrollo de interfaces de interacción en Windows tomando características de aplicaciones Windows y de aplicaciones web.

  WPF ofrece una amplia infraestructura y potencia gráfica con la que es posible desarrollar aplicaciones visualmente atractivas, con facilidades de interacción que incluyen animación, vídeo, audio, documentos, navegación o gráficos 3D. Separa, con el lenguaje declarativo XAML y los lenguajes de programación de .NET, la interfaz de interacción de la lógica del negocio, propiciando una arquitectura Modelo Vista Controlador para el desarrollo de las aplicaciones.

  WPF se incluye con Windows 7, Windows Vista y Windows Server 2008 y también está disponible para Windows XP Service Pack 2 o posterior y Windows Server 2003. Microsoft Silverlight es un subconjunto de WPF que permite crear aplicaciones similares a Flash para web y móviles, con el mismo modelo de programación que las aplicaciones .NET. No admite funciones 3D, pero soporta XPS y planos basados en vectores.

XAML

  XAML eXtensible Application Markup

Language, Lenguaje Extensible de Formato para Aplicaciones en español) es el

  lenguaje de formato para la interfaz de usuario para la Base de Presentación de Windows por sus siglas en inglés) y Silverlight, el cual es uno de los "pilares" de laen su versión 3.0 (conocida con anterioridad con el nombre clave WinFX).

  XAML es un lenguaje declarativo basado enoptimizado para describir gráficamente interfaces de usuarios visuales ricas desde el punto de vista gráfico, tales como las creadas por medio deson otros ejemplos de lenguajes de interfaz basados en XML.el cual soporta gráficos, animaciones, audio y video integrados, eventos y comportamiento descrito por medio de escritura y puede ser utilizado como lenguaje de interfaz basado en XML.

  En su uso típico, los archivos tipo XAML serían producidos por una herramienta de diseño visual, comoEl XML resultante es interpretado en forma instantánea por un sub-sistema de despliegue de Los elementos de XAML se interconectan con objetos del Los atributos se conectan con propiedades o eventos de esos objetos.

  XAML fue diseñado para soportar las clases y métodos de laque tienen relación con la interacción con el usuario, en especial el despliegue en pantalla. El acrónimo XAML originalmente significaba Extensible Avalon Markup Language, Lenguaje Extensible de Formato de Avalon; habiendo sido Avalon el nombre clave original de la nombre que engloba a este grupo de clases de Un archivo XAML puede ser compilado para obtener un archivo binario XAML .baml, el cual puede ser insertado como un recurso en un ensamblado de Framework .NET. En el momento de ejecución, el motor del Framework extrae el archivo .baml de los recursos del ensamblado, se analiza sintácticamente, y crea el correspondiente árbol visual WPF o Workflow. Cuando se usa en Windows Presentation Foundation, XAML es usado para describir interfaces visuales para usuarios. WPF permite la definición de objetos en 2D y 3D, rotaciones, animaciones y otra variedad de características y efectos. Cuando es usado en el contexto de Windows Workflow Foundation, XAML es usado para describir lógica declarativa potencialmente larga (potentially long- running declarative logic), como aquellos creados en el proceso de sistemas de modelado y herramientas. El formato de serialización para WorkFlows había sido llamado previamente XOML, para diferenciarlo de su uso en IU de los XAML, pero esa diferenciación ya no existe. Sin embargo las extensiones de los archivos que contienen marcado de workflow es todavía XOML.

Microsoft .NET

  El principio de .NET es que los sitios Web aislados de hoy en día y los diferentes dispositivos trabajen conectados a través de internet para ofrecer soluciones mucho más ricas. Esto se conseguirá gracias a la aceptación de los estándares abiertos basados en XML (Extensible Markup Language

  • – lenguaje extensible para describir documentos). De esta manera, Internet se convierte en una fuente de servicios, no sólo de datos. En definitiva, Internet y XML han dado lugar a una nueva fase de la informática en la que los datos del usuario residen en Internet, no en un ordenador personal, y se puede acceder a ellos desde cualquier ordenador de sobremesa, portátil, teléfono móvil o agenda de bolsillo (PDA: Personal Digital Assistant). Ello se debe fundamentalmente a que XML ha hecho posible que se puedan crear aplicaciones potentes, para ser utilizadas por cualquiera, desde cualquier lugar. En el corazón del nuevo enfoque de desarrollo está el concepto de servicio Web. Por ejemplo en este contexto, el software no se instala desde un CD, sino que es un servicio, como la televisión por pago, al que suscribirse a través de un medio de comunicación. Microsoft .NET extiende las ideas de Internet y sistema operativo haciendo de la propia Internet la base de un nuevo sistema operativo. En última instancia, esto permitirá a los desarrolladores crear programas que transciendan los límites de los dispositivos y aprovechen por completo la conectividad de Internet y sus aplicaciones. Para ello proporciona una plataforma que incluye los siguientes componentes básicos:

   Herramientas de programación para crear servicios Web XML con soporte multilingüe: Visual Studio .NET y .NET Framework.

   Infraestructura de servidores, incluyendo Windows y .NET Enterprise Servers.

   Un conjunto de servicios que actúan como bloque de construcción para el sistema operativo de Internet que incluirán autentificación del usuario (servicio Passport .NET), servicios para almacén de datos, administración de preferencias de los usuarios, calendario y otros muchos. Para entenderlo, compare los servicios con los bloques Lego; al unir bloques de Lego se pueden construir soluciones (una casa, un barco, etc.). De la misma forma la unión de servicios Web XML permite crear soluciones de software para realizar una tarea concreta, ver Figura 5

  Figura 5 Ecosistema .NET

   Software de dispositivos .NET para hacer posible una nueva generación de dispositivos inteligentes (ordenadores, teléfonos, consolas de juegos, etc.) que puedan funcionar en el universo .NET.

   Experiencias .NET utilizadas por los usuarios finales para acceder a los servicios Web XML. Son análogas a las aplicaciones independientes de hoy en día pero con algunas diferencias importantes; por ejemplo, pueden leer las características del dispositivo que el usuario final está utilizando para acceder y activar así la interfaz más adecuada, y utilizan servicios Web XML. Claramente, se requiere una infraestructura, no solo para facilitar el desarrollo de aplicaciones sino también para hacer que el proceso de encontrar un servicio Web e integrarlo en una aplicación resulte transparente para usuarios y desarrolladores: .NET Framework proporción esa infraestructura.

  Según se puede ver en la figura siguiente, .NET Framework es un componente de desarrollo de multilenguaje y un entorno de ejecución:

  

Figura 6 Componentes .NET

Especificación común para todos los lenguajes

  .NET Framework proporciona un entorno unificado para todos los lenguajes de programación. Microsoft ha incluido en este marco de trabajo los lenguajes Visual Basic, C#, C++ y JScript, y además, ha dejado la puerta abierta para que otros fabricantes puedan incluir sus lenguajes (COBOL, Pascal, Perl, Smalltalk, etc.). Lo más atractivo quizás de todo esto es la capacidad de escribir, por ejemplo, parte de una aplicación en Visual Basic y el resto en C#. No obstante, para que un código pueda interactuar con cualquier otro independientemente del lenguaje utilizado, .NET Framework proporciona la “especificación común para los lenguajes” (CLS – Common Language Specification) que define las características fundamentales del lenguaje y las reglas de cómo deben ser utilizadas.

  Una de las partes más importantes del CLS es la que se refiere a los tipos de datos. Yendo un poco hacia atrás en la historia ¿recuerda lo diferentes que eran los tipos de datos de VB6 y de C++? Para evitar este tipo de problemas y poder gestionar de forma eficiente y segura el acceso a la memoria, el CLS define un conjunto de datos comunes (Common Type System o CTS) que indica que tipos de datos se pueden manejar, como se declaran y como se utilizan. De esta forma, aunque cada lenguaje .NET utilice una sintaxis diferente para cada tipo de datos, por ejemplo, Visual Basic utiliza Integer para un numero entero de 32 bits y C# utiliza int, estos nombres no son más que sinónimos del tipo común

  

System.Int32. De esta forma, las bibliotecas que utilicen en sus interfaces hacia el

  exterior de datos definidos en el CTS no presentaran problemas a la hora de ser utilizadas desde cualquier otro código escrito en la plataforma .NET, permitiendo así la interoperabilidad entre lenguajes.

Entorno de ejecución común de los lenguajes

  .NET Framework proporciona un entorno de ejecución llamado CLR (Common

  

Language Runtime; es la implementación de Microsoft de un estándar llamado

Common Language Infraestructure o CLI, creado y promovido por Microsoft,

  reconocido mundialmente por el ECMA). Se trata de una máquina virtual que administra la ejecución de código y proporciona servicios que hacen más fácil el proceso de desarrollo (en esencia, estamos hablando de una biblioteca utilizada por cada aplicación .NET durante su ejecución). Ver Figura 7.

  El proceso de ejecución de cualquier aplicación incluye los pasos siguientes: 1.- Diseñar y escribir el código fuente.

  2.- Compilar el código fuente a código intermedio. 3.- Compilar el código intermedio a código nativo.

  4.- Ejecutar el código nativo. Puesto que .NET Framework es un entorno de ejecución multilingüe, soporta una amplia variedad de los tipos de datos y características del lenguaje que serán utilizadas en la medida que el lenguaje empleado soporte y en la medida que el desarrollador adapte su código a las mismas. Esto es, es el compilador utilizado, y no el CLR, el que establece el código que se utiliza. Por lo tanto cuando tengamos que escribir un componente totalmente compatible con otros componentes escritos en otros lenguajes, los tipos de datos y las características del lenguaje utilizado deben estar admitidos por la especificación del lenguaje común (CLS).

  Cuando se compila el código escrito, el compilador lo traduce a un código intermedio denominado MSIL (Microsoft Intermediate Language) o simplemente IL, correspondiente a un lenguaje independiente de la unidad central de proceso (UCP). Esto quiere decir que el código producido por cualquier lenguaje .NET puede transportarse a cualquier plataforma (Intel, Sparc, Motorola, etc.) que tenga instalada una máquina virtual .NET y ejecutarse. Pensando en Internet esta característica es crucial ya que esta red conecta ordenadores muy distintos.

  MSIL incluye instrucciones para cargar, iniciar y llamar a los métodos de los objetos, así como para operaciones aritméticas y lógicas, control de flujo, acceso directo a memoria, manipulación de excepciones y otras operaciones.

  

Figura 7 Entorno de ejecución .NET La siguiente figura muestra el aspecto que tiene un código intermedio de una aplicación. Este código puede obtenerlo a través del desamblador ildasm.exe que viene con la plataforma .NET.

  

Figura 8 Código Intermedio MSIL

:

  Cuando el compilador produce MSIL también produce metadatos información que describe cada elemento manejado por el CLR (tipo, método, etc.). Esto es, el código a ejecutar debe incluir esta información para que el CLR pueda proporcionar servicios tales como administración de memoria, integración de múltiples lenguajes, seguridad, control automático del tiempo de vida de los objetos, etc. Tanto el código intermedio como los metadatos son almacenados en un fichero ejecutable y portable (.exe o .dll), denominado ensamblado (assembly en inglés), que permite que el código se describa así mismo, lo que significa que no hay necesidad de bibliotecas de tipos o de lenguajes de definición de interfaces.

  Un ensamblado es la unidad fundamental de construcción de una aplicación .NET y básicamente incluye dos partes diferenciadas: el manifiesto y el código MSIL.

  El manifiesto, incluye los metadatos que describen completamente los componentes en el ensamblado (versión, tipos, dependencias, etc.) y el código describe el proceso a realizar. Antes de que el código intermedio pueda ser ejecutado, debe ser convertido por

  :

  un compilador JIT (Just in Time al instante) a código nativo, que es código especifico de la CPU del ordenador sobre el que se está ejecutando JIT.

  

Figura 9 Proceso JIT

  La máquina virtual no convierte todo el código MSIL a código nativo y después lo ejecuta, sino que lo va convirtiendo bajo demanda con el fin de reducir el tiempo de ejecución; esto es, cada momento es compilado a código nativo o cuando es llamado por primera vez para ser ejecutado, y el código nativo que se obtiene se guarda para que este accesible para subsiguientes llamadas. Este código nativo se denomina “código administrado” si cumple la especificación CLS, en otro caso recibe el nombre de “código no administrado”. La máquina virtual (el CLR) proporciona la infraestructura necesaria para ejecutar código administrado, así como también una velocidad de servicios que puedan ser utilizados durante a ejecución (administración de memoria -incluye un recolector de basura para eliminar un objeto cuando ya no este referenciado- , seguridad, interoperabilidad con código no administrado, soporte multilenguaje para depuración, soporte de versión, etc.).

  El código no administrado es código creado sin tener en cuenta la especificación del lenguaje común (CLS). Este código se ejecuta con los servicios mínimos del CLR (por ejemplo, sin recolector de basura, depuración limitada, etc.).

Kinect

  Microsoft Research invirtió veinte años de desarrollo en la tecnología de Kinect de acuerdo con las palabras de Robert J.Bach. Kinect fue anunciado por primera vez el 1 de junio de 2009 en lacomo "Project Natal".

  El nombre en clave Proyecto Natal responde a la tradición dedirector de Microsoft, quien incubó el proyecto, decidió ponerle el nombre de la ciudad brasileñacomo un homenaje a su país de origen y porque la palabra natal significa “de o en relación al nacimiento”, lo que refleja la opinión de Microsoft en el proyecto como “el nacimiento de la próxima generación de entretenimiento en el hogar”.

SDK para Kinect

  El Kit de Desarrollo de Software de Kinect para Windows (SDK) permite a los desarrolladores utilizar C++, C# o Visual Basic para crear aplicaciones que soporten reconocimiento de gesticulaciones del cuerpo y de voz utilizando el sensor Kinect para Windows y una computadora o dispositivo incorporado usando Visual Studio 2010 o 2012. El SDK incluye controladores para utilizar el sensor Kinect para Windows en un equipo que ejecute Windows 8, Windows 7 o Windows Embedded Standard 7. Además, la descarga incluye las API y las interfaces del dispositivo. La última actualización del SDK de Kinect expone características adicionales del sensor, mejora la eficiencia a la hora de programar con el sistema operativo y más herramientas de apoyo así como varios ejemplos de muestra junto con su código fuente.

Entorno de Desarrollo

   Kinect para Windows requiere uno de los siguientes sistemas operativos o Windows 7. o Windows Embedded Standard 7. o Windows 8.  Requisitos de hardware o Procesador de 32 bits (x86) o 64 bits (x64). o Procesador de doble núcleo a 2,66 GHz o superior. o Bus USB 2.0 dedicado. o 2 GB de RAM. o

  Un sensor Kinect para Windows

  4

   Requisitos de software o Microsoft Visual Studio Express u otra edición de Visual Studio 2010/2012. o .NET Framework 4.0 o Superior. o

  Microsoft Speech Platform SDK v11 para el desarrollo de aplicaciones con funciones de voz para Kinect para Windows.

  que a la hora de instalar la versión 1.6 se actualiza automáticamente el firmware del dispositivo, dejando

inutilizable para la computadora un dispositivo Kinect for Xbox, pero sigue funcionando igual en la consola.

Instalación del SDK

  Antes de instalar el SDK de Kinect para Windows debemos considerar lo siguiente: 1.- Verificar que el dispositivo este desconectado de la computadora donde lo deseamos instalar.

  2.- Verificar que Visual Studio este cerrado durante el proceso de instalación. Si se tuvieran instalados en la computadora otros drivers para interactuar con el dispositivo Kinect como por ejemplo los que proveen PrimeSense, se debería considerar eliminarlos primero antes de instalar el SDK, pues las librerías que

  5

  6 Microsoft ofrece no son interoperables con por ejemplo Open NI u OpenKinect .

  7 Una vez descargado el instalador apropiado (x86 o x64) del SDK de Kinect solo

  hace falta comenzar la instalación, y esto es muy fácil con el asistente de instalación seguir los pasos hasta concluir la instalación del SDK. Terminado esto ahora se procede a conectar el dispositivo; la computadora reconocerá e instalara automáticamente los drivers necesarios, incluso se mostraran mensajes en la barra de tareas informando el progreso de los sensores que se están reconociendo, al finalizar la instalación se puede observar como el LED del dispositivo cambia de rojo a verde indicando que está listo para comenzar a ser utilizado. Para verificar que el dispositivo se ha instalado correctamente se pueden probar los ejemplos del Kinect Developer Toolkit, también desde Panel de

  

Control/Administrador de dispositivos, encontraremos los siguientes dispositivos:

  Microsoft Kinect Audio Array Control, Microsoft Kinect Camera, y Microsoft Kinect Security Control. En la siguiente figura se muestra lo anterior.

  6 middleware y aplicaciones.

  

OpenKinect es una comunidad de personas interesadas en el desarrollo de librerías de código abierto para

7 trabajar con el Kinect. x86 y x64 se refiere a la arquitectura del Sistema Operativo a 32 y 64 bits respectivamente.

  

Figura 10 Hardware que se instala con el Kinect