martes, 14 de mayo de 2013

Proyecto Final - Detección de Códigos de Barras

Buenos días, en esta entrada les hablara sobre mi proyecto final para la clase de visión computacional. A continuación les redactare como es que trabaje para llevar acabo esto.

Detección de Códigos de Barras.

Anteriormente ya les había presentado una idea general de mi proyecto, el cual consiste en detectar los códigos de barras dentro de ciertas imágenes que podrían contenerlos.

Para que son  útiles los códigos de barras?
Actualmente los códigos de Barras son utilizados para identificar gran cantidad de artículos  facturas, paquetes, etc.. estos códigos de barras como su nombre lo dice, son un conjunto de lineas paralelas de diferente grosor y espaciado que contienen cierta información.

Ahora la pregunta es para que detectarlos?
Bueno esto para saber si el producto o lo que sea que contiene el código, tiene alguna procedencia o algún cierto control que lo identifique del resto de objetos o cosas que contienen un código de barras, por el momento puedo decir que una parte del proyecto esta hecha ya que logra ubicar donde se encuentra un código de barras, la otra parte es saber leerlos.

Usos de los códigos de barras:
  • Industria en general
  • Manejo de credenciales, tarjetas, etc.
  • Artículos comerciales
  • Registro de mercancías, etc.
Diseño.
El diseño de mi proyecto es el siguiente:


La manera en que funciona es así:

  1. Damos como entrada la imagen
  2. La procesamos por escala de grises
  3. Aplicamos gradientes (en este caso las mascaras de Sobel)
  4. Aplicamos umbrales
  5. Se aplica erosion y dilatacion para agrupar pixeles
  6. Después ubicamos el código de barras
  7. Y por ultimo dibujamos un recuadro sobre de el código

Herramientas
El Lenguaje de programación que utilice fue:
-Python
Las librerías que utilice para llevar a cabo la detección de códigos de barras son las siguientes:
-Opencv para utilizar algunos filtros que contiene la librería.

Trabajo a futuro
Pues como trabajo a futuro tengo pensado lograr leer lo que son los códigos de barras, y lograr entender que es lo que contienen, ademas de que mejorare la manera en que se ubican los códigos y si es posible recortar la imagen para detallar un poco mas el enfoque del código.
Otra cosa que podría realizar es el implementar esto utilizando una cámara e ir guardando los datos de cada código de barras en una base de datos. 

Pruebas y resultados
Estas son algunas de las pruebas que realice con mi código aplicándolo a diferentes imágenes. 
Prueba y Resultado 1


Prueba y Resultado 2



Como el código lo realice con opencv al utilizar las librerías era realmente rápido el proceso en que se detectaban los códigos de barras, aunque si revisamos el tiempo de ejecución de las imágenes anteriores se puede apreciar que el tiempo de la segunda imagen es mayor, esto es debido a las dimensiones de la imagen.

Aquí pueden encontrar las cosas con las que se ha trabajado durante el semestre y el código del proyecto se llama proyecto.py 

Gracias!

Presentación.



Referencias:
Link 1  - Wikipedia - Información acerca de códigos de barras
Link 2 - Tutoriales de python
Link 3 - Tutorial opencv
Link 4 - Para descargar opencv 

3 comentarios:

  1. Sería bueno aclarar los nombres de los archivos en el repositorio y agregar un archivo INSTALL.

    Las referencias del reporte aún no tienen un formato adecuado.

    En la presentación no hubo ni evaluación de desempeño ni discusión de trabajo a futuro, pero aún alcanzas poner eso en el reporte antes de que lo califique.

    7 pts por la presentación; estaba medio breve.

    ResponderEliminar
  2. Calificación del reporte: hay algunos detalles de ortografía, las pruebas reportadas son pocas y no incluyen una evaluación de desempeño. 7 pts.

    Calificación del repositorio: En los readme se suelen incluir los datos de contacto del autor. Los nombres de los archivos de código fuente no son muy intuitivos. La documentación del código es poca. 7 pts.

    ResponderEliminar
  3. habra forma de convertir esto en codigo par devc++

    ResponderEliminar