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?

  • 1
    $\begingroup$ 1D or 2D? What symbology (i.e. standard)? $\endgroup$ – 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]

Mathematica graphics

(* 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,
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]])


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

  • $\begingroup$ I can't get this to read other examples (eg here) $\endgroup$ – cormullion Sep 27 '13 at 8:31
  • $\begingroup$ @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` $\endgroup$ – Dr. belisarius Sep 27 '13 at 11:57
  • 4
    $\begingroup$ @DavidG.Stork This code implements a barcode reader, not a creator as you could have found if you cared to test it. Enough. $\endgroup$ – Dr. belisarius Sep 27 '13 at 17:11
  • 1
    $\begingroup$ 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. $\endgroup$ – David G. Stork Sep 27 '13 at 17:29
  • 2
    $\begingroup$ @cormullion You may use a small tripod to hold the camera still $\endgroup$ – 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:


It uses ZXing library (http://code.google.com/p/zxing/).

You can alse create barcode using BarcodeImage as these examples: enter image description here enter image description here

  • $\begingroup$ How do you know it's using the zxing library? (I missed this in the docs and I'm curious) $\endgroup$ – Ajasja Dec 5 '13 at 12:32
  • 1
    $\begingroup$ Secret!.. I'm a beta tester and exchanged some mails with the developer. :) $\endgroup$ – Murta Dec 5 '13 at 13:56
  • 6
    $\begingroup$ Very useful for a lot of Mathematica users in the supermarket business :) $\endgroup$ – Dr. belisarius Nov 19 '14 at 23:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.