# Is there a Mathematica barcode reader?

Is there a Mathematica barcode image reader (much like TextRecognize) that allows the user to enter an image of a barcode and then read it to get an output string?

-
1D or 2D? What symbology (i.e. standard)? – DavidC Sep 27 '13 at 1:57

Here is a bare bones, non-robust, use at your own risk, etc. code39 reader

(*get image *)
i = Binarize[Import@"http://i.stack.imgur.com/Cx3JD.png", .7]


(* Char encodings from Paul's article - See link bellow *)
c1 = IntegerDigits[#, 2, 9] &@{168,42,148,138,133,388,162,52,289,97,352,49,304,112,37,292,100,265,
73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208};
c2 = Characters["\$%*+-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"];

(*binary code for the image, drop the white flanks at the ends*)
code = Join @@ Split[Round /@ Mean /@ Transpose@ImageData@i][[2 ;; -2]];

(*get strip widths... err lengths... whatever,dropping the start/stop marks*)
lengths = Most /@ Partition[Length /@ Split@code, 10];

(*determine what is a wide and a thin strips are*)
{max, min} = {Max@#, Min@#} &@lengths;
f = Nearest[{{max} -> 1, {min} -> 0}];

(*convert from wide/thin encoding to chars*)
StringJoin @@ (Join @@@ Map[f, lengths, {2}] /. Thread[Rule[c1, c2]])


"CODE39"

Table and encoding shamelessly stolen from Paul Abbott's article on "The Mathematica Journal"

-
I can't get this to read other examples (eg here) – cormullion Sep 27 '13 at 8:31
@cormullion Yep, that image hasn't white flanks. But the code works OK if you pad it. Try with i = ImageTake[ImagePad[Import["http://worldbarcodes.com/wp-content/uploads/39123439-‌​code39.gif"], {{40, 40}, {0, 0}}, White], 100] instead – Dr. belisarius Sep 27 '13 at 11:57
@DavidG.Stork This code implements a barcode reader, not a creator as you could have found if you cared to test it. Enough. – Dr. belisarius Sep 27 '13 at 17:11
You are correct. The code you posted looked much like (http : // www.mathematica - journal.com/issue/v9i2/contents/Tricks9 - 2/Tricks9 - 2 _ 2. html) and the output appeared to be a crisp barcode (not a .jpg input image), so I mistakenly assumed yours was the same (creator) code. My mistake. – David G. Stork Sep 27 '13 at 17:29
– Dr. belisarius Sep 27 '13 at 18:48

Yes!... It's new in version 10. Here is the documentation page

The syntax is very simple:

BarcodeRecognize["image"]


You can alse create barcode using BarcodeImage` as these examples: