lunes, 20 de mayo de 2013

Reporte

Presentación:



 

Propósito:

EL propósito del proyecto es la detección de obstáculos en tiempo real a través de una cámara utilizando diferentes técnicas de visión computacional. Además de enmarcar dichos objetos sin perder tanto tiempo en la ejecución del sistema.



Justificación:

Hoy en día existen diferentes necesidades  o usos que necesiten detectar obstáculos en tiempo real. Por ejemplo:

Advertencia de colisión:

Automóvil: Esta necesidad esta mas enfocada a automoviles, de tal manera que se percaten de algun señalamiento, botes, baches o simplmente para sacar la vuelta a otro vehiculo ya sea de manera autonoma, que el mismo automovil se condusca por si mismo o para ayudar  a algun conductor distraido.



Maniobrar robots:

En la actualidad existen diferentes usos para los robots o vehículos especiales, por ejemplo:

http://www.ultimahora.com/notas/560951-Prueban-robot-en-volcan-espanol-
 

Se utilizan robots tipo vehículo para obtener información  de los volcanes en lugares donde una persona no podría estar o podría correr peligro, pero la mayoría de las ocasiones estas máquinas trabajan a distancia con una persona operando, la detección de obstáculos le ayudaría al operador a evitar rocas, hoyos entre otras cosas y no simplemente fiarse de la vista.



http://www.cadenaser.com/tecnologia/fotogaleria/curiosity-aterriza-marte/csrcsrpor/20120806csrcsrtec_1/Zes

Hace poco también se lanzo el tan famoso curiosity, capas de surcar obstáculos con una gran precisión, ya que utiliza cinco cámaras ya sea para evitar los obstáculos o el análisis del suelo marciano, esto nos da una idea de mejoramiento para la aplicación ya que solo se utilizo una cámara.



Diseño del Software

Diagrama del diseño del software:



 Pasos que se siguieron:

1-. Se obtuvo la imagen de entrada que se obtendría del la cámara en ese instante.

2-. Se elimino ruido de esa imagen, ya que las tomas de la cámara llegan con una cantidad considerable de ruido.


3-. Se paso la imagen a escala de grises.


4-. Posteriormente se binarizo.


5-. Teniendo la imagen binarizada solo se tomo 3/4 de la imagen para procesarla, lo demas se tomo como fondo, ademas para la utilización posterior los colores se invirtieron, de blanco se paso a negro y de negro se paso a blanco.


6-. Se obtuvieron los contornos de la imagen ya procesada.


7-. Se separaron los contornos de tal manera de obtener los diferentes objetos u obstáculos.
8-. Se enmarcaron los objetos, poniendo un rectángulo a su alrededor.
9-. Se etiquetaron.
10-. Se muestra en la pantalla la imagen final.




Librerías

Para las librerías usamos Opencv y alguno de sus métodos por diferentes razones, la principal era para reducir el tiempo de procesamiento de las mismas.

Opencv:
  • cv.QueryFrame() guarda la imagen tomada de la cámara.
  • cv.Smooth() reduce el ruido.
  • cv.CvtColor() cambia la imagen a escala de grises u otros colores.
  • cv.Threshold() binariza  la imagen.
  • cv.FindContours() obtiene los contornos.


Para las direcciones, la separación de los contornos de los objetos, el cambio de la imagen de blanco a gris y viceversa  y la toma de 3/4 de la imagen, se usaron funciones propias.

Desempeño

Umbrales altos en  eliminación de ruido

Con promedio de 0.580681741238 segundos en procesar un solo frame, esto nos indica que para tomar el siguiente frame tiene que esperar 0.58 segundos, esto no es tan óptimo aunque sea menos de un segundo ya que si es muy importante el trabajo puede ser un problema.



Umbrales bajos en eliminación de ruido



Como observamos la evidencia indica que entre mejores filtros , la aplicación tarda menos en ejecutarse, con menos umbrales aproximadamente tarda en promedio 0.597395379203.



Como observamos al iniocio tarda casi un segundo en procesar la imagen

Trabajos a futuro

Tener en cuenta la luz del lugar
Optimizar los diferentes umbrales para la eliminación de ruido y la binarizacion
Uso de mas de una sola cámara.

Demo:

Dentro de una habitación

 En la calle:


Todas las pruebas se realizo con las siguientes características de la computadora:






Repositorio : https://github.com/alejandroave/provis
Referencias: 
1-. "Curiosity" |ultima modificación: 7 abril de 2013 | http://es.wikipedia.org/wiki/Curiosity.
2-. "Ejemplos Básicos con OpenCv"| Sebest |  29 de julio de 210 | http://www.sebest.com.ar/?q=node/79.
3-. "Manipulación del color en OpenCV" | ucoopencv| ultima modificación: 11 de enero de 2011 | http://ucoopencv.wikispaces.com/Espacios+de+Color.
4-.  "Filtro de detección de bordes (Canny) usando OpenCV" |por Oscar García| 2 julio de 2011 | http://blogrobotica.linaresdigital.com/2011/02/filtro-de-deteccion-de-bordes-canny.html.


2 comentarios:

  1. Tu readme requiere mejora y revisión de ortografía antes de que llegue a calificar el repositorio; van 9 pts por la presentación.

    ResponderEliminar
  2. 9 pts por el reporte; en el readme uno esperaría ver los datos del autor. Es mala idea dejar código no relevante comentado en una versión final de un archivo fuente. 8 pts por el código.

    ResponderEliminar