E SCOLA T ECNICA S UPERIOR D ’E NGINYERS DE T ELECOMUNICACI Ó DE BARCELONA Y M ASSACHUSETTS I NSTITUTE OF T ECHNOLOGY Detección de objetos y anotación de imágenes en el iPhone Tutor: Autor: Dolores B LANCO Dr. Antonio T ORRALBA 25 de febrero de 2013 Agradecimientos Antes de empezar me gustarı́a agradecer a todas las personas que han hecho posible que haya hecho este proyecto. Ellas son mi famı́lia y amigos, por todo su apoyo; compañeros y amigos del laboratorio por poder compartir estos meses con ellos y sobre todo al profesor Antonio Torralba por haberme dado la oportunidad de aprender tantas cosas. ÍNDICE GENERAL Detección de objetos y anotación de imágenes en el iPhone Índice general 1. Introducción 2 2. Contexto 3 2.1. Reconocimiento y detección de objetos . . . . . . . . . . . . . . . . . . . . . 3 2.2. LabelMe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3. iOS Apps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3. LabelMe iOS App 10 3.1. Funcionamiento de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2. Aspectos técnicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.1. Organización de los archivos . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.2. Comunicación entre la aplicación y el servidor . . . . . . . . . . . . . 15 4. Detector de objetos en iOS 20 4.1. Captura de la imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2. Cálculo de los descriptores: HOG . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3. Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.4. Correlación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5. Pirámide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.6. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.7. Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5. Conclusiones Dolores Blanco 28 I ÍNDICE DE FIGURAS Detección de objetos y anotación de imágenes en el iPhone Índice de figuras 2.1. Sistema de reconocimiento de objetos . . . . . . . . . . . . . . . . . . . . . . 3 2.2. Representación de cálculo de los descriptores HOG. Obtenido de [1] . . . . . . 5 2.3. Esquema para obtener los descriptores HOG. Obtenido de [1] . . . . . . . . . . 5 2.4. LabelMe, herramienta de anotación . . . . . . . . . . . . . . . . . . . . . . . 6 3.1. Funcionamiento LabelMe app . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.1. Cálculo descriptores HOG de [2] . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2. Orden de almacenamiento de pı́xels según la orientación de la imagen. . . . . . 23 4.3. Representación HOG para distintas imágenes. . . . . . . . . . . . . . . . . . . 24 4.4. Ejemplos del uso del algoritmo nms para distintas áreas de solapamiento con imágenes de [5]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.5. Pirámide de una imágen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.6. Tiempos para iPhone5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Dolores Blanco II ÍNDICE DE CUADROS Detección de objetos y anotación de imágenes en el iPhone Índice de cuadros 3.1. Inicio de sesión: respuesta del servidor y acción de la aplicación . . . . . . . . 16 3.2. Creación de una cuenta de usuario: respuesta del servidor y acción de la aplicación 17 3.3. Envı́o de imagen y anotación: respuesta del servidor y acción de la aplicación . 18 3.4. Actualización de la anotación: respuesta del servidor y acción de la aplicación . 19 4.1. Especificaciones para todos los modelos de dispositivos compatibles con el detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dolores Blanco 21 1 Detección de objetos y anotación de imágenes en el iPhone Capı́tulo 1 Introducción A partir de la aparición del primer smartphone la evolución de los dispositivos móviles ha cambiado la manera como la sociedad interactúa con ellos. Tanto los recursos que ofrecen como la facilidad de acceder a ellos para la mayorı́a de personas son las principales razones que nos llevan a realizar este trabajo. En el campo de detección y reconocimiento de objetos es importante poder acceder a imágenes anotadas pero esto siempre implica un coste. Es por esto que nuestro primer objetivo ha sido facilitar una herramienta a la comunidad de Computer Vision que permita crear una base de datos propias de imágenes anotadas, en cualquier lugar y de la manera más sencilla posible. Esto no es más que una extensión de LabelMe [3] pero ahora desde un dispositivo móvil, por lo que se añade flexibilidad a las funcionalidades ya existentes. El segundo objetivo ha sido desarrollar un detector de objetos para dispositivos móviles. Un detector en dispositivos móviles es muy común ya que la mayorı́a de cámaras digitales actuales y móviles disponen de detectores faciales o de sonrisas. En este caso el detector serı́a un detector a medida pudiendo elegir qué detectar y utilizar las imágenes y anotaciones creadas con LabelMe. Para el primero desarrollo de estas aplicaciones hemos escogido utilizar dispositivos con el sistema operativo iOS de Apple. Dolores Blanco 2 Detección de objetos y anotación de imágenes en el iPhone Capı́tulo 2 Contexto Uno de los principales objetivos de las investigaciones tecnológicas es conseguir que las máquinas tengan un comportamiento lo más parecido posible al del ser humano, que tenga inteligencia artificial. En Computer Vision como subcampo de la inteligencia artificial tiene el mismo objetivo, pero relacionado con la visión. En este campo se busca el entendimiento de la escena, es decir, a partir de una representación del mundo real los dispositivos deben ser capaces de enteder qué está pasando y reaccionar de manera diferente dependiendo de la situación. Para poder conseguirlo deben poder reconocer los objetos y acciones existentes en la escena. 2.1. Reconocimiento y detección de objetos Figura 2.1: Sistema de reconocimiento de objetos Un sistema de reconocimiento de objetos, tal y como se puede ver en la figura 2.1, necesita una captura de la escena para poder compararla con modelos previos y determinar si el objeto en cuestión está o no en la escena. Dolores Blanco 3 2.2. LABELME Detección de objetos y anotación de imágenes en el iPhone La representación de la escena puede ser una imagen en dos o tres dimensiones. Los humanos para reconocer un objeto primero tenemos que saber algo sobre él, ya sea haberlo visto antes o conocer una descripción. En un sistema de reconocimiento pasa lo mismo, el sistema tiene que tener ciertos modelos para que pueda compararlos con las imágenes de la escena. Lo más sencillo de pensar es que estos modelos pudieran ser imágenes de objetos en otras escenas, y por tanto el sistema los compara mediante una correlación pı́xel a pı́xel con la imagen de la escena actual. Esta primera aproximación se comprobó que no era efectiva debido a que las imágenes podrı́an estar tomadas desde distintos puntos de vista, sólo podrı́a aparecer alguna parte o tener alguna parte oculta tal y como dijo Nivatia and Binford en 1977. Es por esta razón que a partir de las imágenes se calculan descriptores o caracterı́sticas de éstas con el objetivo de obtener información adicional como por ejemplo la textura o los bordes. Desde que se empezó a tratar el reconocimiento de objetos se han utilizado muchos tipos de caracterı́sticas, en este caso hemos utilizado Histograms of Oriented Gradients, HOG, por ser uno de los más extendidos y sobre todo ser sencillo de calcular. En el siguiente punto detallaremos en que consiste este procedimiento. Historgrams of Oriented Gradients La primera vez que se introducen los descriptores HOG es en [1] por Dalal & Triggs destinado a la detección de humanos. Lo que buscaban con este tipo de descriptores es que el sistema puediese distinguir a humanos bajo fondos y iluminación complicados. Este método aprovecha que los objetos se pueden describir a partir de la forma que tienen. Una manera de calcular la forma es a partir de la orientación que tiene el gradiente o los contornos. Tal y como muestra la figura 2.3, primero se calcula el gradiente de la imagen y después se divide en pequeñas regiones llamadas cells. En cada cell se calcula el histograma de los ángulos del gradiente y se normaliza el valor respecto a la energia de los histogramas en una región mayor llamada block. Lo que se consigue con este último paso es que los descriptores son más invariantes en cuestiones de iluminación. 2.2. LabelMe Conseguir una base de datos de imágenes amplia es muy importante para el desarrollo de sistemas de reconocimiento de objetos y hoy en dı́a gracias a Internet esto es relativamente sencillo. Tan importante como las imágenes son las anotaciones en ellas ya que dan información sobre lo que contienen, aunque en este caso esto es lo que más coste tiene porque requiere Dolores Blanco 4 2.2. LABELME Detección de objetos y anotación de imágenes en el iPhone Figura 2.2: Representación de cálculo de los descriptores HOG. Obtenido de [1] Figura 2.3: Esquema para obtener los descriptores HOG. Obtenido de [1] la acción humana. Para facilitar esta tarea en 2005 Russel et al crearon LabelMe: The Open Annotation Tool [4], añadiendo varias funcionalidades que la mayor parte de bases de datos no tenı́an. En [3] enumeran las siguientes: Los objetos están integrados en la escena. No sólo se sabe que el objeto etiquetado está en la escena, sinó que se sabe en que lugar de imagen está. Diversos tipos de clases. Hasta el momento solo Caltech 101, Caltech 256 y ImageNet tenı́an un número comparable. Diversos tipos de imágenes, variando punto de vista, distancia, etc. Las imágenes no tiene copyright ya que gran parte de ellas han sido tomadas por los Russell et al o por investigadores que han contribuido. Abierta y dinámica. Una de las cosas que hace útil a LabelMe es su herramienta de anotación web que podemos ver en la figura 2.4. Esta herramienta permite de manera sencilla delimitar los objetos de la imagen creando polı́gonos punto a punto y añadirles el nombre. La facilidad a la hora de anotar y compartir es una de las cosas que ha hecho que el uso de LabelMe se extienda desde que se Dolores Blanco 5 2.3. IOS APPS Detección de objetos y anotación de imágenes en el iPhone Figura 2.4: LabelMe, herramienta de anotación creó. Actualmente cuenta con casi 200000 visitantes, más de 200000 fotos y sobrepasa el millón de anotaciones. Además se puede descargar un kit con funciones de MATLAB que permite trabajar con la base de datos fácilmente. 2.3. iOS Apps Para empezar a desarrollar aplicaciones para iOS Apple proporciona un entorno y un kit de desarrollo llamado Xcode y SDK respectivamente. Una vez tienes esto lo único que necesitas es saber el lenguaje de programación que utilizan las aplicaciones, Objective - C, y las librerı́as de objetos que ya proporciona Apple. Objective - C Objective - C es un lenguaje de programación que tal como su nombre indica está orientado a objetos y es un superconjunto del lenguaje C. Ser un superconjunto de C hace que compartan muchas cosas, como la sintaxis básica, las estructuras, los tipos, punteros, etc., pero añadiendo caracterı́sticas de los lenguajes orientados a objetos y otras de propias. Los lenguajes orientados a objetos permiten tener la información encapsulada y definir comportamientos sobre ella, llamados métodos en Objective - C Un objeto no es más que una instancia de una clase y para definir una clase en Objective C se necesitan por lo menos dos archivos: Header file. Contiene las declaraciones de la clase, las variables, métodos y constantes. Dolores Blanco 6 2.3. IOS APPS Detección de objetos y anotación de imágenes en el iPhone La extensión es .h Implementation file. Es donde se hace la implementación de los métodos declarados. Tiene como ventaja que puede contener tanto código propio de Objective - C o C. La extensión es .m También puede haber un archivo de implementación con extension .mm y otro con extensión .xib. El primero sirve para poder añadir clases o funciones programadas en C++ y el segundo para generar gráficamente la interfaz del objeto, en el caso que la tenga. Estructura básica Un ejemplo simplificado de una clase lo podemos ver a continuación. Los archivos .h tienen un aspecto parecido al siguiente código: // Aqui a\˜nades las librerias o archivos que utilizaras. #import <UIKit/UIKit.h> // MiClase es el nombre de la clase que estamos declarando y // NSObject la clase de la cual hereda. @interface MiClase : NSObject{ float f; NSString *string; } +(MiClase *)nuevaClaseCon:(NSString *)string; -(NSString *)cambiaString; @end Y los archivos .m son ası́: #import "MiClase.h" @implementation MiClase Dolores Blanco 7 2.3. IOS APPS Detección de objetos y anotación de imágenes en el iPhone +(MiClase *)nuevaClaseCon:(NSString *)string; { // La implementacion va aqui. } -(NSString *)cambiaString; { // La implementacion va aqui. } @end Métodos En Objective - C hay dos tipos de métodos, los métodos de instancia que únicamente afectan a la instancia de la clase y los métodos de clase que afectan a toda la clase. Los primeros son los más comunes ya que con lo que trabajas normalmente son con instancias. En la declaración se distinguen en que los de instancia empiezan con el sı́mbolo -, en cambio los de métodos de clase utilizan +. La manera de declararlos e implementarlos se puede ver en los códigos de la subsección 2.3. La manera de ejecutarlos se llama messaging, ya que es como si enviases un mensaje al objeto para que ejecute el método, el código serı́a: MiClase *unMiClase = nil; // nil es el equivalente de NULL. unMiClase = [MiClase nuevaClaseCon:@"nuevo string"]; NSString *str; str = [unMiClase cambiaString]; Propiedades Una propiedad no es más que información que encapsula un objeto, pero lo que le diferencia de una variable es que representa que es un atributo de la clase. La ventaja de utilizar propiedades es que Objective - C crea por ti métodos que permiten acceder o fijar la propiedad, es decir, si desde un objeto quisieses recuperar una variable de otro objeto creado éste deberı́a tener un método declarado que te lo devolviese. En cambio, con una propiedad no hace falta porque automáticamente ya tienes un método con el nombre de la propiedad que te la devuelve. Hay distintos atributos que puedes fijar de una propiedad, por ejemplo, readonly hace que sólo puedas acceder a la propiedad pero no la puedas modificar. Dolores Blanco 8 2.3. IOS APPS Detección de objetos y anotación de imágenes en el iPhone Protocolos y Categorı́as Los protocolos y categorı́as son herramientas muy útiles cuando programas con Objective C ya que permiten crear métodos para cada clase e utilizarlos. La diferencia entre un protocolo y una categorı́a es que en el protocolo los métodos no están implementados y pueden implementarlos cualquier clase, en cambio en la categorı́a los métodos están implementados para una clase en concreto y permite crear más de los que ya tiene la clase. Dolores Blanco 9 Detección de objetos y anotación de imágenes en el iPhone Capı́tulo 3 LabelMe iOS App Tras la gran aceptación de LabelMe web, extenderlo a una aplicación para dispositivos móviles tiene como objetivo facilitar a los usuarios la recolección de imágenes permitiendo hacer fotos y anotándolas en cualquier momento y lugar. Estas imágenes pueden enviarse al servidor de LabelMe para añadir o modificar anotaciones. La aplicación está desarrollada para dispositivos iOS, tanto para iPhone como para iPad, el proceso para el desarrollo para esta plataforma se han explicado en 2.3. La elección de iOS frente a otras plataformas se debe a la gran penetración que tienen los productos Apple en la comunidad de Computer Vision además de la calidad de servicio que supone. 3.1. Funcionamiento de la aplicación La aplicación está diseñada para que sea fácil e intuitiva. En la figura 3.1 aparecen las pantallas que existen y como acceder a ellas. Pantalla de inicio En esta pantalla es en la que se debe introducir el usuario y contraseña. El usuario y la contraseña son los mismos que se utilizan en la aplicación web, en caso de no tener una cuenta creada existe la opción de crear una. Para crear una cuenta, igual que en la web, es necasario escoger un nombre de usuario y contraseña, y proporcionar el nombre real, una dirección de correo electronico y la institución a la se pertenece. Hasta la última actualización de LabelMe no era necesario tener cuenta de usuario, con esta nueva funcionalidad cada objeto anotado queda marcado con el nombre de usuario de manera que cuando descargas una base de datos puedas trabajar únicamente con las imágenes anotadas por ti mismo o por otro usuario. Además Dolores Blanco 10 3.1. FUNCIONAMIENTO DE LA Detección APLICACIde ÓN objetos y anotación de imágenes en el iPhone Figura 3.1: Funcionamiento LabelMe app de iniciar sesión o crear una cuenta, desde la pantalla de inicio también es posible recuperar la contraseña en caso de no recordarla. Sólo hay que introducir la dirección de correo electrónico para que se genere una nueva contraseña y se envie un correo a la dirección especificada. Galerı́a Una vez se ha iniciado sesión, la primera pantalla que se muestra es la galerı́a. En la galerı́a se pueden ver todas las imágenes que se han tomado con la aplicación. Está formada por una barra de navegación en la parte superior y una barra inferior con pestañas que muestran en que pantalla estás y permiten cambiar la pantalla. En la vista de la pantalla aparece el nombre de usuario con su foto de perfil y un bontón que permite cambiar la visualización de las imágenes, de modo cuadrı́cula a modo lista y viceversa. Esto permite que al cambiar al modo lista podamos Dolores Blanco 11 3.1. FUNCIONAMIENTO DE LA Detección APLICACIde ÓN objetos y anotación de imágenes en el iPhone ver más información sobre la imagen: como la fecha en la que se creó, el número de anotaciones y el tamaño de la imagen en pı́xels. En cada thumbnail aparece un cı́rculo con diferentes colores que simbolizan diferentes estados de la imagen: - Rojo: ni la imagen ni las anotaciones están en el servidor de LabelMe. El número que aparece muestra las anotaciones que hay. - Verde: la imagen y las anotaciones están actualizadas en el servidor de LabelMe. - Naranja: la imagen está en el servidor, pero hay modificaciones en la anotación. El número muestra las modificaciones que se han realizado. Desde la galerı́a se pueden borrar y enviar las imágenes al servidor. Para el modo cuadrı́cula con el botón Edit de la barra de navegación se pueden enviar y borrar las imágenes seleccionadas, en cambio para el modo lista sólo sirve para borrar ya que para enviar cada imagen tiene un boton independiente. Cuando se elimina una imagen se hace localmente, es decir, en el servidor se mantiene tal y como estaba. Pantalla de Anotación En esta pantalla se visualiza la imagen y permite anotar los objetos en ella mediante rectángulos. La manera de acceder a esta pantalla es pulsando una imagen existente en la galerı́a o justo después de tomar una foto. Como todas las pantallas, tiene una barra de navegación que permite volver hacia la pantalla anterior. En la parte superior está una barra de herramientas con cuatro botones, éstos permiten crear y borrar las anotaciones, enviar la imagen y anotacion al servidor y mostrar una lista con todos los objetos anotados. Para cada objeto aparece una etiqueta para añadir o modificar el nombre del objeto. Para selecionar un objeto anotado basta con tocar en la superfı́cie interior al rectángulo que lo delimita. Cuando la imagen tiene muchas anotaciones puede que haya muchos rectángulos y uno se superponga a otro, esto puede causar problemas a la hora de seleccionar un objeto. Por esta razón está la lista de objetos, donde aparecen los nombres de los objetos y el tamaño que ocupan en pı́xels y a partir de ella puedes seleccionar el objeto deseado. Pantalla de Ajustes La pantalla de ajustes permite modificar algunos parámetros del uso. Las funcionalidades son: Dolores Blanco 12 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone - Cambiar la foto de perfil. El cambio también se reflejará en la galerı́a. - Conocer el número de fotografı́as del usuario en el dispositivo. - Acceder directamente a la versión web. - Escoger si las fotografı́as tomadas por la aplicación se guardarán también en la galerı́a del dispositivo o no. - Determinar la resolución de la imagen. - Seleccionar si a la hora de subir las imágenes al servidor se utiliza únicamente una conexión Wi-Fi, o cualquiera. - Determinar si se inicia sesión automáticamente. - Información sobre LabelMe. Integración con LabelMe Web A la hora de subir las imágenes y anotaciones, éstas se almacenan en una colección especifica de la cuenta, llamada iPhoneCollection. Desde la aplicación web se puede acceder, modificar y añadir anotaciones a las imágenes creadas por la aplicación móvil. Hasta el momento la sincronicación entre las dos aplicaciones es unidireccional, únicamente del dispositivo móvil hacia el servidor. Esto significa que si modificamos o añadimos una anotación desde la aplicación web estos cambios no se verán en el dispositivo móvil y además, si volvemos a enviar la anotación desde el dispositivo móvil las creadas desde la web desaparecerán. Las anotaciones creadas desde la aplicación móvil tienen la misma estructura en el archivo xml que las creadas desde la aplicación web. Esto hace que se pueda utilizar el conjunto de funciones existentes en Matlab Toolbox. 3.2. Aspectos técnicos Sobre la programación de la aplicación, al estar destinada para iOS se utiliza Objective - C. Los aspectos más importantes del diseño de una aplicación para iOS se explican en la sección 2.3, por lo que en este apartado está destinado a explicar como se organizan los archivos y al comportamiento entre la aplicación y el servidor. Dolores Blanco 13 3.2. ASPECTOS TÉCNICOS 3.2.1. Detección de objetos y anotación de imágenes en el iPhone Organización de los archivos Para que la aplicación funcione correctamente ésta genera diferentes tipos de archivos. Los archivos principales son las imágenes y anotaciones, pero no son los únicos. La guı́a sobre cómo gestionar los archivos que proporciona Apple especifica que los archivos de la aplicación deben estar almacenados en la carpeta Documents de la aplicación y los temporales en la carpeta temporal llamada tmp. En la carpeta Documents, cuando se lanza la aplicación por primera vez se crea una carpeta llamada RememberMe donde se almacena el nombre de usuario en un archivo llamado username.txt y si está la opción de inicio automático también se guarda la contraseña en un archivo llamado password.txt. Estos dos archivos se utilizan para iniciar la sesión automáticamente copiando su contenido en los campos de la pantalla de inicio de sesión. Además de la carpeta RememberMe, la primera vez que se inicia sesión con un usuario en Documents se crea una carpeta llamada con el nombre del usuario, y dentro de ésta se crean otras tres carpetas llamadas annotations, images y thumbnail y también dos archivos del tipo plist (property list) con el nombre settings.plist y otro con el nombre de usuario. En estas tres primeras carpetas se guarda todo lo referente a las imágenes tomadas y sus anotaciones. En images se guardan las imagenes con la resolución escogida en la pantalla de settings y un archivo de texto con la información de la locaclización y en thumbnail una versión más pequeña para la galerı́a. Las anotaciones se guardan en la carpeta annotations, este archivo contiene una array con los objetos creados especialmente para cada anotación. En el caso del archivo nombredeusuario.txt, éste almacena para cada imagen el número de anotaciones, para el caso de una imagen que no está en el servidor y para el caso en el que la imagen se haya enviado anteriormente el número de modificaciones desde la última vez que se envió. La manera en que se en se utiliza este archivo es la siguiente: cuando se toma una imagen se crea una entrada en la property list con el nombre de la imagen y se le asigna el valor -1, cada vez que se crea una anotación se decrementa este valor. En el caso que se borre algun objeto el valor se incrementarı́a. Una vez se envı́a al servidor la imagen y la anotación y se recibe correctamente este valor se cambia a 0, por lo que si una imagen tiene asociado un 0 significa que está actualizada en el servidor. Una vez la imagen ya está en el servidor, en lugar de anotaciones el valor representa las modificaciones respecto a la última versión enviada. Una modificación puede ser tanto la creación, modificación o eliminación de un objeto. Para este caso la manera modificar el valor asociado a cada imagen es el contrario: para cada modificación se incrementa el valor y la única manera de decrementarlo es eliminando un objeto que se ha creado después la última actualización. Es con este valor con el que se obtiene el número que Dolores Blanco 14 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone aparece en cada imagen de la galerı́a explicado en la seccion 3.1. Siendo v el valor almacenado en cada entrada de la property list, la manera como se obtiene es la siguiente: - |v + 1|, si la imagen no está todavı́a en el servidor, es decir, v < 0. El color utilizado es el rojo. - v, si la imagen ya está en el servidor, es decir, v > 0. El color es el naranja. - Cuando el valor es 0 aparece una checkmark informando que está correctamente actualizada en el servidor. En el archivo settings.plist se guarda la información que se ha escogido en la pantalla de ajustes, para los ajustes de inicio de sesión automático, conexión wifi y guardar las imágenes en la galerı́a del dispositivo se utiliza un boleano que indica si estas opiciones están habilitadas o no. Para la resolución se almacena un número indicando la resolución escogida, en caso de que sea la máxima se guarda un 0. Respecto a los archivos temporales almacenados, éstos son los que se utilizan para enviar y actualizar las imágenes y anotaciones. Estos archivos contienen toda la información necesaria para enviar al servidor y se guardan con el nombre de la imagen seguido de un número de 10 dı́gitos. La razón por la que se crean estos archivos es por si hay un error en el envio no tenga que generarse esta información otra vez ya que es lo que se tarda más en procesar. Por lo tanto, con estos archivos conseguimos que esta información solo se genere una vez y si se produce un error al enviar la próxima vez ser más rápido. Una vez el servidor ha recibido la información correctamente o ha pasado cierto tiempo, estos archivos se eliminan de la carpeta. 3.2.2. Comunicación entre la aplicación y el servidor La parte del servidor está implementada con lenguaje PHP. La elección de PHP se debe a su amplio uso en páginas web y también en la aplicación web de LabelMe por lo que facilitó la implentación para la aplicación móvil. La comunicación entre la aplicación y el servidor es unidireccional, del dispositivo al servidor, por lo que se necesitaba diseñar una manera de transferir la información en este sentido. Para todos los casos que se necesita enviar datos de la aplicación al servidor hemos escogido el método POST. El método POST utiliza las cabeceras HTTP para enviar los datos, estos datos pueden ser tanto cadenas de carácteres como datos binarios. Esta es la razón por la que escogimos este método ya que nos permite enviar más de un tipo de datos a la vez asociando a cada datos un nombre. Por ejemplo, si queremos enviar dos cadenas de carácteres y una imagen podriamos asociar éstas a los nombres string1, string2 e image respectivamente. Dolores Blanco 15 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone A continuación se resumen los protocolos utilizados para cada comunicación del dispositivo móvil con el servidor. Inicio de sesión Para poder iniciar sesión se necesita enviar tanto el nombre de usuario como la contraseña. Estos pueden estar introducidos mediante el teclado en los campos de la pantalla inicial o bien pueden ser recordados si esta opción está habilitada. En el POST los nombres de los valores enviados son username para el nombre de usuario y password para la contraseña. Ambos valores en este caso son cadenas de carácteres. Una vez el dispositivo ha enviado la información, el servidor ejecuta el stript PHP. Este stript lo que hace es comprobar que la contraseña enviada corresponda con la especificada en su base de datos de usuarios. Después de comprobarlo, el servidor envı́a una cadena de carácteres con la siguiente estrucuta: [dı́gito] [\n] [descripción] El valor del dı́gito varı́a dependiendo del resultado de la comprobación, en la tabla 3.1 están especificadas las posibles respuestas con la acción que lleva a cabo la aplicación cuando las recibe. Dı́gito Descripción Acción de la aplicación 0 Thanks, you are logged in Entra en la galerı́a del usuario 1 2 Username is not in the database Lanza una alerta con la descripción Password is invalid Lanza una alerta con la descripción Cuadro 3.1: Inicio de sesión: respuesta del servidor y acción de la aplicación Creación de una cuenta de usuario El comportamiento a la hora de crear una cuenta es exactamente el mismo que cuando se inicia sesión, con la diferencia de que ahora se envia más de dos pares nombre-valor. En este caso además del nombre de usuario y la contraseña también se envia el nombre real, el correo electrónico y la institución a la que se pertenece. Los nombres para estos campos del método POST son: name para el nombre real, email para el correo electrónico y por último, institution para la institución. Todos estos campos, al igual que en el caso anterior, son cadenas de carácteres. Lo que realiza el servidor en este caso es verificar que no existe otra cuenta con el mismo nombre de usuario o correo electrónico y envı́a una respuesta al dispositivo. Igual que con el inicio de sesión, también hay tres posibles respuestas que se especifican en la tabla 3.2. Dolores Blanco 16 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone Dı́gito Descripción Acción de la aplicación 0 Congratulations! Your account has been created Vuelve a la pantalla de inicio 1 Username already exists Lanza una alerta con la descripción 2 This email address already has a user associated Lanza una alerta con la descripción Cuadro 3.2: Creación de una cuenta de usuario: respuesta del servidor y acción de la aplicación Olvido de contraseña Cuando se utiliza la acción de olvido de contraseña la única información que se le pide al usuario es el correo electrónico con el que se registró, por lo que éste será el único campo con el nombre email del método POST. En este caso se utiliza el mismo script PHP que en la aplicación web, por lo que el servidor únicamente envia una respuesta cuando la dirección de correo electrónico no está en la base de datos. Tanto si la dirección está en la base de datos o no, la aplicación móvil lanza una alerta diciendo que un correo electrónico será enviado a la dirección especificada. ste es un error que se solucionará en la próxima actualización de la aplicación. Envio de imágenes y anotaciones Hasta el momento las situaciones explicadas sólo se tenı́a que enviar cadenas de carácteres, pero para este caso es necesario enviar la imagen además de la anotación. Para enviar una imagen el método POST necesita una estructura diferente a la de la cadena de carácteres, por lo demás la composición del método es la misma que en los casos anteriores. Esta estructura diferente permite añadir información sobre la imagen, como el nombre del archivo o el tamaño. En este caso especificaremos el nombre de la imagen dado por la aplicación móvil que se compone de la fecha,la hora que se ha tomado la imagen y el nombre del usuario. Añadiendo el nombre de la imagen facilitamos la sincronización del dispositivo con el servidor ya que una misma imagen tendrá el mismo nombre en ambos sitios. En el caso de la anotación, ésta es una cadena de carácteres con la informacion necesaria para el archivo xml, cada campo está separado por un delimitador. Como información complementaria también se envia la localización donde se ha tomado la imagen, si el usuario ha dado su consentimiento. Al igual que la mayorı́a de información enviada, la localización también es una cadena de carácteres. Los nombres utilizados para cada una de la información son: imagefile para la imagen, annotation para la anotación y location para la localización. La respuesta del servidor al envio de esta información tiene la misma estructura que las Dolores Blanco 17 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone situaciones anteriores. El comportamiento en este caso se resume en la tabla 3.3. Dı́gito Descripción Acción de la aplicación 0 Nombre del archivo Envı́a la siguiente foto o desaparece la vista del progreso 1 Unknown error Envı́a la siguiente foto y aumenta el contador de fotos con error o muestra una alerta si no hay más fotos que enviar. Cuadro 3.3: Envı́o de imagen y anotación: respuesta del servidor y acción de la aplicación Desde la galerı́a se puede enviar más de una imagen, el envı́o conjunto se hace secuencialmente. Cuando se recibe la respuesta del servidor, tanto si se ha enviado correctamente o no, se pasa al siguiente envio. La aplicación va contando todas las imágenes que no se han podido enviar, y en el caso de que el valor sea mayor que cero envia una alerta al usuario informando del número de imágenes que han tenido un error en el envio. Actualización de la anotación Cuando se actualiza una anotación el comportamiento de la aplicación es muy parecido a cuando se envia la imagen por primera vez salvo que ahora sólo se envia la parte de la anotación, ya que la imagen ya está en el servidor. Por lo tanto, el método POST tendrá para este caso el dos nombres: annotation para la cadena de carácteres con la anotación y filename, otra cadena de carácteres con el nombre de la imagen, de esta manera el servidor sabe de que imagen se trata. Igual que en todos los envios de información anteriores el servidor responde con la misma estructura, en este caso muy similar a la del envı́o de la imagen pero solo añadiendo el caso en que el servidor no encuentre la imagen. En este caso envia un mensaje determinado a la aplicación y ésta vuelve a enviar la imagen y la anotacion de la misma manera que si lo hiciese por primera vez. En la tabla 3.4 está especificado este comportamiento. Foto de perfil En el servidor también se almacena la foto de perfil, la razón para ello es poder recuperarla si te conectas desde otro dispositivo además que en un futuro también aparezca en LabelMe Web. Por ello, cada vez que se cambia la foto de perfil la aplicación se conecta al servidor y se la envia. Además de enviarse la imagen también se envia el nombre de usuario y contraseña Dolores Blanco 18 3.2. ASPECTOS TÉCNICOS Detección de objetos y anotación de imágenes en el iPhone Dı́gito Descripción Acción de la aplicación 0 Nombre del archivo Envı́a la siguiente foto o desaparece la vista del progreso 1 Unknown error Envı́a la siguiente foto y aumenta el contador de fotos con error o muestra una alerta si no hay más fotos que enviar. 2 This image is not on the server Vuelve a enviar la imagen como si fuese la primera vez que la envı́a Cuadro 3.4: Actualización de la anotación: respuesta del servidor y acción de la aplicación ya que puede darse el caso que se haya entrado a la aplicación automáticamente y no hubiese conexión en ese momento, de esta manera la acción se relaizará correctamente. Por lo tanto, en este caso el método POST tendrá cuatro campos: la imagen con el nombre image en el que está especificado su nombre, el nombre de usuario y la contraseña con los nombres username y password respectivamente. Cuando el servidor recibe la imagen la guarda en la carpeta principal del usario y si ya existia una, la reemplaza por la nueva. También existe el caso en que se descargue la imagen guardada en el servidor, esto pasa en el momento que se inicia sesión cuando la aplicación comprueba si existe una foto de perfil anterior. La foto de perfil siempre tiene el mismo nombre: profilepicture.jpg, por lo que si no hay ningún archivo con ese nombre en la carpeta del usuario la aplicación envia una petición al servidor. Esta petición es la única que no es un POST, únicamente lo que hace es que el servidor ejecute el script espedificado. En este caso el script lo que hace es enviar la imagen de perfil y si no hay ningun archivo con ese nombre responde con un 1. Por lo tanto, la aplicación cuando recibe la información y ésta ocupa más de 1 byte guarda esta información como imagen y en caso contrario no hace nada. Dolores Blanco 19 Detección de objetos y anotación de imágenes en el iPhone Capı́tulo 4 Detector de objetos en iOS Como se explica en el capı́tulo 2 un sistema de reconocimiento de objetos tiene que tener tres partes: la parte en que se captura la imagen, la que calcula el descriptor de ésta y la que la compara con un modelo existente. En este capı́tulo se explica el funcionamiento del detector de objetos diseñado para dispositivos iOS. Dado que los recursos que tiene un dispositivo móvil son bastante más limitados que los de un ordenador normal, la versión del detector desarrollada hasta el momento es una versión sencilla basada en los ya existentes. 4.1. Captura de la imagen El detector puede funcionar tanto para utilizarlo con imágenes en tiempo real, capturando video, como con imágenes almacenadas en el dispositivo. La única diferencia que existe entre las imágenes es la resolución que es más baja cuando capturas video que cuando tomas una foto. Esta diferencia no es muy importante ya que antes de calcular los descriptores se disminuye el tamaño de la imagen. Esto se hace porque el tiempo de cálculo es cuadráticamente proporcional a la resolución. Esto hace que se tenga que utilizar una resolución mucho más baja de la máxima de la cámara del dispositivo para que el tiempo sea considerable. En la tabla 4.1 se pueden ver las especificaciones referentes a las cámaras para todos los dispositivos compatibles con la aplicación del detector. Para este proyecto hemos utilizado los dispositivos iPhone 4S, iPhone5 y iPad Retina. Dolores Blanco 20 4.2. CÁLCULO DE LOS DESCRIPTORES: Detección HOG de objetos y anotación de imágenes en el iPhone Cámara Trasera Cámara Frontal Grabación de Vı́deo iPhone 5 8 MP 1.2 MP 1080p y 30fps iPhone 4S 8 MP 1.2 MP 1080p y 30fps iPhone 4 5 MP VGA 720p y 30fps iPhone 3GS 3 MP VGA VGA y 30fps iPod Touch 5th 5 MP 1.2 MP 1080p y 30fps iPod Touch 4th 960x720 VGA 720p y 30fps iPad Retina 5 MP 1.2 MP 7200p y 30fps iPad Mini 5 MP 1.2 MP 7200p y 30fps iPad 2 960x720 VGA 720p y 30fps Cuadro 4.1: Especificaciones para todos los modelos de dispositivos compatibles con el detector 4.2. Cálculo de los descriptores: HOG Después de reducir el tamaño de la imagen se calculan los descriptores HOG, siguiendo el esquema de la figura 4.1 que es el procedimiento que se ha resumido en la sección 2.1. El código utilizado para calcularlos es una adaptación del de Pedro Felzenszwalb [2] para que funcione correctamente con Objective - C. El código original está escrito con el lenguaje C++ y utiliza un complemento para poderlo utilizar con MATLAB. Todo lo referente a funciones de MATLAB es lo que cambiamos por las funciones equivalentes en lenguaje C. Una de las cosas a tener en cuenta para que funcione correctamente es la manera en la que se almacenan los pı́xeles de las imágenes en memoria, es decir, si en direcciones consecutivas de memoria hay pı́xeles de la misma columna o fila. En el código original las imágenes se almacenan por columnas, pero en el caso de los dispositivos con iOS hay que tener en cuenta la orientacion del dispositivo con la que se ha tomado la imagen ya que los pı́xeles siempre se almacenan de la misma manera respecto a la pantalla del dispositivo, tal y como muestra la figura 4.2. En este caso los descriptores utilizan celdas de 8 pı́xels por lo que los descriptores resultantes tendrán como dimensiones: (| w h | − 2, | | − 2, 32) sbin sbin donde w y h son el ancho y el alto de la imagen en pı́xels respectivamente y sbin el tamaño de las celdas. Una funcionalidad desarrollada a parte del detector es la visualización de la representación de estos descriptores. Tal y como se puede ver en la figura 4.3, con solo apretar a un botón en la barra de herramientas de la aplicación se puede visualizar dicha representación. Dolores Blanco 21 4.3. MODELO Detección de objetos y anotación de imágenes en el iPhone Figura 4.1: Cálculo descriptores HOG de [2] Esta funcionalidad no añade ninguna mejora al funcionamiento de detector, más bien todo lo contrario. Habilitar la visualización del HOG para el caso de la detección de video en tiempo real supone un cierto retraso respecto no realizarla. Aunque haga que el detector sea más lento porque hay que generar la representación. Poder visualizar el HOG es útil porque facilita al usuario comprobar si se está calculando correctamente. 4.3. Modelo Para determinar si el objeto escogido está en la escena hay que tener un modelo de este objeto con el que comparar los descriptores. Hay distintas maneras de obtener estos modelos, por ejemplo, se podrı́a utilizar los descriptores HOG de una imagen del objeto en cuestión. El problema de un modelo tan sencillo es que las imágenes pueden contener objetos que varien liegramente de forma y/o orientación lo que puede hacer que se reduzcan las posibilidades de detectar correctamente. Por este motivo la gran mayorı́a modelos se consiguen a partir de un entrenamiento mediante Machine Learning utilizando imágenes en la que aparece el objeto no necesariamente en el mismo ángulo y otras imágenes donde el objeto no aparece. Igual que el código para obtener los descriptores HOG los modelos utilizados también se han obtenido de Pedro Felzenszwalb [2], aunque este modelo es un modelo con partes sólo hemos utilizado el nivel que contiene todo el objeto. Se ha escogido solo este nivel del modelo en lugar de todo el modelo con partes para ganar en velocidad a la hora de obtener el resultado. Dolores Blanco 22 4.4. CORRELACIÓN Detección de objetos y anotación de imágenes en el iPhone Figura 4.2: Orden de almacenamiento de pı́xels según la orientación de la imagen. 4.4. Correlación Una vez tienes los descriptores HOG de la imagen o trama de video y el modelo se deben comparar. La manera de hacerlo es calculando la correlación entre ambos. La manera de hacerla es como se harı́a para dos imágenes, tal y como muestra la fórmula 4.1 pero para todas las dimensiones, es decir, para este caso como muestra la fórmula 4.2. Rxy = ∑ ∑ x[m0 , n0 ]y[m + m0 , n + n0 ] (4.1) ∑ ∑0 ∑0 x[m0, n0, d]y[m + m0, n + n0, d] (4.2) m0 n 0 d m n Para determinar si un objeto está o no en la imagen el resultado de la correlación debe ser mayor a b que es un parámetro que resulta del entrenamiento del modelo. Si se da esta condición significará que si aparece este objeto y los pı́xels correspondientes al objeto corresponderán . Un problema común es que si un objeto aparece en la imagen el resultado de la correlación puede dar afirmativo en diferentes zonas de la imagen y éstas se superponen. Para solucionarlo se utiliza el algortimo Non-maximum suppression que consiste en ordenar de mayor a menor todas las detecciones obtenidas mediante la correlación e ir comprobando si las regiones de éstas se superponen. En el caso que se superpongan se deberá fijar cuanto es lo máximo que se Dolores Blanco 23 4.5. PIRÁMIDE Detección de objetos y anotación de imágenes en el iPhone Figura 4.3: Representación HOG para distintas imágenes. permite y si no excede esa porción se dará por buena la detección. En la figura 4.4 podemos ver un ejemplo con diferentes usos de este algoritmo. 4.5. Pirámide El tamaño del objeto en una imagen es una cosa que se desconoce es por este motivo se realiza un escalado de la imagen. Este escalado se denomina pirámide y consiste en ir reduciendo la imagen original a imágenes más pequeñas. Con cada una de estas imágenes se realiza el proceso explicado anteriormente, por lo que con esto se consigue poder detectar el objeto con tamaños más grandes. i El factor que se reduce cada vez es 2 n siendo i el nivel en el que se está de la pirámide y − n el número de niveles. La imagen original corresponderı́a al nivel 0 y ası́ hasta un total de n. Puede pasar que se reduzca tanto la imagen que el modelo sea mayor que ésta, si esto ocurre se Dolores Blanco 24 4.6. RESULTADOS Detección de objetos y anotación de imágenes en el iPhone Figura 4.4: Ejemplos del uso del algoritmo nms para distintas áreas de solapamiento con imágenes de [5]. deja de reducir la imagen. 4.6. Resultados Para que funcione correctamente un detector es muy importante el tiempo que tarde en ejecutarse. En la figura 4.6 aparece el tiempo que se tarda para el cálculo de los descriptores HOG (a), para la correlación (b) y el tiempo total (c). Esta aplicación se ha probado para iPhone 4S y para iPhone 5, los tiempos de la figura 4.6 corresponde para el iPhone 5. Para iPhone 4S los tiempos son aproximadamente el doble. Las caracterı́sticas del detector son: Tamaño de la celda : 8 pı́xels. Dolores Blanco 25 4.7. FUTURO Detección de objetos y anotación de imágenes en el iPhone Figura 4.5: Pirámide de una imágen. Tamaño máximo de una imagen: 2448x3264 pı́xels. Niveles pirámide: 10. Tamaño del modelo: 11x7 bloques. Es importante ver que los tiempos son suficientemente bajos para que el detector pueda funcionar bien en tiempo real. 4.7. Futuro El detector implementado sólo es una parte de una aplicación que se sigue desarrollando. Esta aplicación tiene como objetivo poder entrenar tus propios detectores y estarı́a relacionada con la de LabelMe 3 compartiendo los usuarios, imágenes y anotaciones. De esta manera los usuarios podrı́an utilizar las imágenes anotadas mediante LabelMe para crear detectores. El usuario podrı́a escoger un objeto y entrenar el detector en el servidor ya que hacerlo en el iPhone supondrı́a mucho más tiempo y consumo de recursos. Una vez se haya entrenado el detector y estén listos los parámetros, éstos se enviarán al dispositivo y ası́ se podrá comprobar el resultado. Una opción que está pensada añadir es configurar un comportamiento para cuando se detecte el objeto, como tomar un a imagen de ese momento o enviar un email. Dolores Blanco 26 Detección de objetos y anotación de imágenes en el iPhone 8 4 7 3.5 6 3 5 2.5 Time (s) Time (s) 4.7. FUTURO 4 3 2 1.5 2 1 1 0.5 0 10 20 30 40 50 60 70 Image resolution (%) 80 90 0 10 100 (a) Tiempo cálculo de los descriptores HOG 20 30 40 50 60 70 Image resolution (%) 80 90 100 (b) Tiempo cálculo correlación 80 70 60 Time (s) 50 40 30 20 10 0 10 20 30 40 50 60 70 Image resolution (%) 80 90 100 (c) Tiempo total de detección Figura 4.6: Tiempos para iPhone5. Dolores Blanco 27 Detección de objetos y anotación de imágenes en el iPhone Capı́tulo 5 Conclusiones La aplicación de LabelMe para dispositivos móviles en este momento lleva dos meses en la AppStore de Apple y cuenta con más de 200 descargas. Todavı́a es pronto para saber su aceptación por parte de los investigadores de Computer Vision pero creemos que se ha cumplido el objetivo principal que era facilitar la recolección de anotaciones en imágenes de manera sencilla para el usuario. De cara al futuro serı́a útil incorporar nuevas funcionalidades a la aplicación de LabelMe. Algunos ejemplos de estas nuevas funcionalidades son: añadir la opción de crear nuevas colecciones dentro de la colección de la aplicación o que la comunicación entre el servidor y la aplicación sea bidireccional, es decir, que modifiques donde modifiques las anotaciones se sincronice en los dos extremos. Por la parte del detector en dispositivos móviles tras hacer esta primera aproximación hemos comprobado que el detector desarrollado puede funcionar correctamente a tiempo real en estos dispositivos. Este detector ha sido una primera aproximación, por lo que todavı́a tiene margen de mejora. Además los componentes de este tipo de dispositivos evolucionan constantemente mejorando sus prestaciones, por ejemplo, la velocidad del procesador del iPhone 5 es el doble respecto a la del iPhone 4S. Esto supone que cada vez se puedan utilizar detectores más complejos y con ello mejorar su comportamiento hasta el punto que estos dispositivos se conviertan en la nueva herramienta para los investigadores. Dolores Blanco 28 BIBLIOGRAFÍA Detección de objetos y anotación de imágenes en el iPhone Bibliografı́a [1] N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. In Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, volume 1, pages 886 –893 vol. 1, june 2005. [2] P.F. Felzenszwalb, R.B. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part-based models. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 32(9):1627 –1645, sept. 2010. [3] A. Torralba, B.C. Russell, and J. Yuen. Labelme: Online image annotation and applications. Proceedings of the IEEE, 98(8):1467 –1484, aug. 2010. [4] K. Murphy W. T. Freeman B. Russell, A. Torralba. Labelme: a database and web-based tool for image annotation. International Journal of Computer Vision, 2007. [5] M. Everingham, L. Van Gool, C. K. I. Williams, J. Winn, and A. Zisserman. The PASCAL Visual Object Classes Challenge 2007 (VOC2007) Results. http://www.pascal- network.org/challenges/VOC/voc2007/workshop/index.html. Dolores Blanco 29