Como ya se mencionaba anteriormente, la primera etapa del proyecto KinBehr consiste en el desarrollo de un módulo software que permita la captura, visualización y almacenamiento de los datos generados por el dispositivo Kinect.

generalmapofprojectEtapa1

Acerca de Kinect

El primer paso para proceder al desarrollo de este módulo consiste en conocer a fondo el dispositivo que va a ser empleado. El dispositivo en cuestión es el controlador Kinect de segunda generación desarrollado y comercializado por Microsoft. Tras el éxito cosechado por la primera generación de Kinect (tanto la version para Xbox como la version de Windows), Microsoft decidió desarrollar y lanzar una nueva version de su dispositivo con numerosas mejoras y novedades.

kinectv2

Entre las diferentes características técnicas de Kinect v2 (o de segunda generación) destacan la siguientes:

  • Camara RGB. La cual hace posible la captura de vídeo mediante el almacenamiento de datos desde tres canales a una resolución de 1920 x 1080 a 30 frames por segundo (16:9).
    • Campo de vision horizontal: 70°.
    • Campo de vision vertical:  60°.
  • Un sensor de infrarrojos (Active IR) y un sensor de profundidad IR. Ambos hacen posible la captura de profundidad: El emisor emite rayos de luz infrarroja y el sensor de profundidad lee los haces IR reflejados que vuelven a él. De esta manera, es posible convertir esta información en datos relativos a la profundidad midiendo la distancia entre el objeto y el sensor. Resolución obtenida 512 x 424. Permite ver en la oscuridad (a diferencia de Kinect v1)
  • Un micrófono de múltiples matrices. Incorpora cuatro micrófonos a 40 kHz para que sea posible grabar audio desde una dirección especifica, encontrar la ubicación del sonido y la dirección de la onda de audio.

kinectv2Components

A continuación se muestra una tabla comparativa entre la primera y segunda generación de Kinect.

comparativaKinects

Una vez comentadas las características técnicas más destacadas de la Kinect v2 y la comparación con su antecesora, es el momento de comentar brevemente las funcionalidades más destacadas que han sido incorporadas en el nuevo SDK (SDK 2.0) en comparación con su antecesor (SDK 1.8):

  • Soporte para la segunda generación de Kinect.
  • Campos de vision (horizontal y vertical) más amplios para profundidad y color.
  • HD en imágenes de color.
  • Visión infrarroja a 30 fps.
  • Mayor fidelidad en profundidad (x3).
  • Mejoras en los micrófonos.
  • 25 articulaciones de hasta 6 personas.
  • Tracking del pulgar, de mano y gestos de mano abierta y cerrada.
  • Mejor rango de operación en alta calidad.
  • Varias aplicaciones pueden usar el sensor simultáneamente.

Módulo

Módulo desarrollado en C# mediante la segunda versión del SDK de Kinect de Microsoft. Dicho módulo es el encargado de capturar, procesar y almacenar los datos capturados mediante la segunda versión del dispositivo Kinect en un sistema Windows 8 o superior.

Como ya se anticipaba anteriormente, los datos capturados por dicho módulo son los siguientes:

  • RGB: Vídeo rgb a 25 frames por segundo.

1238303498-rgb_example

  • Depth (profundidad): Vídeo a 25 frames por segundo obtenido a partir de los datos de profundidad capturados por Kinect.

1362470203-depth_example

  • Infrared (infrarojos): Vídeo a 25 frames por segundo obtenido a partir de los datos infrarrojos capturados por Kinect.

2844258372-infrared_example

  • Shadow: Vídeo a 25 frames por segundo obtenido a partir de los datos de profundidad capturados por Kinect. El resultado de este tipo de vídeos es la extracción del fondo de la escena, dejando únicamente a los usuarios detectados.

688287109-shadow_example

    • Skeleton-XML: Archivos XML que contienen toda la información generada por Kinect (articulaciones, estados, etc.) de los usuarios que han sido detectados. A continuación se describe la estructura de dichos archivos XML a partir de un ejemplo.
<frame>
    <timestamp>1741,9766486</timestamp>
    <users>
        <user>
            <id>72057594037928201</id>
            <IsRestricted>False</IsRestricted>
            <IsTracked>True</IsTracked>
            <ClippedEdges>None</ClippedEdges>
            <joints>
                <SpineBase>
                    <position>
                        <positionx>0,03596888</positionx>
                        <positiony>-0,4235814</positiony>
                        <positionz>2,419032</positionz>
                        <TrackingState>Tracked</TrackingState>
                    </position>
                    <orientation>
                        <orientationx>-0,07805847</orientationx>
                        <orientationy>0,8758811</orientationy>
                        <orientationz>0,036816</orientationz>
                        <orientationw>-0,4747461</orientationw>
                    </orientation>
                </SpineBase>
                <SpineMid>
                    ...
                </SpineMid>
                ...
        </user>
        <user>
            ...
        </user>
    </users>
</frame>

Generación de los videos de esqueletos

Llegados a este punto, es posible que alguno haya pensado porque se ha decido almacenar los datos de los usuarios que proporciona Kinect en ficheros XML y no generar directamente vídeos dónde se representen los esqueletos de dichos usuarios. La razón que motiva esta decisión es muy simple: la conservación de la información. De esta forma, almacenando los datos en ficheros XML no se pierde ninguna información que posteriormente pueda ser requerida (para otros propósitos a los perseguidos en este proyecto o que de momento no se han contemplado). De esta forma, es realmente simple generar los vídeos a partir de estos ficheros XML (la transformación contraría, de vídeo a datos numéricos de usuarios, sería más compleja y supondría pérdidas de precisión).

Para la generación de dichos vídeos de esqueletos se ha desarrollado un pequeño programa que permite la generación de vídeos a 25 frames por segundo a partir de los datos de tracking generados por Kinect (ficheros XML). El resultado de este tipo de vídeos son los esqueletos de los usuarios detectados, donde por claridad se ha decidido representar tan sólo los puntos que representan las articulaciones. A continuación se muestra una imagen obtenida mediante este pequeño programa (aunque se muestra desde un punto de vista frontal, este puede ser cambiado y representarse desde cualquier perspectiva).

3666303884-skeleton_example

Requisitos

Es importante destacar que los requisitos necesarios para ejecutar dicho sistema son los siguientes:

  1. Requisitos del sistema operativo:
    • Windows 8 (64 bits)
    • Windows 8.1 (64 bits)
    • Windows Embedded Standard 8 (64 bits)
    • Windows Embedded Standard 8.1 (64 bits)
  2. Requisitos de hardware:
    • Procesador de 64 bits (x64)
    • Procesador de doble núcleo a 3,2 GHz o más
    • Bus USB 3.0 dedicado
    • 2 GB de RAM
    • Un sensor Kinect para Windows v2
  3. Requisitos de software:
    • Microsoft Visual Studio 2013 Express u otra edición de Visual Studio 2013, Microsoft Visual Studio 2012 Express u otra edición de Visual Studio 2012
    • .NET Framework 4.0
    • Microsoft Speech Platform SDK v11 para el desarrollo de aplicaciones con funciones de voz para Kinect para Windows

Ejecucción

A continuación se muestran algunas imágenes del módulo en funcionamiento:

capturakinbehr

En la próxima entrada del proyecto KinBher se tratará sobre como se ha empleado este módulo en la generación del nuevo dataset para el proyecto.