2 views

As a pet project/learning experience (no this is not homework) I'm working on software to recognize barcodes from a photograph. I'm not looking for software or a library that does it - instead I'm using this as a learning exercise that I'm blogging about and will post up on Codeplex.

I have code that successfully recognizes EAN13 barcodes (which I published on CodePlex) and UPC version A/E should follow shortly. I have two areas that I'm concerned about, though. First is in decoding barcodes that are in a picture that is bit blurry or with poor contrast, etc. Second is in simply finding the actual barcode in a larger picture (right now you have to give me a photo of just the barcode).

I have a gut feeling that some form of AI is going to help me out here. I played a bit in the past with genetic algorithms and I took a course ages ago on AI so it's not totally foreign to me, but I'm not quite sure where to start.

What type of algorithm is best suited to this type of problem? Any recommended reading or code for the AI grunt work? Yes, I want to understand what's happening, but I don't necessarily want to go down to the level of coding the sorts, etc myself.

by (108k points)

A barcode typically consists of a start and stop pattern on the edges. In between these patterns, each digit has a unique representation of vertical lines. The last digit of many barcodes is usually a check digit that is only used by the barcode reader to validate the reading; it adds no information. You can refer to this thesis, which will tell you about the Reading barcodes with neural networks.

The purpose of the thesis is to produce a barcode recognition system that can easily interpret the encoded number in a picture of a physical barcode that is an image recognition task.

You can also solve the given problem by using a quite advanced technique called HyperNEAT which is a generative encoding that evolves artificial neural network (ANNs) with the principles of the widely used NeuroEvolution of Augmenting Topologies (NEAT) algorithm.