Etiquetas

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 

jueves, 9 de mayo de 2013

Extra Points - Reed-Solomon Codes

This paper was written by Martyn Riley and Iain Richardson

Reed-Solomon codes are block-based error correcting codes with a wide range of applications in digital communications and storage.The number and type of errors that can be corrected depends on the characteristics of the Reed-Solomon code.
Reed-Solomon codes are used to correct errors in many systems, some of them are:
  • High-speed modems such as ADSL, xDSL, etc.
  • Satellite communications
  • Storage devices (including tape, Compact Disk, DVD, barcodes, etc)

Reed-Solomon codes have many advantages. They provide excellent error-correcting abilities since they reach the Singleton bound.

Reed-Solomon codes, abbreviated RS codes, are designed by oversampling a polynomial constructed from the data. The message to send is mapped to a polynomial and the codeword is defined by evaluating it at several points.

In this pdf can find a little more definition on Reed-Solomon codes and examples of how they work.

Other applications

tarea 5

Para esta semana se nos pidió trabajar sobre un código de corrección de errores, aplicando el código de Hamming.

El código de Hamming nos permite encontrar errores dentro de un texto recibido, se pueden detectar errores de 1 bit y corregirlo pero no distingue errores de 2 bit.

El algoritmo es el siguiente:
Todos los bits cuya posición es potencia de dos se utilizan como bits de paridad (posiciones 1, 2, 4, 8, 16, 32, 64, etc.).
Los bits del resto de posiciones son utilizados como bits de datos
Cada bit de paridad se obtiene calculando la paridad de alguno de los bits de datos. La posición del bit de paridad determina la secuencia de los bits que alternativamente comprueba y salta, a partir de éste, tal y como se explica a continuación.
    Posición 1: salta 0, comprueba 1, salta 1, comprueba 1, etc.
    Posición 2: salta 1, comprueba 2, salta 2, comprueba 2, etc.
    Posición 4: salta 3, comprueba 4, salta 4, comprueba 4, etc.
    Posición 8: salta 7, comprueba 8, salta 8, comprueba 8, etc.
    Posición 16: salta 15, comprueba 16, salta 16, comprueba 16, etc.
    Regla general para la posición n es: salta n-1 bits, comprueba n bits, salta n bits, comprueba n bits...
    Y así sucesivamente.


