martes, 21 de mayo de 2013

Reconocimiento de objetos



Propósito

En la actualidad, conforme la tecnología va avanzando se realizan diferentes métodos para el reconocimiento de objetos, todos estos con ventajas y desventajas pero todos con un objetivo en común que es la detección.

El propósito de este proyecto es poder detectar objetos similares, a través de imágenes, se analizan las esquinas de los diferentes objetos en la imágen y se establecen puntos de interés para extraerles sus características y así poder encontrar puntos similares en las dos imágenes y saber con esto si se trata del mismo objeto. 

Justificación

En ocasiones se necesita detectar objetos con las mismas características para realizar diferentes cosas, ya sea imágenes panorámicas, detección de rostros, monitoreo de objetos, para que un robot reconozca los objetos del entorno en el que se está desarrollando, entre otras cosas.

Un uso que se le puede dar a este proyecto es al hacer un inventario de tus objetos personales, los que son más común que se te pierdan, ya sea tus llaves o tu cartera, se puede realizar una aplicación que sirva para encontrar dichos cuando se encuentren extraviados, ya sea en el cine debajo del asiento, o incluso en la bolsa de mano en el caso de las mujeres.





Diseño del Software

El proyecto fue desarrollado en el lenguaje de programación Python, utilizando como sistema operativo Ubuntu 12.04.

La detección de los objetos en la imagen se hace analizando cada imagen, y encontrando mediante las esquinas (algoritmo Harris Corners Detection), los puntos de interés de las mismas. Con esto se pueden extraer las características de los puntos de interés para con esto poder saber si hay algunos puntos semejantes en las dos imágenes. Al tener estas características y obtener los puntos semejantes, se realiza una unión dependiendo de las características de estos puntos para encontrar los puntos que son semejantes en dichas imágenes. Estos puntos se unen cada uno con el que le corresponda en cuanto a características y al final se muestra una imagen que muestra mediante líneas los puntos que salieron semejantes entre las dos imágenes.

El programa consta de diferentes funciones.

  • Corner_detection. Calcula las esquinas que tiene la imagen utilizando una función de opencv que realiza el algoritmo de Harris Corner Detection, el cual localiza los puntos de interés en los alrededores analizando cambios de intensidad que se producen en cada píxel para un tamaño determinado de ventana.  
  • Get_descriptors. Teniendo los puntos de interés en cada una de las imágenes se obtienen los descriptores de cada uno de estos puntos, los descriptores son vectores que describen la apariencia de la imagen en un punto dado, esto sirve para obtener los puntos semejantes de las diferentes imágenes.
  • Match. Se localizan los puntos en común de una imagen con la otra con ayuda de los descriptores, para cada punto descriptor de la primera imagen se selecciona un punto descriptor de la segunda imagen.
  • Plot_matches. Esta función une los puntos que se obtuvieron en la funcion match mediante líneas para así unir estas semejanzas por medio de líneas con ayuda de la libreria pylab.
 
El siguiente diagrama muestra el procedimiento que se tiene que seguir para obtener como resultado la detección de objetos similares en las imágenes.







Detección de esquinas (Harris Corner Detection)





Resultado. Líneas que muestran los puntos semejantes de ambas imágenes




Librerías

Para la realización de este proyecto se utilizaron diferentes librerías que sirvieron de mucha ayuda ya que facilitan muchos procedimientos y sobre todo te permiten utilizar algoritmos más eficaces y rápidos. 


  • OpenCV: es una librería libre de visión computacional originalmente desarrollada por Intel. Se ha utilizado para un sin fin de aplicaciones, desde seguridad con detección de movimiento hasta aplicativos de control de procesos donde se requiere reconocimiento de objetos.
  • Pylab: es una librería para la generación de gráficos a partir de datos contenidos en listas o arrays en el lenguaje de programación Python y su extensión matemática Numpy.
  • Numpy: es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices.
  • PIL (Python Imaging Library): es una librería externa del lenguaje de programación Python que añade soporte para abrir, manipular y guardar diferentes imágenes en diferentes formatos.  

Desempeño

Para evaluar el desempeño se tomó el tiempo que se tarda en realizar todo el procedimiento en diferentes imágenes, obviamente entre más grandes sean las imágenes más tarda, el tiempo promedio que toma en hacer todo el procedimiento es de  12.9 segundos.

La resolución de la imagen como lo mencione es un factor muy importante el desempeño del procesamiento.


En imágenes con mayor resolución aparte de que tarda más tiempo también genera mejores resultados ya que detecta un mayor puntos de interés. En las imágenes de poca resolución toma en cuenta menos puntos de interés.

Resultados con las mismas imágenes pero con diferentes resoluciones.

Algunos de los resultados obtenidos son los siguientes.

Primer resultado.
Puntos de interés encontrados imagen 1 = 2443 Puntos de interés encontrados imagen 2 = 5012 
Resolución imagen 1 = 1080x720 pixeles
Resolución imagen 2 = 1280x800 pixeles
Tiempo de procesamiento = 24.24 segundos

Segundo resultado.
Puntos de interés encontrados imagen 1 = 2237 Puntos de interés encontrados imagen 2 = 3552
Resolución imagen 1 = 900x600 pixeles
Resolución imagen 2 = 1100x688 pixeles
Tiempo de procesamiento = 18.26 segundos

Tercer resultado.
Puntos de interés encontrados imagen 1 = 2124Puntos de interés encontrados imagen 2 = 2833
Resolución imagen 1 = 850x567 pixeles
Resolución imagen 2 = 950x594 pixeles
Tiempo de procesamiento = 11.24 segundos

Cuarto resultado.
Puntos de interés encontrados imagen 1 = 2109Puntos de interés encontrados imagen 2 = 2773
Resolución imagen 1 = 800x533 pixeles
Resolución imagen 2 = 900x563 pixeles
Tiempo de procesamiento = 9.74 segundos

Quinto resultado.

Puntos de interés encontrados imagen 1 = 2007Puntos de interés encontrados imagen 2 = 2311
Resolución imagen 1 = 750x500 pixeles
Resolución imagen 2 = 800x500 pixeles
Tiempo de procesamiento = 7.72 segundos

Promedio: 12.9 segundos



Gráfica de tiempos




Debilidades


Una de las debilidades más importantes es que al momento de hacer la unión de los puntos semejantes, no todas las uniones son correctas y esto puede realizar un problema al hacer la detección de alguna cosa importante.



Otra de las debilidades es el tiempo ya que como se analizan puntos de interés tiene que encontrarlos y tratarlos y entre más grande sea la imagen más puntos habrá pero esto ayuda a obtener un mejor resultado.

La interfaz donde se muestra el resultado es una más de las debilidades ya que simplemente se muestra una imagen al lado de la otra y mediante líneas son detectados los puntos en común.



Trabajo a futuro

Mejorar interfaz de resultado
  • La interfaz es una parte importante para el sistema ya que como el objetivo principal es de detectar objetos, los puntos en común entre las dos imágenes se deben mostrar de una forma diferente donde se pueda ver claramente cuales son los puntos en común entre las mismas ya que por medio de líneas no se puede mostrar claramente porque se sobreponen una sobre otra. Una idea mejor sería marcar los puntos en común con colores diferentes. También que se identifiquen los diferentes objetos en común de las imágenes localizando mediante un marco o cuadro sin relleno a dichos objetos. 

Mejorar la detección de puntos semejantes
  • Con el fin de que todos los puntos que se unan sean semejantes y no haya ninguno o sean muy pocos los que no coincidan, y a partir de esto se pueden hacer cosas como video en tiempo real para detectar objetos con la cámara web mediante una imagen como template. 
Realizar una aplicación móvil 
  • En la que se puedan encontrar con ayuda del flash del celular, objetos que se encuentren en lugares oscuros como abajo del asiento del cine (cuando se te cae dinero, o las llaves) y también para encontrar objetos en la bolsa de la mujer, ya que es uno de los problemas que ocurre seguido ya que siempre está llena de cosas y es difícil encontrar un objeto en específico.

Control de versiones

El proyecto se encuentra en línea en un repositorio. La liga del repositorio es la siguiente:

https://github.com/carmensrz/VisionFinal


Videos








Referencias:
Corner detection. (2013, April 28). Retrieved from http://en.wikipedia.org/wiki/Corner_detection
Opencv documentation. (2013, February 15). Retrieved from http://docs.opencv.org/2.4.4-beta/index.html


2 comentarios:

  1. La evaluación de desempeño se podría mejorar bastante, si tienes tiempo antes de que se califiquen los reportes (este jueves o viernes). Van 8 pts por la presentación.

    ResponderEliminar
  2. Reporte: 9 pts.

    Código: en el readme se suelen incluir los datos del autor para posible contacto. El programa en sí es bastante simple ya que lo complejo se realiza con librerías directamente. 8 pts.

    ResponderEliminar