2010-08-17 23 views
5

Como proyecto favorito/experiencia de aprendizaje (esto no es tarea) estoy trabajando en un software para reconocer códigos de barras de una fotografía. No busco software o una biblioteca que lo haga; en cambio, lo estoy usando como un ejercicio de aprendizaje del que estoy escribiendo y publicando en Codeplex.Reconocimiento de códigos de barras con AI

I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex) y la versión UPC A/E debería aparecer en breve. Sin embargo, tengo dos áreas que me preocupan. Primero está en la decodificación de códigos de barras que están en una imagen borrosa o con poco contraste, etc. Segundo, es simplemente encontrar el código de barras real en una imagen más grande (ahora mismo debe darme una foto del código de barras).

Tengo la corazonada de que algún tipo de IA me va a ayudar aquí. Jugué un poco en el pasado con algoritmos genéticos y tomé un curso hace años sobre IA así que no es totalmente extraño para mí, pero no estoy muy seguro de por dónde empezar.

¿Qué tipo de algoritmo es el más adecuado para este tipo de problema? ¿Alguna lectura recomendada o código para el trabajo de IA gruñidos? Sí, quiero entender lo que está sucediendo, pero no necesariamente quiero bajar al nivel de codificación de los tipos, etc.

+3

Tal vez una red neuronal? No lo sé. Tal vez solo me gustan las redes neuronales. La IA me dijo que me gustaran. Si no. –

+0

@ fire.eagle: ¿Algún enlace o punteros para mí? Las búsquedas web en "Redes neuronales" y "ANN" son demasiado amplias. :) – ctacke

+0

Supongo que has visto la aplicación RedLaser para iPhone? –

Respuesta

8

Sugeriría buscar propiedades que tenga un código de barras. Algunos de los que tengo en mente son:

  1. histograma de colores muestra dos colores distintos en aproximadamente una distribución uniforme
  2. Haciendo un hough transformation encuentra muchas líneas paralelas
  3. El grosor de las líneas tienen dos dimensiones distintas.

¿Algún otro?

Al tener esto, dividiría la imagen en pedazos y haría una clasificación con estas características, luego combinaría los resultados para calcular una probabilidad si la pieza contiene un código de barras o no.

Para su segundo problema (imagen borrosa), le sugiero que calcule el 1st order derivative de los valores en gris y luego detecte los bordes de las líneas en este espacio. El máximo de la derivada es menor si la imagen está borrosa, pero debe ser detectable hasta cierto factor de desenfoque.

¿Esto te ayuda?

0

No necesita ninguna técnica específica de AI o softcomputing. Debe aplicar la técnica de procesamiento de imágenes para mejorar la calidad de la imagen o aislar el código de barras de una imagen más grande. Puede usar Matlab para prototipos y obtener más información sobre el procesamiento de imágenes.

+0

¿Qué clase de "técnica de procesamiento de imágenes"? También estoy escribiendo código aquí. Tengo una imagen tomada con mi teléfono celular, quiero volver una cadena. Matlab no es tan aplicable en esa fórmula por lo que puedo ver. – ctacke

+0

Matlab es una herramienta maravillosa para el procesamiento de imágenes y para explorar y encontrar la solución que se adapte a sus necesidades. Hay toneladas de filtros y funciones. El estado del arte de la visión por computadora moderna se condensa en la biblioteca de procesamiento de imágenes Matlab. Una vez que haya encontrado la mejor solución, la traduce en el lenguaje de programación y la plataforma de su elección. No puedo decirte cuál es el mejor enfoque para resolver tu problema. Debes experimentar un poco. –

4

Como mp ya lo mencionaste, no es necesario que necesites ninguna técnica real de IA para ello. Eche un vistazo al capítulo 12 de Real World Haskell. Implementa un reconocedor de código de barras casi completo. El código de muestra está en Haskell, pero hay muchas explicaciones, por lo que probablemente puedas entender las ideas y trucos incluso sin la experiencia de Haskell.

Si quiere resolverlo con AI, entonces la mejor opción es probablemente usar ANNs. Para el problema dado, recomendaría usar una técnica bastante avanzada llamada HyperNEAT.Ver mi explicación (y enlaces) como la primera respuesta a la cuestión de forma Neural Network Size...

probablemente me gustaría utilizar dos o tres redes diferentes,

  • La primera de ellas para encontrar el código de barras en el cuadro más grande. Una salida de neurona por píxel/conjunto de píxeles, el valor de salida es la confianza si ese píxel parece ser parte de un código de barras. Con base en el resultado me gustaría utilizar alguna transformación en la imagen para convertirlo en un "estándar" formato (x * y rectángulo)
  • Si tiene dificultades con la búsqueda de la ubicación del código de barras utilizar un segundo. Alimenta el resultado de la primera, y pídele que dé las coordenadas de las dos esquinas. Sin embargo, no estoy seguro de que sea muy fácil evolucionar este.
  • último sería trabajar en el formato normalizado, las neuronas de salida para cada línea (o cuadrado, si se trabaja con un código de barras 2D posiblemente), diciendo que si la superficie en cuestión debe considerarse negro o blanco.

Probablemente también ayude a hacer un preprocesamiento de la imagen, p. los que se describen en RWH.

+0

HyperNEAT suena realmente interesante –

+0

Sí, es una técnica muy poderosa. La investigación es bastante intensa y a menudo presentan extensiones/aplicaciones muy creativas. –

Cuestiones relacionadas