Plugin colores

De Proyecto Butiá
Saltar a: navegación, buscar

Integrantes

  • Andrés Aldado
  • Alejandro Fontes
  • Kyria Márquez

Tutor

  • Andrés Aguirre

Actualmente estamos

Proyecto finalizado! Esperamos que este espacio sea útil para futuros estudiantes que quieran extender el proyecto.

Documentación

Introducción

A continuación presentamos el proyecto Plugin para detección de Colores. En el mismo buscamos permitir al usuario interactuar con la cámara para utilizarla como un sensor de colores de manera ágil, amigable e interactiva a través de TurtleBots. Dando la posibilidad a los usuarios de utilizar estructuras de control y decidir acciones en base a los resultados obtenidos.

Motivación

Durante el año 2013 cursamos la materia Butiá interactuando con docentes, alumnos y personas interesadas en la robótica. Aquí tuvimos distintas experiencias con los robots tanto a nivel de hardware como de software.

Al comenzar la materia se fijaron las pautas de aprobación entre las que se detallaba un proyecto. Aprobadas las instancias previas requeridas para realizarlo nos permitieron elegir un tema de interés sobre el cual trabajar. Debido a nuestra experiencia e inquietudes al ver funcionar los plugins reconocimiento de marcas y followme decidimos embarcarnos en esta camino para lograr las metas de la materia y las personales en cuanto al funcionamiento de las tecnologías de reconocimiento.

Objetivos

  • Crear un plugin que identifique el color predominante en un escenario mediante la cámara web de la XO de manera eficiente.
  • Lograr un conjunto de funcionalidades que permita a los usuarios de manera ágil y amigable utilizar la cámara como sensor de color comparando el resultado obtenido con la paleta de colores nativa. Permitiendo tomar decisiones si el resultado obtenido es el esperado e interactuando con el resto de las funcionalidades de la paleta.
  • Estudiar distintos algoritmos de detección de colores por comparación de distancia y seleccionar el más apropiado para el proyecto.

Desarrollo del problema

Configuración del entorno

A continuación se detallan los requisitos, dependencias y pasos para utilizar las funcionalidades del plugin para detección de colores a través de la cámara.

 - Dependencias: gcc, git, gettext, libusb-devel, sugar-emulator
 - Librerías utilizadas: Pygame, numpy, math

Relevamiento de material existente

  • Plugins

Se probaron diferentes plugins que actualmente existen en la plataforma butiá, entre ellos observamos el comportamiento de followme y el de reconocimiento de marcas. De estos dos plugins decidimos reutilizar las funcionalidades que utilizaba followme para poder interactuar con la cámara mediante la biblioteca Pygame.

  • Distancia de color

El algoritmo para calcular la distancia entre dos colores utilizado se basa en el paper Colour metric [1].

El mismo se desarrolla a partir de la distancia euclideana común entro dos colores en el espacio RGB. A este calculo se le agrega un peso a cada componente calculando una distancia euclideana ponderada. Finalmente se le agrega un peso variable según la relación de componente Rojo entre los dos colores comparados llegando a la fórmula

<math>\vert\vert\Delta C\vert\vert=\sqrt{(2+r)\Delta R^2+4\Delta G^2+(3-r)\Delta B^2}</math>

Esta fue la fórmula utilizada para desarrollar el calculo mediante la biblioteca NumPy en código Python.

Implementación de funcionalidades

Al inicializar la carga del plugin se setean por por defecto de las variables utilizadas como son el brillo, la tolerancia, la resolucion de la captura de la cámara.

  • comparar color

En primer lugar se obtiene una captura de imagen de la cámara y se utiliza la funcionalidad de Pygame para obtener el valor RGB promedio del area seleccionada como central. En segundo lugar se obtiene el valor RGB del bloque de color utilizado, a partir del nombre pasado por parámetro se localizan los valores de cada color en un arreglo cargado con los valores RGB de todos los colores básicos. Con estos dos valores se realiza el calculo de distancia de Color, una vez obtenido el valor se compara si el mismo es menor que la tolerancia seteada si es así se devuelve verdadero y en caso contrario falso.

Herramientas utilizadas para resolver el problema

  • Biblioteca Pygame [2]: es un conjunto de módulos de Python que generalmente se utiliza para creación de videojuegos en 2D. De aquí utilizamos la función average_color la cual nos devuelve el promedio de color en un cuadrado que fue seteado en la cámara.
  • Biblioteca NumPy [3]: Es una extensión de Python agrega soporte para vectores y matrices. La utilizamos para el manejo de operaciones entre los vectores de color RGB.
  • Biblioteca Math: Provee funciones para hacer cálculos matemáticos. Los cálculos que utilizamos fueron raíz, cuadrado.


Diagramas de flujo

Funcionalidad comparar_color: Funcionalidad setearBrillo: Funcionalidad setarTolerancia:
Comparar color.png Setear brillo.png Set tolerancia.png

Dificultades encontradas

Una vez finalizado el desarrollo con resultados correctos en las laptops que probamos, encontramos que al probar en las XO la librería Pygame daba conflicto al iniciar la cámara en la XO 1.0. El desarrollo se probó finalmente en las XO 1.5.

Al probar con distintos materiales la detección del color encontramos que en algunos como por ejemplo el papel glacé presenta algunos problemas según la posición de la luz y la transparencia por tanto el plugin funciona mejor con papeles opacos como cartulinas.

Paleta ColorView

En la siguiente imágen se puede observar las funcionalidades de la paleta desarrollada.

Funcionalidadescolorview.png

Descripción de las funcionalidades

  • Comparar color: permite seleccionar un color de la paleta de colores nativa y comparar con el color que esta detectando la cámara.
  • Ver cámara: Abre una nueva ventana que permite visualizar lo que esta viendo la cámara en este momento, el área que se toma para identificar un color y una muestra del color promediado por la cámara.
  • Setear tolerancia: Permite establecer la tolerancia entre la distancia de los colores comparados. Por defecto se inicializa en 10.
  • Setear brillo: Permite establecer el brillo de la cámara. Por defecto se establece en 10.


Demo del plugin

ColorView Demo


Conclusiones

Durante el proyecto se logró la detección de colores básicos experimentando como la luz, el material del elemento y la cámara utilizada afectan en gran medida el resultado obtenido.

Tuvimos contacto por primera vez con el desarrollo en Python para la plataforma TurtleBots y pudimos concluir que es fácilmente extensible a nuevas paletas que diversifiquen las funcionalidades ofrecidas utilizando los distintos sensores y actuadores disponibles o creando nuevos.

Trabajo a futuro

  • Permitir setear el tamaño del area que se muestrea para obtener el promedio de color.
  • Estudiar la compatibilidad para distintas versiones de XO y las cámaras soportadas.
  • Extender el plugin para detectar formas además de un color particular.
  • Analizar otros algoritmos para calcular la distancia. Por ejemplo comparar la distancia utilizando el espacio de color YUV.
  • Evaluar utilizar un sensor externo como sustituto de la cámara integrada.

Código

descarga del plugin

Referencias

[Colour Metric] http://www.compuphase.com/cmetric.htm

[Pygame] http://www.pygame.org/docs/index.html

[NumPy] http://wiki.scipy.org/Tentative_NumPy_Tutorial