• Tidak ada hasil yang ditemukan

Reconocimiento de Gestos Kinect CSharp

N/A
N/A
Protected

Academic year: 2017

Membagikan "Reconocimiento de Gestos Kinect CSharp"

Copied!
92
0
0

Teks penuh

(1)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

52

(53)

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)

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)

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)

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.

Gambar

Figura 10 Hardware que se instala con el Kinect
Figura 16 Rastreo de esqueletos
Figura 17 Representación de joints del cuerpo
Figura 22 Umbral de sonido del Kinect
+7

Referensi

Dokumen terkait

La nueva interfase permite visua- lizar las bases de datos según las disciplinas académicas presentes en la Facultad de Cien- cias Naturales; la búsqueda según la forma en que

ä La lista ordenada se puede implementar como cualquier tipo de lista vista hasta ahora: simple o doblemente enlazada, circular o no circular, con o sin nodo de cabecera, con un

Estados Unidos. Después del mercado estadounidense, España se ubica como el segundo mercado del páprika, seguido de México. Este producto se exporta en diferentes

Para configurar la transmisión del mensaje de un router a otro, se debe hacer una configuración estática, para ello se entra en el modo configuración, una vez ahí se escribe

Et Marqués de Estella es, como todo hombre de acción, poco hablador, y el Honorable Señor Don Vicente Sotto, Diputado por el Segundo Distrito de Cebú no hace mis que hablar.. Aquel se

Feria Exposición De Procluctos Españoles En Santiago De Chile El 24 de Junio se inauguró ésta Exposición, la más importante de productos españoles que se ha ce- lebrado hasta ahora en

Este sesgo se puede introducir dentro de la investigación de manera consciente o inconsciente por parte de los investi- gadores, sobrepasando la frontera del fraude cuando se hace de

Extracciónymanejodelosdatos Tres investigadores extrajeron de forma independiente los datos incluidos como variables del protocolo, así como la metodología empleada en cada estudio en