1
ING. SISTEMAS COMPUTACIONALES
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
2
ÍNDICE
Introducción ... 3
Justificación ... 5
Objetivo General ... 7
Objetivos Específicos ... 7
Caracterización del área en que participo ... 8
Problemas a resolver, priorizándolos ... 9
Alcances... 10
Limitaciones... 10
Fundamentos Teóricos ... 10
Descripción de las actividades realizadas ... 45
Resultados, planos, gráficas y programas ... 85
Conclusiones y recomendaciones ... 89
3
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
limitaciones ante los nuevos escenarios de Tics.
Actualmente se busca que las interfaces sean más naturales e intuitivas, como
4
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
5
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 las GUI como sería un ratón, lápiz
óptico, touchpad, joystick 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
tocarla.1
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.
1
6
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
7
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
8
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.
9
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.
10
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,
11
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
instalación aplicables a cada una de ellas.2
2
12
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
13 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,
14 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.
15 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 usuario siente “comoalgo natural” mientras interactúa con la tecnología.3
Figura 4 Evolución de las Interfaces
3
16 Entorno de Desarrollo Integrado (IDE)
Un entorno de desarrollo integrado, llamado también IDE (sigla en inglés
de integrated development environment), es un programa informático compuesto
por un conjunto de herramientas de programación. Puede dedicarse en exclusiva
a un solo lenguaje de programación o 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 interfaz gráfica (GUI). Los IDEs pueden ser
aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El
lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones
de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma
de macros para Microsoft Word.
Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes
de programación tales como C++, PHP, Python, Java, C#, Delphi, Visual Basic,
etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de
ejecución, en donde se permite utilizar el lenguaje de programación en forma
interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el
caso de Smalltalk u Objective-C.
Microsoft Visual Studio
Microsoft Visual Studio es un entorno de desarrollo integrado (IDE, por sus siglas
en inglés) para sistemas operativos Windows. Soporta varios lenguajes de
programación tales como Visual C++, Visual C#, Visual J#, y Visual Basic .NET, al
igual que entornos de desarrollo web comoASP.NET. Aunque 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
17 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:
18
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.
La 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
19 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 (acrónimo pronunciado xammel del inglés 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 (WPF por sus siglas en inglés) y Silverlight, el cual es uno de los
"pilares" de la interfaz de programación de aplicaciones .NET en su versión 3.0
(conocida con anterioridad con el nombre clave WinFX).
XAML es un lenguaje declarativo basado en XML, optimizado para describir
gráficamente interfaces de usuarios visuales ricas desde el punto de vista gráfico,
20
ejemplos de lenguajes de interfaz basados en XML. SVGes un estándar de la
organización W3C, 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, como Microsoft Visual Studio o Microsoft Expression. El XML
resultante es interpretado en forma instantánea por un sub-sistema de despliegue
de Windows Vista que reemplaza al GDI de las versiones anteriores de Windows.
Los elementos de XAML se interconectan con objetos del Entorno Común de
Ejecución para Lenguajes. Los atributos se conectan con propiedades o eventos
de esos objetos.
XAML fue diseñado para soportar las clases y métodos de la plataforma de
desarrollo .NET que 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 Base de Presentación de Windows,
nombre que engloba a este grupo de clases de .NET.
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
21
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
22 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
23
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
24 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.
25
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.
26
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
27
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
28 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 la Electronic Entertainment Expo 2009 como "Project
Natal".
El nombre en clave Proyecto Natal responde a la tradición de Microsoft de utilizar
ciudades como nombres en clave. Alex Kipman, director de Microsoft, quien
incubó el proyecto, decidió ponerle el nombre de la ciudad brasileña Natal como
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
29 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 Windows4
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.
30
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
Microsoft ofrece no son interoperables con por ejemplo Open NI5 u OpenKinect6.
Una vez descargado el instalador apropiado (x86 o x64)7 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.
5
OpenNI es un framework de codigo abierto usado para el desarrollo de sensores 3D, bibliotecas middleware y aplicaciones.
6 OpenKinect es una comunidad de personas interesadas en el desarrollo de librerías de código abierto para trabajar con el Kinect.
7
31
Figura 10 Hardware que se instala con el Kinect
Kinect Developer Toolkit
El uso del Toolkit es opcional, pero en el podemos encontrar proyectos de ejemplo
junto con su código fuente en donde se muestra cómo usar las características del
SDK, así como los componentes que encontramos como Kinect Button y Kinect
Viewer, User Controls, etc., para ayudarte a construir tu interfaz gráfica de una
manera más rápida, usando los componentes que el Toolkit ofrece y así enfocarte
únicamente en el problema a resolver y hacer de la experiencia de usuario de tu
32
un micrófono de múltiples matrices y un procesador personalizado que ejecuta el
software patentado por PrimeSense8, que proporciona captura de movimiento de
todo el cuerpo en 3D, reconocimiento facial y capacidades de voz.
Figura 11 Dispositivo Kinect
El sensor contiene un mecanismo de inclinación motorizado y en caso de usar un
Kinect para Windows tiene que ser conectado a una toma de corriente, ya que la
corriente que puede proveerle el cable USB es insuficiente; para el caso del
modelo de Xbox 360, esto no es necesario ya que esta consola cuenta con una
toma especialmente diseñada para conectar el Kinect y esto permite proporcionar
la corriente necesaria que requiere el dispositivo para funcionar correctamente.
33 Sensor de profundidad
El sensor de profundidad es un proyector de infrarrojos combinado con un
sensor CMOS monocromo que permite al Kinect ver la habitación en 3D en
cualquier condición de luz ambiental. El rango de detección de la profundidad del
sensor es ajustable gracias al software del dispositivo capaz de calibrar
automáticamente el sensor, basado en la jugabilidad y en el ambiente físico del
jugador, tal como la presencia de otros objetos en el área para descartarlos de los
movimientos y/o gestos del usuario.
Este sensor funciona básicamente proyectando un láser a través de toda el área
de visión para el dispositivo, generando algo llamado depth field y es lo que
separa una persona de un objeto (ver Figura 12), a grandes rasgos el Kinect
recibe el rebote del ruido IR y estos son convertidos a una escala de colores,
haciendo así que los cuerpos dependiendo de la distancia se vean como rojos,
verdes etcétera, llegando hasta grises los objetos más lejanos.
Figura 12 Proyección de Puntos IR
Cámara RGB
La cámara de color es una cámara de captación de movimiento VGA con un
resolución de 640 x 480 pixeles a 30 FPS9, un ángulo de visión horizontal de 57.7
grados y 43.5 grados vertical con -27 y +27 grados de inclinación hacia arriba y
hacia abajo.
9
34
Figura 13 Angulo de visión del Kinect
Como ve el Kinect las cosas
A partir del SDK 1.6 del Kinect para Windows se aceptan dos modos de
reconocimiento, modo sentado (near mode) y modo normal (default mode), en el
primero, como su nombre lo indica acepta la detección de una persona cuando
está sentada, los límites físicos de reconocimiento para este modo son de 0.4 a 3
metros, aunque para un reconocimiento optimo la distancia recomendada oscila
entre 0.8 a 2.5 metros (ver Figura 14).
Figura 14 Near Mode
El rango de profundidad para el modo default es de 0.8 a 4 metros para detectar a
una persona de pie, aunque al igual que en el caso anterior el reconocimiento
optimo oscila entre 1.2 a 3.5 metros, incluso el reconocimiento es soportado a
35
pues se filtraría mucho ruido y afectarían algunos objetos que se encuentren más
cerca que la persona que se esté detectando.
Figura 15 Default Mode
Rastreo del Esqueleto (Skeleton)
El rastreo del skeleton consta de procesar las imágenes y los datos que del sensor
de profundidad obtiene y las hace pasar por una serie de filtros para que el
sistema determine que es una persona y cualquier otro objeto que se encuentre en
el área de visión del dispositivo.
Figura 16 Rastreo de esqueletos
Para lograr el reconocimiento se siguen una seria de parámetros, para detectar
formas humanas e identificar las partes del cuerpo de una persona cada parte es
36
articulaciones bien definidas forman un esqueleto virtual para cada imagen de
profundidad del sensor, aun así el dispositivo esta precargado con poses que
permiten llenar los espacios si es que existe una pose que este obstruida por
algún objeto, ya que el Kinect trabaja a 30 FPS este proceso se repite 30 veces en
un segundo.
Figura 17 Representación de joints del cuerpo
Para el reconocimiento del skeleton se presentan dos modos, modo completo y
modo sentado, el primero detecta 20 articulaciones que van desde los pies,
tobillos, rodillas, cintura, manos, codos, hombros y cabeza. Este modo bien es
utilizado en aplicaciones y juegos en el cual el usuario tenga que realizar
37
Figura 18 Esqueleto modo completo
Para el modo sentado solo se detectan 10 articulaciones que van desde las
manos, codos, hombros cuello y cabeza. Básicamente se aplica este modo para
aplicaciones donde se requiere manipular solo con las manos la interfaz, o incluso
con comandos de voz y donde no haría falta que el usuario estuviera de pie.
Figura 19 Esqueleto modo sentado
Arreglo de Micrófonos
El dispositivo Kinect cuenta con un arreglo de micrófonos con reconocimiento de +
y – 50 grados frente al sensor, este array de micrófonos está diseñado para poder
38
Figura 20 Entrada de audio del Kinect
Para poder lograr el reconocimiento y la eliminación de ruido el laboratorio de
Microsoft se migro a 250 casas con varios micrófonos y realizo pruebas y
grabaciones de los distintos ruidos y ambientes para diferentes hogares para
determinar así la configuración óptima.
Figura 21 Conjunto de micrófonos del Kinect
El arreglo de micrófonos se localiza a los laterales del dispositivo dejando el frente
del Kinect limpio y libre de orificios, es por esta razón que el Kinect tiene esa
anchura. Esta forma es mejor para capturar voces a distancia, pero es el
procesador que cancela los ruidos que provienen de aparatos de audio, la
televisión, etc. Así junto con el sensor de profundidad se puede averiguar tu
posición y crear una esfera de sonido que solo escuche al usuario en cuestión y
39
Figura 22 Umbral de sonido del Kinect
Figura 23 Micrófono direccional de Kinect
Con la actualización del nuevo SDK 1.7 de Kinect para Windows y gracias al
“Microsoft Speech Platform” ahora se permite el reconocimiento de hasta 26 lenguas distintas incluyendo ahora el español, se ha trabajado mucho en esta
parte pues el reconocimiento para cada lenguaje es distinto y Kinect presenta un
40 Microsoft Speech Platform SDK
Esta plataforma proporciona un conjunto completo de herramientas de desarrollo
para crear aplicaciones con habilitación de voz que aprovechan los motores de
voz que se pueden distribuir de Microsoft. Se puede utilizar Microsoft Speech
Platform para dar a las aplicaciones la capacidad de reconocer las palabras
(reconocimiento de voz) y para generar un sintetizador de voz (texto a voz). El uso
de este SDK ofrece a los usuarios una forma efectiva, intuitiva y natural de
interactuar con sus aplicaciones que complemente el uso del mouse, teclado, etc.
Reconocimiento del habla
El reconocimiento automático del habla (RAH) o reconocimiento automático de
voz es una parte de la inteligencia artificial que tiene como objetivo permitir la
comunicación hablada entre seres humanos y computadoras. El problema que se
plantea en un sistema de este tipo es el de hacer cooperar un conjunto de
informaciones que provienen de diversas fuentes de conocimiento (acústica,
fonética, fonológica, léxica, sintáctica, semántica y pragmática), en presencia de
ambigüedades, incertidumbres y errores inevitables para llegar a obtener una
interpretación aceptable del mensaje acústico recibido.
Un sistema de reconocimiento de voz es una herramienta computacional capaz de
procesar la señal de voz emitida por el ser humano y reconocer la información
contenida en ésta, convirtiéndola en texto o emitiendo órdenes que actúan sobre
un proceso. En su desarrollo intervienen diversas disciplinas, tales como:
la fisiología, la acústica, el procesamiento de señales, la inteligencia artificial y la
ciencia de la computación.
Diseño de un sistema de RAH
Un aspecto crucial en el diseño de un sistema de RAH es la elección del tipo
41
Básicamente, existen dos tipos:
Aprendizaje deductivo: Las técnicas de Aprendizaje Deductivo se basan en
la transferencia de los conocimientos que un experto humano posee a un
sistema informático. Un ejemplo paradigmático de las metodologías que
utilizan tales técnicas lo constituyen los Sistemas Basados en el Conocimiento
y, en particular, los Sistemas Expertos.
Aprendizaje inductivo: Las técnicas de Aprendizaje Inductivo se basan en
que el sistema pueda, automáticamente, conseguir los conocimientos
necesarios a partir de ejemplos reales sobre la tarea que se desea modelizar.
En este segundo tipo, los ejemplos los constituyen aquellas partes de los
sistemas basados en los modelos ocultos de Márkov o en las redes neuronales
artificiales que son configuradas automáticamente a partir de muestras de
aprendizaje.
En la práctica, no existen metodologías que estén basadas únicamente en el
Aprendizaje Inductivo, de hecho, se asume un compromiso deductivo-inductivo en
el que los aspectos generales se suministran deductivamente y la caracterización
de la variabilidad inductivamente.
Decodificador acústico-fonético
Las fuentes de información acústica, fonética, fonológica y posiblemente léxica,
con los correspondientes procedimientos interpretativos, dan lugar a un módulo
conocido como decodificador acústico-fonético (o en ocasiones a un decodificador
léxico). La entrada al decodificador acústico-fonético es la señal vocal
convenientemente representada; para ello, es necesario que ésta sufra un pre
proceso de parametrización. En esta etapa previa es necesario asumir algún
42 Modelo del lenguaje
Las fuentes de conocimiento sintáctico, semántico y pragmático dan lugar al
modelo del lenguaje del sistema. Cuando la representación de la Sintaxis y de la
Semántica tiende a integrarse, se desarrollan sistemas de RAH de gramática
restringida para tareas concretas.
Clasificación
Los sistemas de reconocimiento de voz pueden clasificarse según los siguientes
criterios:
Entrenabilidad: determina si el sistema necesita un entrenamiento previo antes
de empezar a usarse.
Dependencia del hablante: determina si el sistema debe entrenarse para cada
usuario o es independiente del hablante.
Continuidad: determina si el sistema puede reconocer habla continua o el
usuario debe hacer pausas entre palabra y palabra.
Robustez: determina si el sistema está diseñado para usarse con señales poco
ruidosas o, por el contrario, puede funcionar aceptablemente en condiciones
ruidosas, ya sea ruido de fondo, ruido procedente del canal o la presencia de
voces de otras personas.
Aunque en teoría cualquier tarea en la que se interactúe con un ordenador puede
utilizar el reconocimiento de voz, actualmente las siguientes aplicaciones son las
más comunes:
Dictado automático: El dictado automático es, en el 2007, el uso más común
43
dictado de recetas médicas y diagnósticos o el dictado de textos legales, se
usan corpus especiales para incrementar la precisión del sistema.
Control por comandos: Los sistemas de reconocimiento de habla diseñados
para dar órdenes a un computador (p.e. "Abrir Firefox", "cerrar ventana") se
llaman Control por comandos. Estos sistemas reconocen un vocabulario muy
reducido, lo que incrementa su rendimiento.
Telefonía: Algunos sistemas PBX permiten a los usuarios ejecutar comandos
mediante el habla, en lugar de pulsar tonos. En muchos casos se pide al
usuario que diga un número para navegar un menú.
Sistemas portátiles: Los sistemas portátiles de pequeño tamaño, como los
relojes o los teléfonos móviles, tienen unas restricciones muy concretas de
tamaño y forma, así que el habla es una solución natural para introducir datos
en estos dispositivos.
Sistemas diseñados para discapacitados: Los sistemas de reconocimiento de
voz pueden ser útiles para personas con discapacidades que les impidan
teclear con fluidez, así como para personas con problemas auditivos, que
pueden usarlos para obtener texto escrito a partir de habla. Esto permitiría, por
ejemplo, que los aquejados de sordera pudieran recibir llamadas telefónicas.
Coding4Fun KinectToolkit
Coding4Fun es una comunidad web dedicada a mostrar divertidos y frescos
proyectos de software y hardware. Coding4Fun inicio originalmente en 2005 como
una serie de artículos escritos para MSDN con el fin de resaltar interesantes
proyectos de Visual Studio .NET. Ahora trabajan con proyectos, artículos, blogs,
videos y herramientas que facilitan muchas tareas, entre ellas se encuentra
Coding4Fun Kinect Toolkit que es una serie de librerías que facilitan el trabajo
44
y hacer uso fácilmente código que expone, para controlar datos del sensor de
profundidad, los datos del Skeleton y controles como Hover Button para el cual
solo hace falta arrastrar, soltar y comenzar a trabajar.
Kinect Contrib
Kinect Contrib es un conjunto de extensiones para ayudar al desarrollo para el
SDK de Kinect para Windows. Este es un proyecto de la misma comunidad de
usuarios con el objetivo de mejorar y ampliar las capacidades de integración y
desarrollo del SDK para Kinect.
Kinect Contrib se puede descargar libremente del sitio:
http://kinectcontrib.codeplex.com/ y una vez instalada se agregan templates listos
para usar con el entorno preparado dependiendo de la aplicación con la que se
desee trabajar (ver Figura 24), ofrece plantillas para manejar los datos del sensor
de profundidad, datos del Skeleton y también para trabajar con la cámara de color
del Kinect.
45
Descripción de las actividades realizadas
Configuración del entorno de desarrollo
La primera tarea que debemos tener clara después de instalar el SDK de Kinect
para Windows y los drivers correspondientes es preparar el entorno de desarrollo
para que las aplicaciones puedan interactuar con el dispositivo de manera
correcta; a continuación se describirá la serie de pasos que hay que seguir para
realizar esta tarea.
En la siguiente figura se muestra el tipo de aplicación que se debe elegir en el IDE
Visual Studio, en este caso es un proyecto WPF Aplication, y se ha elegido a
propósito así porque la mayoría de la documentación que se encuentra en libros y
en internet en cuanto al manejo del SDK de Kinect para Windows se maneja en
Windows Presentation Foundation incluso el Toolkit y sus ejemplos son basados
en esta tecnología junto con sus diferentes lenguajes que pueden ser C#, Visual
Basic o C++.
46
Una vez creado nuestro proyecto es muy importante agregar las referencias
necesarias que se instalan en la misma carpeta donde se encuentra el SDK de
Kinect para Windows.
Figura 26 Agregar Referencias
Comúnmente estas Dll’s10 necesarias se encuentran en C:\Program Files\Microsoft SDKs\Kinect\(v1.x/Developer Toolkit v1.x.x), en este directorio encontramos referencias como:
Microsoft.Kinect.Toolkit.dll
Microsoft.Kinect.Toolkit.Fusion.dll
Microsoft.Kinect.Toolkit.Interaction.dll
Microsoft.Kinect.Toolkit.Controls.dll
10
47
Figura 27 Assembles del SDK 1.7 de Kinect
La referencia que nunca debe faltar en un proyecto donde se haga uso del Kinect
es precisamente Microsoft.Kinect.dll, pues en ella encontramos propiedades y
métodos con los cuales se administran y sobre todo se generan y obtienen datos
de los sensores de profundidad, la cámara RGB, Skeleton, Audio, etc.
Figura 28 Referencia a Microsoft.Kinect.dll
En el namespace Microsoft.Kinect podemos ver métodos como
48 modos que estén habilitados por ejemplo al inicializar el dispositivo, así como también el evento ColorImageFrame, DepthImageFrame, SkeletonFrame, etc.
Figura 29 Namespace Microsoft.Kinect
Para usar las nuevas mejoras que se liberaron con la versión 1.7 del SDK de
Kinect para Windows se tienen que agregar dos ficheros extra al proyecto y la
forma más fácil de acceder a ellos es en la carpeta de ejemplos del Toolkit que se
encuentra en C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit
v1.7.x\Samples\bin se pueden agregar desde el Explorador de soluciones de
Visual Studio o también copiando y pegando los archivos en la carpeta de nuestro
49
Figura 30 Ubicación de los archivos Kinect Interaction
Si agregamos KinectInteraction desde el explorador de soluciones debemos
modificar en las propiedades del archivo en la opción Copy to Output Directory:
Copy always, ya que de otra manera la aplicación lanzara una excepción en
tiempo de ejecución por la ausencia del mismo.
50 Extracción y generación de datos con el Kinect
Para la extracción y control de datos que nos proporciona el Kinect debemos
conocer la arquitectura del dispositivo, como es que está administrando el
software al hardware y como es que el Kinect responde a esto. En la figura
siguiente se presenta un esquema en general del funcionamiento de una
aplicación que interactúa con el Kinect. En primer lugar se encuentra el Kinect
conectado al puerto USB de la computadora, a nivel de usuario de sistema
operativo se encuentra el SDK que realiza la conexión con el Kinect y permite
obtener los datos de los sensores de profundidad, la cámara de color e infrarrojos
así como el audio del array de micrófonos.
Figura 32 Flujo de datos desde el Kinect a una aplicación y viceversa
Una vez comprendido el flujo de datos que se lleva a cabo en una aplicación que
interactúa con el Kinect, es importante también mostrar el diagrama de flujo (ver
Figura 33) dentro de la aplicación, en el cual se puede observar cómo es que se
crean las variables necesarias para manejar el dispositivo (KinectSensor, un array
51
correspondientes, estos dependen de lo que se quiera manejar, por ejemplo
VideoFrameReady para el video, SkeletonFrameReady para acceder a las
propiedades y controlar un skeleton del usuario, DepthFrameReady para controlar
los datos de profundidad, etc.; después se verifica si el dispositivo está preparado
pues el SDK de Kinect expone diferentes modos en que se puede encontrar el
dispositivo en la propiedad Status como son: Conectado, Desconectado,
Inicializado, En Error, No Preparado, etc., seguido de esto se pregunta si hay
datos que leer porque aunque el dispositivo se encuentre preparado esto no
significa que obtendrá siempre datos válidos para trabajar, por ejemplo mientras
se hace el rastreo de un esqueleto y luego el usuario sale de la área visible, el
dispositivo pasa a un estado de preparado pero sin lectura de datos; para el
siguiente paso se procesan en alguna tarea específica dependiendo del stream
que se maneje ya sea de Profundidad (depth), Video o Audio, y cuando se decida
52
53
A continuación se muestra la parte del Code-behind11 en que debemos inicializar
algunas variables para trabajar con los distintos modos que proporciona el Kinect y
que se serán necesarios para nuestro proyecto, enseguida esta la parte donde las
tareas que se llevan a cabo, se obtiene el Kinect y se establecen los streams que
utilizaremos en la aplicación. Ver Figura 34.
Figura 34 Inicialización de variables
Enseguida en el evento Loaded de la aplicación se establecen también los manejadores para cada stream, es aquí donde la aplicación sabrá qué hacer
cuando detecte determinado tipo de dato. Ver Figura 35.
Figura 35 Se muestra como se suscriben a los streams
11
54
Una vez descrito el proceso que conlleva el uso del Kinect en una aplicación se
describira cada parte de los modos en que se pueden extraer los datos y trabajar
con ellos. Se explicaran los 3 modos de los que hacemos uso en el proyecto
RESA.
• VideoFrameReady
• SkeletonFrameReady
• DepthFrameReady
A partir de este momento todo lo anterior en cuanto a inicializacion y manejo de
variables es exactamente igual, y nos centraremos basicamente en el
procesamiento de cada stream según estemos controlando, la Figura 36 indica en
que parte del diagrama de flujo estaremos trabajando.
55 Extraccion y manejo de la camara de video (VideoFrameReady)
Para hacer uso de los datos de la camara RGB lo primero que tenemos que hacer
es crear en nuestra interfaz, los elementos necesarios para desplegar el raw12 de
datos a un elemento visual como lo es uno de tipo Image que se encuentra en el
espacio de nombres System.Windows.Controls.Image y que sera perfecto para
esta tarea. Asi pues procederemos a crear un grid y dentro dos controles Image
como se muestra en la siguiente Figura.
Figura 37 XAML que crea nuestra interfaz
Esto creara en tiempo de diseño algo como lo que se muestra en la Figura 38.
Figura 38 Interfaz en tiempo de diseño con dos controles Image
En el tema anterior se mostró que para cada aplicacion que haga uso del Kinect
habia que seguir una serie de pasos, y para no ser tan repetitivos se omitira esa
parte que es donde se inicializan las variables y nos suscribimos al los eventos de
12
56
los manejadores de determinado stream, en este caso se usara
VideoFrameReady y DepthFrameReady en el evento Window_Loaded.
sensor.ColorFrameReady += runtime_VideoFrameReady;
Tip: para hacer mas rapida esta tarea se recomienda solo escribir
“sensor.VideoFrameReady+=” y a continuacion dos veces la tecla tab y el
Intellisense de Visual Studio nos creara el evento correspondiente.
En la figura siguiente se muestra el pseudocodigo del evento VideoFrameReady
que se encargara basicamente de obtener en la variable CFrame en stream de
ColorImageFrame si se obtienen datos se asigna un tamaño y se copian esos
datos en crudo, se indica la bandera receiveData a true para despues crear un
BitmapSource de esos datos que seran enviados a un control Image en su
propiedad Source y es esta en la que visualizaremos los datos de la camara de
color del Kinect.