En la anterior entrada en el blog acerca del proyecto KinBheR se describía la primera etapa del proyecto, la cual consistía en el desarrollo de un módulo que permitiera capturar, preprocesar y almacenar la información proporcionada por el dispositivo Kinect de segunda generación. Tras finalizar el desarrollo de dicho módulo, es el momento de pasar a la acción y ponerlo en funcionamiento para generar nuestro propio conjunto de datos que será empleado posteriormente en el proyecto.

generalmapofprojectetapa2

Como ya se comentaba en la descripción general del proyecto, es necesario disponer de una batería de casos de entrenamiento y otra de testeo que nos permita evaluar y validar el sistema. Debido a la naturaleza del sistema, el cual recordemos que persigue interpretar y entender actividad de alto nivel y no acciones aisladas, es conveniente que generemos nuestro propio conjunto de datos (a partir de ahora dataset) en el cual se pueda asegurar que las personas están realizando las acciones con las que se ha entrenado el sistema pero de manera racional, es decir, que se encuentran motivadas por algún objetivo concreto.

Acciones

A continuación se presenta la lista de acciones que van a ser contempladas en el dataset a generar:

  1. Nada: No se está realizando ninguna acción. El usuario está parado.
  2. Mirar reloj: El usuario realiza la acción de mirar el reloj de su muñeca.
  3. Cruzarse de brazos: El usuario realiza la acción de cruzarse de brazos.
  4. Rascarse la cabeza: El usuario realiza la acción de rascarse la cabeza.
  5. Sentarse: El usuario realiza la acción de sentarse en el suelo.
  6. Levantarse: El usuario realiza la acción de levantarse.
  7. Darse la vuelta: El usuario realiza la acción de darse la vuelta sobre sí mismo.
  8. Caminar: El usuario realiza la acción de caminar.
  9. Saludar: El usuario realiza la acción de saludar con su mano.
  10. Dar puñetazo: El usuario realiza la acción de dar puñetazos.
  11. Dar patada: El usuario realiza la acción de dar patadas.
  12. Señalar: El usuario realiza la acción de señalar con el dedo.
  13. Coger: El usuario realiza la acción de coger algo del suelo, una mesa, etc.
  14. Lanzar: El usuario realiza la acción de lanzar algo sobre su cabeza.
  15. Lanzar: El usuario realiza la acción de lanzar algo de abajo hacia arriba.

Proceso de grabación

Ya que KinBehR está pensado para supervisar automáticamente contextos con fondos relativamente estáticos como habitaciones o espacios acotados, las grabaciones se desarrollarán en un entorno controlado. Este entorno consiste en una habitación donde hay una serie de objetos que tienen como objetivo motivar determinadas acciones:

  • Un libro: Consiste en un libro de crucigramas con la intención de captar la atención de los actores durante la grabación y potenciar así la realización de la acción coger.
  • Una silla: Puede ser utilizada y movida por los actores durante la grabación. De este modo se pretende animar a los actores a realizar la acción sentarse.
  • Un saco de boxeo: Puede ser empleada por los actores durante la grabación. La forma más natural de interaccionar con él es mediante puñetazos y patadas.
  • Una pelota: Puede ser empleada por los actores durante la grabación. La forma más natural de interaccionar con ella es botándola o lanzarla al aire o contra las paredes para así realizar la tarea de lanzar o tirar algo.

Mediante la introducción de estos elementos en el escenario se pretende diseñar un dataset que sea lo más representativo posible respecto de la inmensa variabilidad de acciones de la vida real. De esta manera se conduce a los actores a que de forma natural interaccionen con los elementos que interesan para los objetivos del sistema. Un ejemplo de ello podría ser como el actor encuentra el libro, lo recoge (acción coger) y se sienta a leerlo (acción sentarse). Otro ejemplo también podría ser como el actor ve el saco de boxeo y empieza a jugar con el dándole patadas y puñetazos (acción patada y acción puñetazo).

Una vez que el escenario estaba preparado se comenzó con el proceso de grabación. Para ello se convocó a dieciocho actores de diferentes estaturas, peso y sexo para obtener la mayor variedad posible.

Es importante mencionar que este proceso de grabación fue dividido en dos partes bien diferenciadas con objetivos diferentes. De esta forma, por cada actor se realizaban dos procesos de grabación:

  • Grabación en entorno no guiado: En este proceso de grabación no se le daba ningún tipo de instrucción al actor. De este modo, se dejaba al actor en la habitación con el lema “tienes 4 minutos para hacer lo que quieras”.
  • Grabación en entorno guiado: En este proceso se iba solicitando al actor que realizara repetidamente las acciones que se le fueran indicando. Una de las principales motivaciones de este proceso es facilitar un conjunto de datos que pueda ser posteriormente empleado para el entrenamiento del sistema.

Como resultado se obtuvieron dos paquetes de vídeos por cada actor capturados mediante el módulo de captura de imágenes. Estos paquetes están compuestos por cuatro tipos de vídeos cada uno (vídeo RGB, vídeo de profundidad, video de silueta y vídeo de esqueleto) y archivos XML con las articulaciones de cada usuario. Posteriormente cada una de estas secuencias grabadas tuvieron que ser manualmente segmentadas y etiquetadas por acciones, además de generar el correspondiente vídeo de esqueleto de cada usuario a partir de los archivos XML.

Estructura del dataset

Como ya se mencionaba antes, en el dataset podemos encontrar dos tipos de secuencias de vídeos. Dentro de la carpeta actores, nos encontramos por un lado las secuencias guiadas que son nombradas con el prefijo «actions«, y por otro las no guiadas que son nombradas con el prefijo «actor«. Dentro de cada una de estas carpetas, nos encontramos con los diferentes videos (rgb, profundidad, etc) y los ficheros XML correspondientes.

También nos encontramos con la carpeta «truth», en la cual se encuentran los ficheros «ground truth» correspondientes a cada una de las secuencias de vídeo. Los nombres de estos ficheros siguen la siguientes estructura: nombre del actor + tipo de video + «_frame_segmented.txt».

La estructura interna de estos ficheros también se encuentra predefinida: Cada línea estará compuesta por el número del frame donde comienza la acción, un espacio en blanco, el número de frame donde finaliza la acción, un espacio en blanco y el identificador de la acción que se está llevando a cabo (los números corresponden con los mostrados en la lista de acciones anterior). A continuación se muestra un pequeño ejemplo para facilitar su comprensión:

  • Frames del 0 al 220: El usuario no esta realizando ninguna acción.
  • Frames del 220 al 271: El usuario se encuentra caminando.
  • Frames del 271 al 310: El usuario ha cogido algún objeto.
  • Frames del 310 al 327: El usuario está caminando
0 220 0
220 271 7
271 310 12
310 327 7

Por último, también se encuentra un script de Matlab (XMLtoVideos_matlab.m) cuya finalidad es generar un vídeo de esqueleto a partir de los ficheros XML.

Descarga del Dataset

En este enlace se encuentra disponible para su descarga, poniendo de esta forma el dataset a disposición del resto de la comunidad científica con el fin de que lo resultados obtenidos en el presente proyecto puedan ser comparados con futuros proyectos.

 

Dataset KinBheR v1

En este enlace se encuentra disponible la primera versión del dataset del proyecto KinBheR. Este fue grabado con una Kinect de primera generación con un total de 14 actores. Para mas información, visita esta entrada.