escaner.pdf - web del departamento de …jtomas/android/proyectos/2016/master/escaner/... · manual...

27
Título del Proyecto: ESCÁNER Autor: Carlos Cuesta Alonso Director: Antonio Albiol TESINA PARA LA OBTENCIÓN DEL TÍTULO DE: Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles

Upload: hoangtram

Post on 22-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Título del Proyecto:

ESCÁNER

Autor:

Carlos Cuesta Alonso

Director:

Antonio Albiol

TESINA PARA LA OBTENCIÓN DEL TÍTULO DE:

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 2

Contenido

Título del Proyecto: ....................................................................................................................... 1

Autor: ............................................................................................................................................ 1

Director: ........................................................................................................................................ 1

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles ............................................... 1

Introducción .................................................................................................................................. 4

Descripción del problema ......................................................................................................... 4

Objetivos ................................................................................................................................... 4

Motivación ................................................................................................................................ 4

Tecnologías utilizadas ................................................................................................................... 5

Arquitectura de la aplicación ........................................................................................................ 5

Esquema del diseño .................................................................................................................. 6

Ajuste del Hardware .............................................................................................................. 6

Procesamiento de la imagen. ................................................................................................ 7

Pre proceso ........................................................................................................................... 7

Binarización. .......................................................................................................................... 8

Segmentación ........................................................................................................................ 9

Localización ......................................................................................................................... 10

Decodificación ..................................................................................................................... 10

Diagrama UML ......................................................................................................................... 11

Vistas ....................................................................................................................................... 13

Conclusiones ............................................................................................................................... 16

Grado de cumplimiento de los objetivos planteados. ........................................................ 16

Líneas abiertas. .................................................................................................................... 16

Consideraciones personales. ............................................................................................... 16

Anexos ......................................................................................................................................... 17

EAN 13 European Article Number ........................................................................................... 17

EAN-8 ....................................................................................................................................... 18

EAN-2 ....................................................................................................................................... 19

Decodificación EAN13 ............................................................................................................. 20

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 3

Lector Código de Barras .......................................................................................................... 24

Lectores vs Smartphones ........................................................................................................ 24

Generación de imágenes a color vs. blanco y negros ......................................................... 24

Profundidad de campo ........................................................................................................ 24

Iluminación .......................................................................................................................... 25

Instalación Opencv 3.1.0 Android ........................................................................................... 26

Listado de fuentes entregadas ................................................................................................ 26

Manual de usuario .................................................................................................................. 27

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 4

Introducción

Descripción del problema Los códigos de barras están en todos lados. Desde la exitosa adopción del Código de Producto Universal (CUP) en el sector minorista/de comestibles en la década del 70, el uso del código de barras ha sido un boom. Los rótulos y etiquetas de códigos de barras se utilizan en casi todas las industrias, para prácticamente todas las aplicaciones de captura de datos concebibles. Para todo, desde el registro de salida de comestibles hasta la gestión de activos, desde servicios externos hasta logística, rastreo de equipos de TI, gestión de almacenes, fabricación automotriz y gestión de documentos.

La tecnología de escaneo de códigos de barras, hasta hace poco, se limitaba a dispositivos creados a ese efecto utilizados en los ámbitos empresariales y de negocios.

La disponibilidad de módulos de cámaras digitales de relativamente alta definición a bajo costo de los teléfonos móviles en esencia ha puesto un escáner de códigos de barras en poder de cualquier persona que tenga un smartphone.

Objetivos El objetivo del proyecto es la lectura de códigos de Barras en formato EAN, que es el formato en el cual codificamos los productos en España.

La idea es la sustitución de escáner profesional por un Smartphone , con el ahorro que supone el no tener que realizar el desembolso.

Motivación He realizado software de tpv, y control de inventarios para escáneres Honeywell, al cliente le supone un gasto que muchos de ellos no se atreven a realizar de 800 € a 1500 € algo decente. Con pantallas pequeñas, utilizando puntero, el hardware al tiempo hay que cambiarlo, con los móviles pasa lo mismo, pero solemos hacerlo sin problemas.

Al realizar el curso Android ya pensé en realizar un programa de inventarios usando librerías, pero cuando vimos Opencv me fascino, y me pregunte: ¿ Podría realizar yo el trabajo de la librería ? . Así que he aprovechado para hacer algo que laboralmente no plantearía.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 5

Tecnologías utilizadas

Open Source Computer Vision

OpenCV es una librería de visión artificial de libre distribución, inicialmente desarrollada por Intel.

Tiene una licencia BSD, lo que permite utilizar y modificar el código, tiene una comunidad de más de 47000 personas y más de 7 millones de descargadas.

Está escrito en C++, tiene interfaces en C++, C, Python, Java y MATLAB interfaces y funciona en Windows, Linux, Android y Mac OS.

Para el funcionamiento de la aplicación es necesario la Instalación Opencv Manager 3.1.0 Instalación Opencv Manager 3.1.0 android

Arquitectura de la aplicación

Para la decodificación de códigos de barras simplificando el proceso al máximo, lo podríamos dividir en tres partes

• Configuración hardware del móvil. • Localización del Código de Barras • Decodificación del Código de Barras

Antes de empezar a hablar de la localización y decodificación del código de barras, hay que resaltar que los móviles tienen unas limitaciones respecto a los escáneres (Lectores vs Smartphones).

Al principio realicé la localización y decodificación con imágenes cargadas, el

resultado era perfecto, pero al utilizar la cámara en casos reales el resultado era pésimo, esto es debido a que utilizaba para el acceso a la cámara, la clase CameraBridgeViewBase, la cual no configura la cámara, para poder sacar el máximo partido tuve que bajar a su clase padre y reescribirla JavaCameraView de esta manera modificamos valores de resolución, modos de captura de cámara, escenas, zoom, antorcha, autofocus. Podría decir que está parte es igual o más importante que el resto.

Para la localización del código de barras creamos una línea horizontal de un

pixel de alto por el ancho de la pantalla, esta línea la binarizamos y segmentamos y

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 6

buscamos las guardas determinando de paso el tipo de ean que es. Si todo es correcto pasamos a decodificarlo.

Esquema del diseño En el siguiente esquema mostramos los pasos a seguir para la decodificación de un código

Ajuste del Hardware Reescribimos la clase JavaCameraView donde establecemos la resolución al máximo que nos permite.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 7

Modificamos los modos de Autofocus y comprobamos si tiene escena de barcode.

Establecemos un valor de zoom medio.

Procesamiento de la imagen. Opencv nos brinda la oportunidad de trabajar directamente con escala de grises sin tener que transformar la imagen, como los códigos de barras son en blanco y negro no nos hace falta para nada las componentes de color agilizando todos los procesos siguientes.

Pre proceso Lo primero que hacemos es trabajar con solo una línea, creamos una cabecera de un pixel de alto y el ancho de la pantalla.

Sobre esta línea realizamos un suavizado Gaussiano con un valor sigma pequeño, aproximada mente de 1.0.

Realizamos un Resize de esta línea con interpolación cúbica hasta 6000 pixeles, para facilitar la lectura.

*Nota: Imágenes re calculadas para su visualización: porque son de 1 pixel de alto por el ancho y posteriormente de 6000

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 8

Binarización.

Para realizar la binarización utilizamos un umbral adaptativo. El umbral para una cierta posición lo calcularemos como la media entre el máximo y el mínimo de vecinos de esa posición. Para ello basta con hacer una dilatación horizontal y una erosión, y promediar ambas cosas. El umbral será otra imagen de una línea de alto y 6000 de ancho.

Una vez calculado el umbral binarizamos, Comparando cada pixel de la línea original con su correspondiente del umbral, si el de la línea original es menor que el umbral ponemos uno y si no cero.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 9

Segmentación Para la segmentación recorremos todos los pixeles de la línea de izquierda a derecha, vemos si es blanco o negro, y le guardamos con una etiqueta, en el momento que hay una transición cambiamos la etiqueta así nos queda segmentado por grupos que son blancos o negros con distintos anchos.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 10

Localización Recorremos el array con los segmentos y buscamos la guarda de inicio. Buscamos una línea blanca mucho más ancha que la unidad mínima, seguida de una línea negra estrecha, una línea blanca estrecha y otra negra estrecha, es decir la secuencia 101. Una vez localizada el posible inicio si es un ean13 la guarda central estará ubicada inicio+27 (01010) y la final inicio+58 (101). Tiene que tener 30 segmentos negros.

Si fuera un Ean 8 la guarda central estará ubicada inicio+19 (01010) y la final inicio+42 (101). Tiene que tener 22 segmentos negros.

Decodificación Nota: Si no se sabe cómo está estructurado un ean13 y como se codifica deberías leer decodificación ean13

