scieee AI-readable full text Open interactive document viewer

Repositorio Institucional de Documentos

Abstract

En los últimos años, ha habido una gran evolución en la forma de interactuar con el entorno doméstico, pudiendo controlar muchos aspectos de una casa de una forma remota: control de la iluminación, del aire acondicionado, de persianas,de alarmas, etc... Todo ello con la idea de facilitar la vida del usuario, adaptándose a sus necesidades. Por ello, se sigue investigando en nuevos sistemas en el ambiente doméstico que mejoren la comodidad del usuario. Una ubicación donde se están produciendo grandes avances son las cocinas,donde los electrodomésticos cumplen un papel muy importante en la vida diaria de las personas. Este proyecto se centra en la interacción del usuario con la placa de una cocina, y tiene como objetivo principal su manejo de una forma interactiva y remota, informando de los recipientes que se encuentran en la placa y los eventos que se producen.El sistema está basado en el uso de una cámara Microsoft Kinect, que está constituida por una cámara de visión convencional y un sensor de rango basado en infrarrojos que permite un conocimiento tridimensional del entorno. Utilizando ambos tipos de imágenes de forma simultánea, en este PFC se proponen procesos eficientes, robustos y completos capaces de capturar lo que ocurre en la cocina e informen al usuario para interactuar con ella. Estos datos obtenidos mediante visión por computador son comunicados a una aplicación en un dispositivo móvil Android. De esta forma, el usuario es informado de los recipientes que hay sobre la placa y los eventos que se producen en ella, además de información sobre sus áreas, tipo y altura, pudiendo controlar visualmente el estado de la cocina y comunicando la potencia a la que desea que se caliente cada uno de los recipientes. Sebastián Magallón, Marcos; Montijano Muñoz, Eduardo

Full text