Y pues estuve intentando hacer el código para poder aplicar este método de codificación pero no logre llegar muy lejos. :(


Actividad #9 - Deteccion de Esquinas

Para esta semana se nos pidió trabajar con el tema de detección de esquinas en imágenes utilizando diferencia de filtro mediano.

Para realizar esto utilice la siguiente imagen
 

Lo primero que hice fue aplicar una escala de grises a la imagen, una ves teniendo la imagen en escala de grises aplique lo que es el filtro mediano, en este filtro vamos procesando los pixeles de manera similar al filtro normal, pero en este caso también recorremos esquinas y al final se les calcula la mediana.
Este es el código del filtro mediano:
****
****
Imagen Filtrada
Una ves que se tiene el filtro de la imagen hacemos una diferencia entre la imagen en escala de grises y la imagen filtrada.
****
****
Y esto es lo obtenido de la diferencia, ademas le agregue convolucion a la imagen para poder apreciar mejor las esquinas
Y esta es otra imagen en donde aplique el código



Y eso es todo por el momento, aquí dejo la liga a mi repositorio donde se encuentra el código completo.

martes, 7 de mayo de 2013

Entrega #5

Lab #10

Un marco para la transformación de los modelos abstractos de Privacidad en los requisitos del sistema Ubicomp implementable

Ivan Gudymenko                                Katrin Borcea-Pfitzmann
Faculty of Computer Science                Faculty of Computer Science
Dresden University of Technology        Dresden University of Technology

Introducción

En los sistemas de Computo Ubicuo existen muchas preocupaciones que pueden impedir su desarrollo. Esto significa que al implementar un sistema de Ubicomp de manera que se preserve la privacidad aumentaría la aceptación entre los usuarios y ampliaría el publico objetivo.
Entonces si se tiene un sistema Ubicuo con un mecanismo de privacidad decente se tendría un mayor éxito comercial.

En el articulo se describe un sistema ubicuo preservando su privacidad y se describen los requisitos de privacidad que deben ser considerados dentro de un sistema ubicuo.


Terminología

El concepto de Privacidad es amplio, aunque definir lo es difícil debido a la diferencia sustancial de la percepción de privacidad de cada individuo. Sin embargo, a continuación se muestra la comprensión de este concepto. 

Privacidad:de la entidad es el resultado de la negociación y aplicación de cuándo, cómo, en qué medida y en qué contexto el que los datos de esta entidad se da a conocer a quién.

Esta definición tiene en cuenta al interlocutor, el contexto en el que tiene lugar la comunicación y los procesos de negociación, que son necesarios para gestionar con flexibilidad privacidad. 

Esto es necesario para razonar que la información personal de un individuo está dispuesto a revelar a obtener el tipo de servicio y resolver los posibles conflictos que puedan surgir debido a la contradicción de los objetivos de la privacidad de los diferentes individuos. Por otra parte, los que se dan a conocer los datos personales, la granularidad y la aplicación de los requisitos de privacidad de un individuo también se consideran en la definición anterior

Elaboración de privacidad inherentemente construido en la funcionalidad del sistema ubicuo

El proceso de la privacidad y la seguridad debe comenzar en la fase de diseño del sistema, se debe tomar en cuenta el concepto conocido como "privacidad mediante el diseño" y se debe continuar durante todo el proceso de desarrollo.

Es imposible predecir los requisitos de seguridad y privacidad de todos los usuarios y también sus variaciones en la respuesta a los futuros cambios en el contexto durante la etapa de diseño del sistema.


Los mecanismos de seguridad en la funcionalidad del sistema ubicuo se puede dividir en lo siguiente:

1. Durante la fase de diseño del sistema, se consideran privacidad genérica (es decir previsible) y los requisitos de seguridad.
2. En el momento de la inicialización, una instanciación de requisitos genéricos considerados durante la primera etapa se lleva a cabo.
3. En tiempo de ejecución, se utilizan la privacidad implementado previamente y los mecanismos de gestión de la seguridad.

Privacidad en Ubicomp: Peculiaridades

Para establecer un sistema ubicuo con privacidad debe tomarse en cuenta lo siguiente:

  • Técnicas de anonimización y cifrado para los dispositivos con recursos limitados deben ser considerados cuidadosamente con el fin de mitigar el problema de la divulgación del contenido.
  • Mecanismos para la protección de la integridad de los datos contextuales.

Privacy Modeling Framework

1.Crear un modelo abstracto de privacidad implica lo siguiente:
  • Investigar el área de privacidad de la futura implementacion del sistema ubicuo, es decir las preocupaciones de privacidad de los individuos
  • Revisar el estado actual de la base jurídica en el área de interés  es decir que leyes están relacionadas con la futura implementacion.
  • Sobre la base antes mencionada es necesario crear un modelo abstracto de privacidad.

2. Se lleva a cabo una transformación constante del modelo de privacidad abstracto creado en el primer paso, tomando en cuenta toda la serie de requisitos que son específicos para el sistema.
3.El ultimo paso es la aplicación real, mecanismos de privacidad en la funcionalidad del sistema ubicuo.

Estos enfoques representan una serie de desafíos entre ellos:

1. La fusión de los requisitos de privacidad individuales con asuntos legales en el área de interés (paso uno) es una tarea difícil.
2.El segundo paso implica la existencia de una lengua madura que permita expresar el modelo abstracto estandarizado listo para poner en practica.
3. Se plantean preguntas relacionadas con el marco general:
  • El marco se describe de una manera abstracta, por que las formas de su aplicación deben de especificarse, y también debe tomarse en cuenta que grado de automatización del proceso de transformación se puede lograr.
  • La consistencia de la transformación realizada debe ser considerado cuidadosamente. Sin duda, ciertas compensaciones van a surgir. Su impacto en la exactitud del modelo de privacidad implementado debe evaluarse.

Conclusión

En este documento se afirma que no se puede prever de un apoyo pleno en la gestión de privacidad, para esto es necesario ubicarse dentro del escenario en el que se se va a trabajar ademas de que se debe seguir planteando durante todo el desarrollo del sistema.

En mi opinión dentro del documento se plantea bien la necesidad de ir viendo las cuestiones de seguridad y privacidad dentro de todo el desarrollo del sistema, ademas de que  marca como punto importante  el ubicar dentro de una base jurídica  los requisitos de privacidad que tendrá el sistema.
Aquí anexo el link al pdf completo para una mejor lectura.

jueves, 2 de mayo de 2013

Actividad # 8 - Detección de Polígonos

Para esta semana, lo que se nos pidió fue trabajar sobre el tema detección de polígonos. Lo que se busca principalmente es identificar cualquier polígono dentro de una imagen dada.

Primero, un polígono es una figura geométrica que esta compuesta por segmentos rectos consecutivos que cierran cierta región.
Ahora para detectar si existe un polígono o no dentro de la imagen, lo primero que tenemos que hacer es recorrer la imagen con un bfs, como se ha hecho anteriormente para detectar las formas dentro de la imagen. ( Detección de formas).

******
******
Después de eso ubicamos cada una de las lineas que conforman las figuras y almacenamos sus coordenadas dentro de un lista, después calculamos las pendientes de cada una de los pixeles para saber si están dentro de una misma linea.

******
******

Y eso es todo lo que pude obtener ya que inicialmente quise reutilizar mi código para encontrar las lineas pero al querer hacer lo de las pendientes me revolví .