Una vez identificada las guardas y determinado el tipo de ean , realizamos la lectura de la parte izquierda del código de barras formado por 6 dígitos que están ubicados a continuación de la guarda de inicio y antes de la guarda central.

Cada dígito estará formado por 7 bits, que estará incluido en 4 segmentos. Es decir leemos los 4 segmentos para obtener el primer número.

Tenemos que determinar cuántos bits hay en cada segmento determinado por el ancho de los pixeles, así que para obtener el ancho normalizado cojo el ancho de cada línea lo divido por la suma y lo multiplico por 7. De esta manera obtenemos cuantos bits hay en un segmento. Como alternativa al segmentar sacamos una media del anchos en las guardas de inicio, central y final distinguiendo entre blancos y negros, por si nos salieran más bits de los que debería probamos con el ancho de las guardas. En la binarización hay veces que alguna barra sobre todo en las blancas las hace más anchas y las negras más estrechas provocando el fallo en la lectura, al estar en el límite de redondeo, fijando el redondeo más alto o más bajo y con los anchos de las guardas rectificamos la mayoría de los fallos en la binarización. No hay posibilidad de

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 11

error puesto que al final del proceso hay digito de control en el que comprobamos la lectura correcta.

Cada vez que leemos un código la clase EAN13 se encarga de realizar los cálculos de la paridad o de determinar el numero o cualquier cálculo de la decodificación.

Una vez terminada la parte izquierda pasamos a realizar la derecha, de la misma manera.

Si en algún paso da un resultado erróneo, no existe la secuencia de bits, no tiene paridad o hay mas bits que de los que debía el proceso se sale.

Una vez terminado se calcula el digito de control, si este coincide con el digito 13 la lectura ha sido correcta sin ninguna duda, sino la lectura es incorrecta y descartada.

Diagrama UML

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 12

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 13

Vistas

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 14

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 15

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 16

Conclusiones

Grado de cumplimiento de los objetivos planteados.

El objetivo de crear un escáner de lectura de códigos de barras creo que ha quedado cubierto, estoy bastante satisfecho con los resultados, viendo las limitaciones que tiene un teléfono con respecto a un lector de códigos, va bastante rápido y los lee con facilidad-

Las características del Smartphone influyen bastante así como la capacidad de enfocar o el pulso de la persona que lo maneja. Las condiciones de iluminación también afectan.

Líneas abiertas.

La aplicación en si se queda corta, puesto que la utilidad de leer un código de barras debería servir para procesar esos datos, bien realizando un inventario o albaranes de entrada o cualquier información relevante que pueda ser útil al usuario, pero el proyecto se hacía demasiado grande y antes de empezar planteamos céntranos en la decodificación del código de barras.

Consideraciones personales.

Estoy bastante satisfecho con los resultado, y aprovecho para dar las gracias a mi tutor Antonio por su tiempo y capacidad.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 17

Anexos

EAN 13 European Article Number

European Article Number (EAN) o International Article Number es un sistema de códigos de barras adoptado por más de 100 países y cerca de un millón de empresas (2003). En el año 2005, la asociación EAN se ha fusionado con la UCC (Uniform Code Council) para formar una nueva y única organización mundial identificada como GS1, con sede en Bélgica.

El código EAN más usual es EAN13, constituido por 13 dígitos y con una estructura dividida en cuatro partes:

• Los primeros dígitos del código de barras EAN identifican el país que otorgó el código, no el país de origen del producto. Por ejemplo, en Chile se encarga de ello una empresa responsable adscrita al sistema EAN y su código es el '780'.

• Composición del código: • Código del país en donde radica la empresa, compuesto por 3 dígitos. • Código de empresa. Es un número compuesto por 4 o 5 dígitos, que identifica al

propietario de la marca. Es asignado por la asociación de fabricantes y distribuidores (AECOC).1

• Código de producto. Completa los 12 primeros dígitos. • Dígito de control. Para comprobar el dígito de control (por ejemplo,

inmediatamente después de leer un código de barras mediante un escáner), numeramos los dígitos de derecha a izquierda. A continuación se suman los dígitos de las posiciones impares, el resultado se multiplica por 3, y se le suman los dígitos de las posiciones pares. Se busca decena inmediatamente superior y se le resta el resultado obtenido. El resultado final es el dígito de control. Si el resultado es múltiplo de 10 el dígito de control será 0.