Proyecto Final de Carrera Ingeniería de Telecomunicaciones Sistema interactivo para manejo de electrodomésticos en entornos domésticos Marcos Sebastián Magallón Diciembre de 2013 Director: Eduardo Montijano Ponente: Carlos Sagüés Departamento de Informática e Ingeniería de Sistemas Escuela de Ingeniería y Arquitectura Universidad de Zaragoza Resumen En los últimos años, ha habido una gran evolución en la forma de interactuar con el entorno doméstico, pudiendo controlar muchos aspectos de una casa de una forma remota: control de la iluminación, del aire acondicionado, de persianas, de alarmas, etc... Todo ello con la idea de facilitar la vida del usuario, adaptándose a sus necesidades. Por ello, se sigue investigando en nuevos sistemas en el ambiente doméstico que mejoren la comodidad del usuario. Una ubicación donde se están produciendo grandes avances son las cocinas, donde los electrodomésticos cumplen un papel muy importante en la vida diaria de las personas. Este proyecto se centra en la interacción del usuario con la placa de una cocina, y tiene como objetivo principal su manejo de una forma interactiva y remota, informando de los recipientes que se encuentran en la placa y los eventos que se producen. El sistema está basado en el uso de una cámara Microsoft Kinect, que está constituida por una cámara de visión convencional y un sensor de rango basado en infrarrojos que permite un conocimiento tridimensional del entorno. Utilizando ambos tipos de imágenes de forma simultánea, en este PFC se proponen procesos ecientes, robustos y completos capaces de capturar lo que ocurre en la cocina e informen al usuario para interactuar con ella. Estos datos obtenidos mediante visión por computador son comunicados a una aplicación en un dispositivo móvil Android. De esta forma, el usuario es informado de los recipientes que hay sobre la placa y los eventos que se producen en ella, además de información sobre sus áreas, tipo y altura, pudiendo controlar visualmente el estado de la cocina y comunicando la potencia a la que desea que se caliente cada uno de los recipientes. i ii Agradecimientos Quiero dedicar esta página a todas las personas que han estado ahí no sólo durante la realización de mi proyecto n de carrera, sino también a los que me han acompañado a lo largo de todos estos años de carrera que han supuesto una gran etapa en mi vida. En primer lugar, me gustaría agradecerle a D. Carlos Sagües la oportunidad de realizar este proyecto. Por saber relacionarme con la gente necesaria, por proporcionarme los materiales necesarios, por sus útiles consejos y su apoyo, gracias. También a mi director del proyecto, D. Eduardo Montijano, por todo su tiempo, su dedicación, sus consejos, por su inestimable ayuda siempre que la he necesitado y por haberme guiado de la mejor forma posible, por todo ello, gracias. Quisiera también dar las gracias a dos compañeros de mi laboratorio, Alejandro Yús y Sergio Ayuso, cuyas ayudas y consejos me impulsaron a seguir avanzando en el proyecto, siempre dispuestos y tratándome amablemente desde el primer momento. No me puedo olvidar de mis compañeros y amigos de todos estos años, especialmente a mi familia del Movi, por preocuparse por mí y sacarme una sonrisa siempre que era posible, y a los Packets, por estar siempre dispuestos a ayudarme y animarme en cualquier momento. Para terminar, y por encima de todo, quisiera agradecerselo a mi familia, especialmente a mis padres, por la gran dedicación y esfuerzo que han puesto en mi educación, y por permitirme estudiar esta carrera; a ellos les debo lo que soy. Y a Belén, por ser un apoyo incombustible y fundamental en mi vida. A todos ellos, gracias. iii iv Índice general Índice de guras xi Índice de tablas xi 1. Introducción 1 1.1. Antecedentes ............................. 1 1.2. Objetivosyalcance.......................... 3 1.3. Entornodetrabajo.......................... 3 1.4. Organización de la memoria . . . . . . . . . . . . . . . . . . . . . 4 2. Detección de recipientes 7 2.1. Ubicación de la cámara . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2. Segmentación de los recipientes . . . . . . . . . . . . . . . . . . . 8 2.2.1. Calibración de la imágenes RGB y de profundidad . . . . . 8 2.2.2. Detección automática de las esquinas de la placa . . . . . . 10 2.2.3. Obtención del plano supercie de la placa (plano de referencia)............................. 12 2.2.4. Resta de imagen de profundidad y plano de referencia . . . 12 2.3. Detección de contornos . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.1. Contorno de los recipientes . . . . . . . . . . . . . . . . . . 14 3. Ajuste de modelo y seguimiento de recipientes 15 3.1. Ajuste de modelo para los recipientes circulares . . . . . . . . . . 15 3.1.1. Altura del recipiente . . . . . . . . . . . . . . . . . . . . . 15 3.1.2. Base del recipiente . . . . . . . . . . . . . . . . . . . . . . 16 3.2. Seguimiento de los recipientes . . . . . . . . . . . . . . . . . . . . 17 3.3. Interfaz para usuario mediante la imagen RGB . . . . . . . . . . . 19 4. Aplicación móvil 21 4.1. Aplicación COCINA . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.1.1. Actividad principal . . . . . . . . . . . . . . . . . . . . . . 22 4.1.2. Actividad de los recipientes . . . . . . . . . . . . . . . . . 22 4.2. Comunicación PC-dispositivo . . . . . . . . . . . . . . . . . . . . 24 4.2.1. Protocolo de envío y recepción de datos . . . . . . . . . . . 24 4.2.2. Protocolo de actualización de potencias . . . . . . . . . . . 25 v ÍNDICE GENERAL 4.2.3. Protocolo de transmisión y sincronización de la imagen . . 26 5. Conclusiones y futuras líneas de trabajo 29 5.1. Conclusiones y valoración del trabajo realizado . . . . . . . . . . . 29 5.2. Futuras líneas de trabajo . . . . . . . . . . . . . . . . . . . . . . . 30 Bibliografía 32 A. La cámara Microsoft Kinect 33 A.1. Especicaciones técnicas . . . . . . . . . . . . . . . . . . . . . . . 33 A.2. Funcionamiento del sensor de profundidad . . . . . . . . . . . . . 39 A.3. Conectividad de la cámara con el ordenador . . . . . . . . . . . . 45 A.4. Imágenes RGB y de profundidad . . . . . . . . . . . . . . . . . . 45 A.4.1. Obtención de las imágenes RGB y de profundidad . . . . . 46 B. Cálculo analítico del plano de referencia 49 C. Cálculo de homografías 51 C.1. Concepto de homografía . . . . . . . . . . . . . . . . . . . . . . . 51 C.2.Procedimiento............................. 52 D. Android 55 D.1.¾QuéesAndroid?........................... 55 D.1.1.Historia ............................ 56 D.1.2. Arquitectura Android . . . . . . . . . . . . . . . . . . . . . 57 D.1.3. Características . . . . . . . . . . . . . . . . . . . . . . . . 58 E. ROS 61 F. Transmisión de datos y protocolos de comunicación 65 F.1. Método de transmisión de datos: Sockets . . . . . . . . . . . . . . 65 F.2. Protocolos de comunicación . . . . . . . . . . . . . . . . . . . . . 66 F.3. Comunicación: Servidor . . . . . . . . . . . . . . . . . . . . . . . . 68 F.3.1. Abrirsocket.......................... 68 F.3.2. Asociar el socket con un puerto . . . . . . . . . . . . . . . 68 F.3.3. Recibir mensaje en el servidor . . . . . . . . . . . . . . . . 69 F.3.4. Respuesta al cliente . . . . . . . . . . . . . . . . . . . . . . 70 F.4. Comunicación: Cliente . . . . . . . . . . . . . . . . . . . . . . . . 70 F.4.1. Creación socket . . . . . . . . . . . . . . . . . . . . . . . . 70 F.4.2. Creación paquete . . . . . . . . . . . . . . . . . . . . . . . 71 F.4.3. Enviar paquete . . . . . . . . . . . . . . . . . . . . . . . . 71 F.4.4. Recibir paquete . . . . . . . . . . . . . . . . . . . . . . . . 71 vi ÍNDICE GENERAL G. Métodos de detección 73 G.1.MétododeRoberts.......................... 73 G.2.MétododeSobel ........................... 74 G.3.MétododePrewitt .......................... 74 G.4.MétododeCanny........................... 75 vii CAPÍTULO 1. INTRODUCCIÓN a esta nueva tecnología y evolucionan, de tal manera que podemos comunicarnos con nuestros electrodomésticos, y mantener un control sobre ellos. Este proyecto se centra concretamente en el control de una placa de cocina, permitiendo al usuario conocer lo que ocurre sobre la misma en todo momento aunque se encuentre en otra ubicación de la casa. La principal razón es la mayor comodidad para el usuario: poder tener control sobre la cocina mientras aprovecha el tiempo en otras tareas, o simplemente poder controlarla mientras disfruta de un rato de tiempo libre en el sofá. Pero a nivel económico, también reporta ventajas: poder tener un dispositivo para manejar los fuegos fuera de la propia placa supone un ahorro notable en el aislamiento térmico que supone incorporar un mando en la misma, además de ahorrar en el hardware. En el desarrollo del mismo, intervienen dos factores: la detección de recipientes y la interacción con el usuario. Para llevar a cabo la detección, utilizamos visión por computador, un campo de la informática que permite extraer información de alto nivel a partir de las imágenes que son captadas por una cámara o un sensor. Entre los objetivos habituales de la visión por computador, se encuentran: la detección, segmentación, localización o seguimiento de ciertos objetos en las imágenes, registro de una escena de forma tridimensional, etc... Esto resulta útil para numerosas aplicaciones, como puede ser la restauración de imágenes, el reconocimiento de ciertos cuerpos u objetos o para analizar características de una escena. En el proyecto se utiliza una cámara Microsoft Kinect(Figura 1.2a), que salió al mercado en otoño de 2010. En un principio, ésta tenía nes de entretenimiento. Sin embargo, debido a su potencial, en la actualidad este sensor tiene otros nes, como diversos usos médicos o reconstruir mapas en relieve para el análisis de diversos entornos. Una de las principales utilidades de las cámaras RGB-D como Kinect es la interacción máquina-usuario, permitiendo por ejemplo, controlar ordenadores y otros aparatos con las manos, o informar a las personas de eventos que ocurren a su alrededor. Todo ello de una forma barata y más sencilla de lo que hasta antes de su aparición se había podido hacer. (a) (b) Figura 1.2: Microsoft Kinect (a) y un ejemplo de imagen tridimensional captada por ella (b) Para la interacción con el usuario, se crea una aplicación móvil. En los últimos años, el sistema operativo Android ha tenido un crecimiento exponencial en el uso de forma global, siendo hoy por hoy el sistema para smartphones más utilizado. 2 1.2. OBJETIVOS Y ALCANCE A la hora de realizar una aplicación dentro de este entorno, los usuarios ya van a tener un medio físico donde poder instalarla. Todos saben manejarse en este entorno, descargando aplicaciones, usándolas, y realizando otras tareas gracias a las posibilidades que este sistema operativo ofrece. Además, se trata de un sistema operativo libre. De esta manera, cualquier desarrollador que quiera llevar a cabo una aplicación, puede hacerlo, además de poder subir la aplicación al mercado. La realización de este proyecto resulta de interés tanto para BSH Electrodomésticos España como para la Universidad de Zaragoza. A grupo BSH Electrodomésticos España le permite investigar otras formas en el control de electrodomésticos, concretamente en una cocina, ofreciendo al usuario una forma de cocinar más fácil y cómoda, con una tecnología que está en auge. A la Universidad de Zaragoza le permite abrir nuevas líneas de investigación sobre el uso de sensores RGB-D en el marco de un intercambio de conocimiento con la empresa privada. 1.2. Objetivos y alcance El objetivo principal del proyecto es conseguir una correcta caracterización de los recipientes y los movimientos que se producen en la placa mediante la visión articial. Se quiere construir un sistema capaz de detectar los recipientes que están situados en la placa, y hacer un seguimiento y una correcta caracterización de los mismos con la mayor precisión posible. El otro gran objetivo consiste en enviar al usuario esta información a un dispositivo móvil remoto, de tal manera que pueda saber lo que pasa en la cocina sin estar presente en ella, pudiendo tener el control sobre la misma. Para ello, se propone crear una aplicación con la que controlar la cocina, viendo imágenes de la misma cuando el usuario lo desee, y controlando la potencia de los recipientes desde esta aplicación. Los objetivos concretos son: Implemantación y puesta a punto de algoritmos de visión para detección de recipientes. Implementación de algoritmos para el seguimiento e identicación de los mismos Desarrollo de una interfaz sobre un dispositivo móvil para la interacción remota con los recipientes. 1.3. Entorno de trabajo La visión por computador se realiza con una cámara Microsoft Kinect. Esta cámara captura dos tipos de imágenes simultáneas: por un lado, una imagen RGB como las cámaras convencionales, y por otro lado, tiene un sensor de infrarrojos que permite obtener una imagen de profundidad(Figura 1.2b). Esto supone una gran ventaja, ya que permite crear algoritmos mucho más robustos, ecientes y 3 CAPÍTULO 1. INTRODUCCIÓN complejos que si se utilizara sólo la imagen RGB o la imagen de profundidad por separado. En otros proyectos, se utiliza sólo imagen de profundidad [1] o imagen RGB [2]. Con la imagen de profundidad sólo tenemos datos de distancia, no de color, ni una imagen cercana a la real. Y viceversa, con la imagen convencional no tenemos información de distancia, sólo tenemos la información del color. Por lo tanto, en nuestro caso, al utilizar dos imágenes, tenemos más información. Para todo el trabajo con las imágenes, se utiliza la librería OpenCV (Open Computer Vision) [7], que contiene más de 500 funciones, que abarcan una gran gama de áreas en el proceso de visión, como reconocimiento de objetos, calibración de cámaras, visión estérea y visión robótica. Para el empleo de todas estas funciones, ha resultado de gran ayuda el libro Learning OpenCV [26]. Para la toma de imágenes se ha decidido utilizar ROS [3] con el sistema operativo Ubuntu [5], ya que nos permite tomar los dos tipos de imágenes de una forma simultánea y tratarlas en tiempo real. ROS (Robot Operating System) proporciona librerías y herramientas para que los desarrolladores puedan crear aplicaciones robóticas. En este caso, vamos a utilizar sólo la parte robótica de visión, que es la que nos interesa para conseguir las imágenes de la cámara Kinect. Además, este tipo de librerías funcionan en Ubuntu , sistema operativo que se distribuye como software libre y gratuito. Los drivers empleados para el manejo de la cámara son los de OPENNI [6]. Para realizar la interfaz y control de la placa, se ha optado por realizar una aplicación de Android. Una de las razones de que se haya escogido realizar una aplicación, es que a día de hoy la mayoría de personas tiene un dispositivo móvil de android, ya sea un teléfono móvil o una tablet. Otra de las razones por las que se escoge Android es que es software libre. En el apéndice D se profundiza más en su historia, características o arquitectura. Para desarrollar la aplicación se utiliza como soporte el programa informático ECLIPSE [28], compuesto por un conjunto de herramientas de programación de código abierto multiplataforma para desarrollar aplicaciones Java. Para desarrollar una aplicación de Android, se hace habitualmente con el lenguaje de programación Java y el conjunto de herramientas de desarrollo (SDK, Software Development Kit). Comprende un depurador de código, biblioteca, un simulador de teléfono, documentación, ejemplos de código y tutoriales. A la hora de empezar a hacer la aplicación, la página Android Developers [29] nos ofrece una amplia variedad de tutoriales para el desarrollo por cuenta propia del usuario. 1.4. Organización de la memoria El resto de la memoria se organiza de la siguiente manera: En el capítulo 2, se trata el tema de la segmentación y reconocimiento de los recipientes, los métodos y algoritmos que se han implementado para analizar su ubicación y dimensiones. Todo ello usando la cámara Microsoft Kinect 4 1.4. ORGANIZACIÓN DE LA MEMORIA El capítulo 3 se centra en ajustar la detección de contornos a un modelo más real, ajustando lo máximo posible los datos recibidos a la realidad, y posteriormente se realiza un seguimiento de los recipientes. También se genera una imagen RGB interfaz que sirve para ser enviada al dispositivo móvil, y que proporciona diversos datos al usuario. En el capítulo 4 se explica la aplicación móvil construida para el control de la placa. Por un lado, la interfaz construida en la aplicación, mostrando las distintas actividades que la componen y las posibilidades que ofrece. Por otro, nos adentramos en la comunicación bidireccional que se da entre el PC, que actua de servidor, y el dispositivo móvil, que actua de cliente. Se profundiza en el método de envío de datos, el protocolo que se utiliza y se explica con detalle cómo se realiza la comunicación entre ambos. Para nalizar, en el capítulo 5 se comentan las conclusiones nales tanto a nivel de proyecto como a nivel personal, además de las futuras líneas de trabajo que podrían surgir a partir de este proyecto n de carrera. 5 CAPÍTULO 1. INTRODUCCIÓN 6 Capítulo 2 Detección de recipientes Este capítulo se centra en uno de los pilares del proyecto: la detección de los recipientes. En él se explica la base teórica para la obtención de información y ubicación de los recipientes, hallando qué hay encima de la placa y qué características tiene. Para empezar a trabajar partimos de las imágenes de RGB y profundidad (en el apéndice A.4 se explica su obtención). A raíz de ellas, vemos la segmentación de recipientes (sección 2.2), que explica como aislar esos recipientes en la imagen. Posteriormente, realizamos la detección de contornos (sección 2.3), que nos permite saber dónde se encuentran los recipientes. 2.1. Ubicación de la cámara Figura 2.1: Posición en la que se coloca la cámara en un extremo del eje menor Al comienzo del proyecto, hay que tener en cuenta el posicionamiento de la cámara. Tiene que permitir una correcta ejecución del sistema, por lo que tiene que ser funcional. Por otro lado, tiene que ser un posicionamiento viable, tanto en el lugar donde se está desarrollando el proyecto como pensando en su 7 CAPÍTULO 2. DETECCIÓN DE RECIPIENTES posterior comercialización. Lo ideal sería colocar la cámara a una altura óptima de 0.8 metros sobre el cruce del eje mayor y el eje menor de la placa. Esto permitiría ver los recipientes de la forma más correcta posible, ver su fondo y su contenido de forma adecuada. Sin embargo, desde un punto de vista real esto no es viable, ya que los humos y vapores procedentes de la cocina ensuciarían la cámara e impediría una visualización correcta de los recipientes. Por ello se opta por desplazar la cámara hasta el extremo de uno de los ejes menores de la placa. En el laboratorio, la cámara se ha colocado en un trípode, tal y como se ve en la Figura 2.1, colocado en un extremo del eje menor. Pensando de una manera más comercial, la mejor colocación de la cámara sería en la campana extractora, en el extremo más cercano a la pared. 2.2. Segmentación de los recipientes El objetivo de la segmentación de recipientes [17] consiste en distinguir si un píxel pertenece a nuestro objeto de interés, descartando de alguna manera aquellos que no pertenezcan (Figura 2.2). Figura 2.2: Ejemplo de segmentación de recipientes en una imagen El proceso se divide en varias partes. La primera de ellas es la ubicación de la placa en la imagen. Esto se hace de una forma automática mediante un ltrado de color. Esta es una fase de calibración, que se realiza solo una vez cuando se inicialice el programa, capta las cuatro esquinas de la placa y la ubica dentro de la imagen que vayamos a utilizar. Una vez obtenidos los cuatro puntos de la placa, entonces podemos pasar a calcular el plano que forma en la imagen de profundidad. Por último, cuando tengamos ese plano de referencia, podemos detectar los recipientes para trabajar sobre ellos. 2.2.1. Calibración de la imágenes RGB y de profundidad Como se ha comentado antes, la cámara Microsoft Kinect nos permite capturar dos tipos de imágenes: la imagen RGB y la imagen de profundidad. Aunque estos dos tipos de imágenes se toman de manera simultánea, no se corresponden exáctamente punto por punto, ya que sicamente la cámara IR y RGB están separadas unos centímetros (Figura 2.3). Por ello, se trata la imagen de profundidad 8 2.2. SEGMENTACIÓN DE LOS RECIPIENTES con una homografía para buscar la correspondencia, consiguiendo la misma visión que tendríamos desde la imagen convencional pero transformada a una imagen de profundidad. Figura 2.3: Separación entre la cámara IR y la RGB en Kinect La homografía es una transformación proyectiva que determina una correspondencia entre dos guras geométricas planas, de tal forma que a cada uno de los puntos y rectas de una de ellas, le corresponden un punto y una recta de la otra, respectivamente. Dicho de otra forma, si tres puntos de un plano están contenidos en una línea, lo seguirán estando en el plano transformado. Por lo tanto, una homografía conserva la naturaleza de los elementos transformados. Viene denida por la ecuación x0 i=Hxi , donde x0 i e xi son las coordenadas en píxeles en las dos imágenes correspondientes a la proyección de un mismo punto 3D de la escena. La idea de homografía se profundiza en el apéndice C. La calibración se realiza de forma manual, tomando cuatro coordenadas de la imagen de profundidad, que se corresponden visualmente con otras cuatro coordenadas de la imagen RGB, tal como se muestra en la Figura 2.4, donde se han tomado como referencia las esquinas de la placa. Esta calibración se realiza una sola vez al principio del proyecto, permitiendo obtener una correspondencia entre las dos imágenes aunque la visión de la placa sea oblicua. Figura 2.4: Puntos que se corresponden en imagen de profundidad e imagen RGB La propia librería de OpenCV posee las funciones necesarias para hacer la homografía de una forma más rápida, ecaz y robusta. El resultado ya mencionado, es la imagen de profundidad vista con la misma perspectiva que la imagen convencional (Figura 2.5). 9 CAPÍTULO 2. DETECCIÓN DE RECIPIENTES (a) (b) Figura 2.5: (a) Imagen RGB (b) Imagen de profundidad con la misma perspectiva que la imagen RGB gracias a la homografía También se podría utilizar la homografía para conseguir una visualización más cercana a la real de los recipientes y sus bases, debido a que esto no es posible por la ubicación de la cámara. Al no colocar la cámara en el cruce del eje mayor y el eje menor, ni los recipientes ni la placa se observan de una forma correcta: los recipientes se ven elípticos y no circulares, y la placa se visualiza con una forma trapezoidal (Figura 2.6a), y no rectangular. Si conseguimos hacer una homografía de la imagen, aunque no tengamos la cámara colocada en el cruce de los ejes mayor y menor de la placa, podemos conseguir una versión simulada de esa visión que deseamos tener (Figura 2.6b). (a) (b) Figura 2.6: (a) Visión de la placa antes de aplicar la matriz homográca (b) Visión de la placa transformada con la matriz homográca 2.2.2. Detección automática de las esquinas de la placa En este apartado lo que se busca es situar la placa dentro de la imagen, conociendo cuáles son sus cuatro esquinas en la imagen RGB. Para ello, se puede hacer una calibración manual (haciendo click en las esquinas de la propia imagen). 10 2.2. SEGMENTACIÓN DE LOS RECIPIENTES Sin embargo, en busca de una automatización del proceso en vistas a una posible comercialización del producto, y favoreciendo una mayor comodidad y rapidez para el usuario,también se ha desarrollado una calibración automática. Para ello, marcamos las esquinas con círculos de un color característico, de tal forma que puedan ser reconocidos por la cámara RGB mediante un ltrado de color en la imagen. El método de ltrado utilizado acota los valores en cada uno de los canales (rojo, verde o azul), para quedarse sólo con el color deseado. Para analizar los valores a los que tenemos que acotar cada canal, realizamos la captura de varias imágenes con distinta luminosidad. La mayor problemática se basa en establecer estas cotas para cada color, ya que es importante tener una elevada tasa de aciertos. En este caso, el análisis de forma empírica de los valores a tomar ha dado como resultado: 50 <R <110 ; 170 <G <235 ; 140 <B <200 (a) (b) Figura 2.7: (a) Placa vista desde la cámara (b) Marcas después del proceso de ltrado. Una vez introducido el ltro de color, la imagen resultante son sólo los cuatro pequeños círculos que suponen las esquinas, como se puede apreciar en la Figura 2.7. También podemos observar pequeños píxeles fruto de la reexión en los bordes de la placa, que son descartados ltrando los blobs por tamaño. Una vez tenemos la imagen ltrada, calculamos las coordenadas de las cuatro esquinas utilizando la detección de contornos (sección 2.3) que ofrece OpenCV. Como resultado de todo el proceso, tenemos perfectamente situada la placa en el entorno de la imagen. El algoritmo es capaz de ubicarla siempre que esté situada dentro del campo de visión de la cámara, como podemos observar en la Figura 2.8. Esta idea de marcar las esquinas para poder realizar la calibración, es una idea pensada con los medios de los que se dispone en el laboratorio. Sin embargo, de cara a la comercialización del producto, la idea es incorporar en las esquinas de las placas unos LEDs que se encendieran sólo el tiempo suciente para ser captadas y realizar la captura de estos puntos. Una vez han sido calculados estos puntos, ya no se necesita volver a hallar su posición, por lo que estos LEDs ya no volverían a encenderse en todo el proceso hasta que se volviera a reiniciar. 11 CAPÍTULO 3. AJUSTE DE MODELO Y SEGUIMIENTO DE RECIPIENTES También, es probable que los recipientes no se muevan todos a la vez, sino que se mueva uno, y después otro. Se pueden dar diversos casos. El caso trivial se da cuando la placa está vacía. El programa entonces no encuentra ningún recipiente, por lo que no tiene ningún radio ni centro que encontrar. Otro caso se da cuando se coloca un recipiente sobre la placa, encontrándolo e identicándolo con un radio y un centro. Es importante tener en cuenta que si el usuario decide mover ese recipiente, cambiándolo de sitio, debe ser identicado como el mismo. En la siguiente iteración, se busca el centro y el radio del recipiente. Si el recipiente se ha movido, el programa analiza si el nuevo centro está dentro del radio de la iteración anterior. Si esto se cumple, lo identica como el mismo recipiente, almacenando el nuevo radio y el nuevo centro para poder realizar la comparación con la siguiente imagen que va a llegar. En una situación real, el recipiente no va a ser movido de una forma brusca, ya que hay contenido en su interior. A raíz de esta conclusión, es posible llevar a cabo el método anteriormente mencionado. Un busca de una mayor robustez del proceso, también se tiene en cuenta la altura del recipiente cuyo centro se encontraba dentro de ese radio. Si tiene la misma altura, dentro de una pequeña cota de error, se identica como el mismo recipiente. El resultado de su seguimiento se observa en la Figura 3.4. Figura 3.4: Seguimiento de una sartén sobre la placa Cuando hay un recipiente y se introduce alguno más (Figura 3.5a), se da el caso de varios recipientes sobre la placa. Cada uno se identica con su radio y su centro, igual que en el caso de un solo recipiente. La problemática radica en que siempre se mantenga la misma identicación para los mismos recipientes, de tal manera que cuando se retire uno de la placa, los otros se sigan identicando como el mismo. Esto se consigue asociando un grupo de variables que contengan la información de la ubicación en un vector, una para cada recipiente. De esta forma, si un recipiente se quita, esa componente del vector queda libre para asociarse con cualquier otro recipiente que se decida introducir. Como se muestra en la 18 3.3. INTERFAZ PARA USUARIO MEDIANTE LA IMAGEN RGB Figura 3.5b, aunque se quite un recipiente, el otro se siguen identicando por el mismo color. (a) (b) Figura 3.5: (a) Imagen de dos recipientes detectados (b) Se sigue identicado el segundo recipiente como el mismo 3.3. Interfaz para usuario mediante la imagen RGB La creación de una imagen que sirva de interfaz para el usuario es necesaria para su control. En anteriores trabajos, donde sólo se podía utilizar la imagen de profundidad, no daba pie a crear esta interfaz, ya que visualmente no es intuitiva, ofrece menos información y visualmente no es del todo agradable. Uno de los objetivos de este proyecto es ofrecer información al usuario utilizando la imagen RGB para crear una interfaz, de tal forma que el usuario pueda ver todo lo que pasa en la cocina. Por ello, la imagen RGB que recibimos se modica en cada iteración para ofrecer cierta información al usuario de forma gráca: color del recipiente con el que es identicado, el tipo de recipiente, el área de la base y la altura del mismo. También podemos visualizar la potencia de cada uno de los recipientes, a medida que vayamos subiéndola o bajándola desde nuestro dispositivo móvil. Para conseguir este objetivo, OpenCV nos proporciona distintas herramientas con las que modicar esta imagen, dibujando formas, colores o pudiendo introducir texto. Gracias a ellas se dibujan circunferencias de diferentes colores sobre cada uno de los recipientes detectados, utilizando el radio estimado. Cada recipiente tendrá un color distinto que lo identique. El sistema es capaz de manejar un máximo de tres recipientes simultáneamente, que tendrán los colores verde, rojo y azul. El algoritmo utiliza el seguimiento para mantener el color de cada recipiente en diferentes iteraciones, y así identicarlos correctamente a la hora de controlarlos. Posteriormente, veremos que en la aplicación se nos permite elegir qué color de recipiente queremos manejar. La introducción de texto en la imagen nos sirve para mostrar información a 19 CAPÍTULO 3. AJUSTE DE MODELO Y SEGUIMIENTO DE RECIPIENTES Figura 3.6: Imagen RGB modicada para interfaz tiempo real de lo que ocurre en la placa. La información aportada mediante el texto es: De qué recipiente se trata y tipo Altura Base Potencia El color del texto se utiliza para identicar a qué recipiente se reere la información mostrada. Los datos de tipo de recipiente, base y altura, son colocados en la parte superior de la pantalla. En cambio, la potencia es colocada en el centro del recipiente. La imagen resultante se puede visualizar en la Figura 3.6. 20 Capítulo 4 Aplicación móvil En este capítulo, se describe la aplicación android que se lleva a cabo para realizar el control de la placa de cocina. Esta aplicación es la interfaz que tiene el usuario para interactuar con la cocina, por lo tanto, es importante que sea intuitiva, cómoda y fácil de usar. 4.1. Aplicación COCINA Una aplicación de Android se compone de un conjunto de actividades. Las actividades son el elemento principal que muestra información en la pantalla del dispositivo para que pueda ser vista por el usuario. Vienen a ser el equivalente a las ventanas de un sistema operativo de escritorio. Para conseguir darle el aspecto que deseamos a la aplicación, hay que organizar lo que vamos a ver en la pantalla dentro de la propia actividad. De todo ello se encarga el layout , que es el contenedor de la vista de la actividad. Los layout nos permiten posicionar cada objeto gráco en el lugar que queramos de la pantalla, diseñando el aspecto gráco que va a tener nuestra aplicación. Figura 4.1: Esquema explicativo de las actividades en la aplicación La aplicación para el control de la placa está divida en una actividad principal, donde podemos visualizar el estado de la cocina y actualizar imagen y potencias, y de tres actividades que derivan de ella, dependiendo del recipiente que se elija. En estas actividades podemos controlar la potencia del recipiente elegido, e incluso controlar el tiempo de lo que estamos cocinando. Se muestra un esquema en la Figura 4.1. 21 CAPÍTULO 4. APLICACIÓN MÓVIL 4.1.1. Actividad principal La actividad principal es sencilla y práctica. Cómo podemos ver en la Figura 4.2, a la parte derecha de la pantalla tenemos la imagen RGB del estado de la cocina, con la información de los recipientes. En la parte izquierda están los botones que nos permiten saltar a la actividad relacionada con cada recipiente. La aplicación asigna a cada botón el recipiente correspondiente de la imagen. También tiene un botón de actualización de la imagen: cada vez que se presiona, se visualiza una nueva, y se obtienen las nuevas potencias (por si alguna de ellas hubiera cambiado). De esta forma, el usuario sabe que botón pulsar para controlar el recipiente que él quiera: verde, rojo o azul. En la siguiente sección analizamos estas actividades de cada recipiente. También nos encontramos con el botón de actualizar: cada vez que lo presionemos, podemos visualizar una nueva imagen, y obtener las potencias (por si alguna de ellas hubiera cambiado). Figura 4.2: Actividad principal de la aplicación Android 4.1.2. Actividad de los recipientes Cuando el usuario se introduce en la actividad correspondiente al recipiente deseado, puede controlar la potencia del mismo y visualizar el tiempo que lleva el recipiente en la cocina. Pasamos a hacer una visión general del interfaz que proporciona cada una de estas actividades, mostrada en la Figura 4.3. Como se puede apreciar, en la parte superior de la misma se muestra la actividad en donde nos encontramos. Después, tenemos la parte donde controlar la potencia, con dos botones: uno con el signo + , para subir un número de potencia, y otro con el signo − para bajarla. El rango en el que se mueven las potencias es de 0 a 9. La potencia resultante se actualiza debajo de los dos botones, de tal manera que el usuario puede conocer la potencia asignada en cada momento. Para una mejor percepción por parte del usuario acerca del recipiente que está controlando, el término POTENCIA está escrito en el color del recipiente correspondiente. 22 4.1. APLICACIÓN COCINA (a) (b) Figura 4.3: (a) Actividad recipiente verde (b) Actividad recipiente rojo Junto a esta necesidad básica por parte de la aplicación de controlar la potencia, se ha implementado un temporizador como una idea surgida en el transcurso del proyecto. El usuario puede iniciarlo y pararlo en el momento que desee. De esta forma, se puede controlar el tiempo que un recipiente ha estado a una determinada potencia en la propia aplicación y para cada recipiente, ahorrando al usuario la molestia de tener que controlar el tiempo llevándolo por su cuenta, y por lo tanto, siendo más precisos en el tiempo de cocción. Una vez programada y cargada la aplicación en nuestro dispositivo móvil, nos aparece el icono y el nombre de la aplicación junto con otras que podamos tener instaladas ya. En este caso, la aplicación se llamará Cocina , y está representada por una imagen de una placa con recipientes encima de la misma, tal como se muestra en la Figura 4.4. Figura 4.4: Menú de Android donde se muestra el icono de la aplicación disponible 23 CAPÍTULO 4. APLICACIÓN MÓVIL 4.2. Comunicación PC-dispositivo Esta sección explica los protocolos de sincronización y comunicación entre la aplicación y el sistema de detección de recipientes de la cocina. La conexión inalámbrica que se hace entre el ordenador y el dispositivo es vía WI-FI. Para que dos programas se puedan comunicar entre sí, es necesario que un programa sea capaz de localizar al otro, y que además, ambos sean capaces de intercambiarse datos de forma que se entiendan. Para conseguir esta comunicación se utiliza un método que permite comunicar el lenguaje C++, que se utiliza en el ordenador, con una aplicación del sistema operativo Android,que se utiliza en el dispositivo móvil. Concretamente, se crea una comunicación servidor-cliente, donde el servidor es el ordenador (que tiene que enviar la imagen, y envíar y recibir los datos de potencia), y el cliente (que tiene que recibir la imagen y enviar y recibir los datos de potencia).Para ello se utilizan los sockets, una serie de funciones que se pueden implementar tanto en C++ como en Android. En el apéndice F se encuentra toda la información referente a los sockets: qué son y cómo funcionan, así como una descripción de los protocolos que se pueden usar (TCP y UDP) . También se explica detalladamente y de manera más profunda cómo se realiza la comunicación servidor - cliente, necesaria en este proyecto y que es el eje central de la comunicación entre la aplicación móvil y el ordenador. 4.2.1. Protocolo de envío y recepción de datos Para tener una visión global del protocolo de envío de datos, nos jamos en la Figura 4.5. Este esquema resume de una forma general el intercambio de datos. Figura 4.5: Esquema general del protocolo de comunicación entre servidor y cliente En un primer momento, el servidor es puesto en marcha para permitir conexiones. A continuación, se arranca la aplicación que hace de cliente. En el momento de inicio de la misma, envía una petición para que el servidor le envíe las potencias, e inmediatamente después, el cliente vuelve a enviar otra petición, pero en 24 4.2. COMUNICACIÓN PC-DISPOSITIVO este caso indicándole que lo que le tiene que enviar es la imagen. De esta forma, tenemos inicializado los datos del programa al meternos en la aplicación. El botón actualizar permite realizar esta operación cuando el usuario crea necesario. Cuando se presione este botón, el cliente vuelve a enviar una petición al servidor para que le envíe las potencias, y otra petición posterior a esta que le indique que lo que le tiene que enviar es la imagen. Así, el usuario puede actualizar la imagen y las potencias siempre que quiera. El servidor tiene dos procesos: uno para el procesado de imagen y otro para las comunicaciones. La razón es que el servidor no bloquee la toma de imágenes, ya que tiene que esperar a que llegue la petición del cliente, y la captura de frames debe de ser continua. El proceso encargado de las comunicaciones, cuando reciba desde el cliente la petición que le indique que debe enviar la imagen, llama a la matriz que contiene la imagen RGB modicada, para así coger su contenido y poder mandarlo. Lo mismo pasa con las potencias, ya que las que le llegan al proceso servidor, deben ser pasadas al procesado de imagen para que la pueda ir mostrando por pantalla al mismo tiempo que se van modicando. Esto se explica de forma más detallada en el apéndice F. Para el manejo de las potencias, hay una actividad respectiva a cada uno de los recipientes. Cada vez que subamos o bajemos la potencia del fuego, la envía al servidor. Como veremos a continuación, se manda la información tanto de la potencia como del recipiente al que pertenece. 4.2.2. Protocolo de actualización de potencias En esta sección vamos a centrarnos en la comunicación de potencias, y cómo se entienden tanto servidor y cliente para que esta transmisión funcione correctamente, tal como se muestra en la Figura 4.6. Cuando el cliente contacta con el servidor en la actividad principal, le está enviando una petición que le indica que éste debe enviarle las potencias correspondientes a los recipientes. El servidor, al recibir esta petición, entiende que debe enviar la potencia, y por lo tanto manda al cliente un array de tres bytes, cada uno correspondiente a la potencia de uno de los recipientes: la primera posición es el verde, la segunda posición se trata del rojo, y la tercera posición es el recipiente azul. El cliente recibe las potencias y le otorga el valor correspondiente a las tres variables que contiene su programa principal. Así, cada vez que el usuario entre en la aplicación o presione el botón de actualizar, el cliente avisa con una petición que quiere recibir las potencias, y está preparado para recibirlas y actualizarlas. La actividad propia de cada recipiente permite modicar las potencias desde la aplicación. En ella tenemos los botones para subir y bajar la potencia. Cuando presionamos uno de estos botones, se envía al servidor el nuevo valor de la potencia, pero concatenado con un ag , que le permite saber de qué recipiente estamos hablando. Los ags correspondientes son los siguientes: Verde: ag =10; Rojo: ag = 11; Azul: ag = 12 25 CAPÍTULO 4. APLICACIÓN MÓVIL Figura 4.6: Esquema de la transmisión de potencias Así, por ejemplo, si se sube la potencia del recipiente verde al 7 , la aplicación envía el valor 107 , formado por el ag 10 y la potencia 7 ; o si queremos subir la potencia del recipiente azul al 9 , la aplicación envía en este caso el valor 129 , formado por el ag 12 y la potencia 9 . Así, el servidor es capaz de reconocer tanto recipiente al que se reere como potencia. Una vez recibidas y almacenadas, son pasadas al procesado de imagen para que puedan ser mostradas por pantalla encima de cada recipiente. 4.2.3. Protocolo de transmisión y sincronización de la imagen En esta sección tratamos el tema de envío de imágenes, no sólo centrándonos en la comunicación que se da entre servidor y cliente, sino también viendo la comunicación entre los procesos dentro de estos (Figura 4.7). Al comenzar la aplicación, ésta envía una petición cuyo valor le indica al servidor que le mande la imagen. Así, el proceso que actúa como servidor coge el valor de la matriz que en ese momento contenga la imagen RGB modicada, que ha sido creada en el proceso que se encarga del procesado de imágenes. Una vez que el servidor ha cogido esa matriz, la envía por una trama UDP. Para hacer la comunicación de forma eciente, se aplica a la imagen un redimensionamiento de tamaño, permitiendo que la imagen tenga una calidad suciente y que pueda 26 4.2. COMUNICACIÓN PC-DISPOSITIVO Figura 4.7: Esquema de la transmisión de imágenes ser transmitida dentro de una trama. El mayor tamaño de una trama UDP que puede ser enviado es de 64 KB, incluyendo el tamaño de la cabecera UDP (8 Bytes) y el tamaño de la cabecera IP (20 Bytes). Una vez que hemos variado su tamaño, el servidor procede al envío de la imagen, que es recibida en el proceso que actúa de cliente en la aplicación. Este proceso está actuando "por detrás"de la actividad principal, permitiendo su ejecución a pesar de las funciones bloqueantes de recepción. Este proceso, además de cuando se inicie la aplicación, se puede hacer siempre que el usuario lo desee por medio del botón actualizar . Así, cada vez que este botón sea pulsado, el usuario puede ver el estado de la cocina y de los recipientes que en ella se encuentran. 27