Por ejemplo, para 123456789041 el dígito de control será:

• Numeramos de derecha a izquierda: 140987654321

• Suma de los números en los lugares impares: 1+0+8+6+4+2 = 21 • Multiplicado (por 3): 21 × 3 = 63 • Suma de los números en los lugares pares: 4+9+7+5+3+1 = 29 • Suma total: 63 + 29 = 92 • Decena inmediatamente superior = 100 • Dígito de control: 100 - 92 = 8

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 18

El código quedará así: 1234567890418.

Código de barras EAN-13. El primer dígito siempre se sitúa fuera del código. Además, el símbolo (>) se utiliza para indicar «zonas en blanco», necesarias para que los escáneres de códigos de barras funcionen correctamente.

El símbolo estándar está formado por una serie de 30 barras paralelas, de diferente grosor. En la parte inferior del símbolo se representa el mismo código en cifras para que sea legible. El símbolo es de tamaño variable. Su tamaño estándar es de 37,29 x 26,26 mm, pero puede variar en función de las medidas del envase o de la etiqueta. En estos casos la variación está entre el 0,8 y 2 veces el tamaño del código estándar.

EAN-8 El Código EAN-8 está compuesto por 8 dígitos, este código se utiliza en productos que por sus dimensiones no es posible asignarle un código EAN-13

CÓDIGO PAÍS CODIGO PRODUCTO DIGITO DE CONTROL

770 1234 0 Tabla 1. Composición del Código EAN-8

Cálculo Dígito de Control (Modulo 31) Los números pares se multiplican por 1 y los impares por 3, luego se suman los resultados de las multiplicaciones y se le restan al valor de la decena superior. Ejemplo:

7 7 0 1 2 3 4

7*3=21 7*1=7 0*3=0 1*1=1 2*3=6 3*1=3 4*3=12 21+7+0+1+6+3+12=50 50-50=0

Figura 12. Código EAN-8

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 19

EAN-2 Este código solo debe ser usado con revistas, periódicos o cualquier otra publicación periódica. Los dos dígitos suplementarios representan la edición de circulación de la publicación, en otros casos el número puede representar el mes o la semana del año, dependiendo de la frecuencia de publicación de la revista. Este código se usa, teniendo en cuenta que el código de barras es único para cada revista y no cambia con una nueva edición publicada. Para la codificación del código se realiza de la siguiente manera: Guardia Izquierdo, codificado como 1011 Primer dígito (Codificado de acuerdo a la tabla) Carácter separador 01 Segundo dígito (Codificado de acuerdo a la tabla) Para determinar la codificación de los dígitos, se toma el valor de dos dígitos y se divide por 4 y dependiendo del cociente de la división se toma la paridad del digito.

Cociente Paridad carácter 1 Paridad carácter 2

0 Impar Impar

1 Impar Par

2 Par Impar

3 Par Par Tabla de paridad para código EAN-2

Ejemplo: Valor 10 10/4=2 cociente 2

Guardia Izq. 1 (Par) Separador 0 (Impar)

1011 0110011 01 0001101

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 20

Decodificación EAN13 Vamos a explicar cómo funciona la codificación ean13.

En la codificación EAN13 tendremos 12 números más uno determinado por la paridad, es decir 13 números.

Cada numero está formado por 7 dígitos binarios, tendremos 12 números * 7 dígitos binarios cada uno = 84 dígitos, secuencia de ceros y unos.

Con los dígitos de control nos quedaría el siguiente esquema:

101 Parte Izquierda 01010 Parte Derecha 101

Si le sumamos los dígitos de control tendremos 95 dígitos.

Vamos a ver un ejemplo de cómo sería la decodificación:

Al segmentar el código de barras nos quedarían los siguientes dígitos con los siguientes bits.

Posición Binario Digito Paridad Guarda

2º Dígito

3 Impar

3ºDígito

1 Par

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 21

4ºDígito

5 Par

5º Dígito

6 Impar

6º Dígito

9 Par

7º Dígito

3 Impar

Guarda Central

8º Dígito

5

9º Dígito

1

10º Dígito

0

11º Dígito

7

12 º Dígito

7

13 º Dígito

6

Guarda Final

Procedemos a explicar cómo hemos obtenido la paridad y los dígitos

1.- Determinar la paridad.

Lo primero que debemos realizar es determinar la paridad, para eso miramos los dígitos de la parte izquierda (6 dígitos) y determinamos si tiene paridad PAR o IMPAR con la siguiente tabla.

DIGITO CODIFICACIÓN IZQUIERDA PARIDAD IMPAR PARIDAD PAR

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 22

0 0001101 0100111 1 0011001 0110011 2 0010011 0011011 3 0111101 0100001 4 0100011 0011101 5 0110001 0111001 6 0101111 0000101 7 0111011 0010001 8 0110111 0001001 9 0001011 0010111

Tabla 1 Codificación Izquierda

Quedándonos:

0111101 0110011 0111001 0101111 0010111 0111101 Impar Par Par Impar Par Impar

Si miramos la siguiente tabla vemos que el digito de control es 9.

SEGUNDO DIGITO

CODIGO DEL FABRICANTE 1 2 3 4 5

0 Impar Impar Impar Impar Impar Impar 1 Impar Impar Par Impar Par Par 2 Impar Impar Par Par Impar Par 3 Impar Impar Par Par Par Impar 4 Impar Par Impar Impar Par Par 5 Impar Par Par Impar Impar Par 6 Impar Par Par Par Impar Impar 7 Impar Par Impar Par Impar Par 8 Impar Par Impar Par Par Impar 9 Impar Par Par Impar Par Impar

Tabla 2 Paridad

2.- Determinar la parte izquierda.

Con la tabla 1 codificación izquierda determinamos los primeros 6 dígitos quedándonos

0111101 0110011 0111001 0101111 0010111 0111101 3 1 5 6 9 3 3.- Determinar la parte derecha.

Con la siguiente tabla determinamos los dígitos de la derecha

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 23

DIGITO CODIFICACIÓN DERECHA

0 1110010 1 1100110 2 1101100 3 1000010 4 1011100 5 1001110 6 1010000 7 1000100 8 1001000 9 1110100 Tabla3 Codificación Derecha

Quedándonos:

1001110 1100110 1110010 1000100 1000100 1010000 5 1 0 7 7 6

4.- Dígito de Control

Una vez obtenido todos los dígitos y obtenido el primer dígito calcularemos el código de control el cual nos indicara si la lectura es correcta o no debe coincidir con 13 digito obtenido

Nuestro código ha quedado así

9 315693 510776

El peso de cada dígito es 1-3-1-3-1-3-1-3-1-3-1-3-1. Para calcular el dígito de control , se sumarían los 12 primeros dígitos multiplicados por su peso de la siguiente forma: 9*1 + 3*3 + 1*1 + 5*3 + 6*1 + 9*3 + 3*1 + 5*3 + 1*1 + 0*3 + 7*1 + 7*3 = 114 como el código debe ser múltiplo de 10, la cifra que debemos sumar a 114, para que sea múltiplo de 10, es 6, con lo cual el código de verificación es el 6.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 24

Lector Código de Barras Un lector de códigos de barras es un dispositivo electrónico que por medio de un láser lee el código de barras y emite el número que muestra el código de barras.

Los códigos de barras se leen pasando un pequeño punto de luz sobre el símbolo del código de barras impreso. Solo se ve una fina línea roja emitida desde el escáner láser. Pero lo que pasa es que las barras oscuras absorben la fuente de luz del escáner y la misma se refleja en los espacios luminosos. Un dispositivo del escáner toma la luz reflejada y la convierte en una señal eléctrica.

Lectores vs Smartphones La tecnología de escaneo digital de códigos de barras utilizada en los escáneres comerciales está diseñada para escanear un gran número de códigos de barras en una rápida sucesión, con frecuencia en las peores condiciones de trabajo. Por otra parte, las cámaras de los smartphones tienen numerosas limitaciones técnicas.

Generación de imágenes a color vs. blanco y negros Los códigos de barras son blancos y negros, y los lectores de códigos de barras construidos con este propósito son dispositivos para blanco y negro. La cámara del smartphone es un generador de imágenes a color. Mientras que estas cámaras brindan imágenes de alta resolución, el tamaño relativamente pequeño de los píxeles de las imágenes implica que cada píxel es menos sensible que en el caso del generador de imágenes de códigos de barras tradicional.

Profundidad de campo La profundidad de campo es la distancia entre el plano máximo y mínimo en los que el lector es capaz de leer un símbolo del código de barras. Depende de cómo la cámara enfoque y de la cantidad de luz reunida para crear la imagen. Los escáneres de códigos de barras construidos con ese propósito normalmente tienen una profundidad de campo muy larga, a fin de que se escaneen los códigos con precisión desde una variedad de distancias sin la necesidad de enfocarse en el generador de imágenes.

Dependiendo de si la cámara del teléfono es fija o con enfoque automático, hay varios obstáculos para alcanzar la profundidad de campo necesaria.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 25

Las cámaras con enfoque automático permiten que los usuarios reúnan más luz, pero sólo pueden enfocarse en un área relativamente pequeña cada vez. Las cámaras de enfoque automático de los teléfonos demoran en enfocarse en el área deseada, y aportan una profundidad de campo relativamente pequeña. Esto genera problemas cuando se trata de escanear un código de barras desde un ángulo. A fin de obtener una profundidad de campo más grande, la cámara tendría que tener menor apertura, como en el caso de la cámara de enfoque fijo.

La cámara de enfoque fijo aporta una profundidad de campo larga, pero con menor apertura la cámara captaría menos luz. La captación de luz es importante porque determina con qué rapidez se puede escanear un código, y cómo tiene que estar la cámara de quieta para capturar una buena imagen de ese código. Con menos luz, la imagen puede degradarse a causa de la distorsión provocada por el movimiento.

Los escáneres de códigos de barras están basados en la tecnología de obturador global ( todos los píxeles capturan la luz en el mismo momento).

Las cámaras de los teléfonos utilizan lo que se conoce como tecnología de obturador de cortinas, lo que significa que cada hilera de la imagen se expone de a una a la vez en un movimiento de barrido. Eso es lo que crea artefactos distorsionados por el movimiento en las imágenes capturadas por estos teléfonos. La distorsión o inclinación de la imagen tendrá impacto en la capacidad del dispositivo para escanear e interpretar el código de barras y la tasa de éxito para escanear el código puede variar mucho según el usuario.

Los generadores de imágenes de códigos de barras aportan una profundidad de campo larga, y simultáneamente brindan suficiente iluminación para eliminar la distorsión provocada por el movimiento.

Iluminación La distorsión provocada por el movimiento se puede corregir utilizando iluminación artificial. La mayoría de los teléfonos con cámara toman imágenes usando la luz ambiental, lo que afecta los tiempos de exposición. Los generadores de imágenes de códigos de barras utilizan iluminación con pulso LED.

Un breve pulso de luz brillante ilumina el código, permitiendo que el escáner capture la imagen sin distorsión provocada por el movimiento. Los flashes que se utilizan en las cámaras de los consumidores, por otro lado, a menudo producen imágenes sobreexpuestas que decoloran la imagen y podrían tener un impacto en la precisión del escaneo.

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 26

Instalación Opencv 3.1.0 Android Para el funcionamiento de la aplicación hay que instalar OpenCV Manager , la versión es 3.1.0.

El Opencv Manager de la Play Store contiene errores, que puede provocar el mal funcionamiento de la aplicación, es necesario realizar la instalación manualmente desde la apk adecuada al hardware disponible en la carpeta <opencv>/apk, previamente descargada desde http://opencv.org/downloads.html o desde la carpeta https://drive.google.com/open?id=0BwaoilZDI7K9MU4wdnlWSHBQd1U que he dejado en google drive

Para determinar el paquete adecuado se puede usar la app Android System Info o similares.

Listado de fuentes entregadas Los documentos entregados se han subido a Poliformat.

Se ha subido los siguientes documentos:

- Apk escaner.apk

- Memoria. Escaner.pdf

- Código Fuente Escaner.zip

Carpeta compartida de Google Drive https://drive.google.com/open?id=0BwaoilZDI7K9cEVOTTY2RERNdFU

-ScreenCast https://drive.google.com/open?id=0BwaoilZDI7K9cExFUC1EN3ZYMkE

-Código Fuente : Escaner.zip

-Apk : escaner.apk

-Memoria Escaner.pdf

-OpencvManager 3.1.0 Apk: Carpeta: Opnecvapk con apk para diferentes procesadores

Proyecto: Escáner Alumno: Carlos Cuesta Alonso

Máster en Desarrollo de Aplicaciones sobre Dispositivos Móviles 27

Manual de usuario La aplicación es muy sencilla de utilizar, por defecto al arrancar calcula cual es la resolución máxima de móvil así como los modos de cámara más óptimos de los que dispone. Establece un nivel de zoom medio que se puede modificar en las opciones, la utilización de la antorcha la debe determinar el usuario.