Screenshots
April 2009 - pyDataMatrixScanner
Simon Wood created a webcam-based system for scanning conference ID badges using Python and libdmtx. He presented the software at COSSFest 2009 and released the code as pyDataMatrixScanner. I have used the software and yes, it's every bit as cool as it sounds. Realtime webcam scanning has received a lot of interest, but this is the first public code release using libdmtx that I'm aware of. Please contact Simon if you want details or are interested in helping to further enhance the project. (Contact me directly for Simon's email address if needed)
February 2008 - pyDecoder: libdmtx Running on Symbian S60
I received a link to another video of libdmtx
running on a mobile device -- this time on Symbian S60! According to the author, the library was compiled for the Symbian S60 platform as a DLL and loaded in the Python S60 interpreter to build a simple datamatrix camera decoder. The work was done by GeoWeb and Mobile Experience Lab, hosted in CRS4. This is really awesome stuff -- Thanks for the video, Davide!
December 2007 - iDMTX: libdmtx Running on an iPhone
I'm not going to lie ... this is the coolest thing I've seen in a long time. Martin Pittenauer from www.codingmonkeys.de wrote a prototype barcode scanner for the iPhone using libdmtx
! I think that his application, iDMTX, is the first program to run libdmtx
on a mobile device, so it's a bit of a milestone. Click on the thumbnail to see iDMTX in action. (thanks for the video, Martin!)
October 2007 - Region Detection Overhaul
This was my Mount Everest of sample images (see screenshot for some reasons why). I was never satisfied with the original region detection in libdmtx
so I finally rewrote it from scratch using everything I learned the first time around. There are several reasons why the old version was unable to read the barcode shown here. Surprisingly, the new logic is actually smaller and simpler than before even though it is far more robust.
September 2007 - Those Wacky Rectangles
I personally don't find them terribly useful, but rectangular barcodes are included in the Data Matrix ISO spec -- and therefore they are supported in libdmtx
. Even when they use multiple regions (like in the screenshot) these barcodes only hold up to 49 data codewords.
August 2007 - New Multi-Region Barcode Support
libdmtx
now has multi-region barcode support, enabling reading and writing of all previously unavailable square barcode sizes. Version 0.3 and earlier only supported up to about 44 bytes, so this feature gives a much-needed bump in storage capacity. The example shown here encodes the number PI to the 1,000th decimal place.
August 2007 - New Ideal Encoding Optimizer
These barcodes all store the same message but are encoded with different internal representations. The left-most barcode in the image was created using the new "Optimize Best" feature, which guarantees the smallest possible valid Data Matrix. In other words, if you find a different encoder that produces smaller barcodes, then either my logic is broken or their barcodes are invalid. :) Please note that the ISO specification provides a reference algorithm that will usually produce the smallest result, but the optimizer in libdmtx
was designed from scratch to guarantee optimal size. As far as I know, this feature is unique to libdmtx
.
July 2007 - Mosaic Concept Revisited
Under poor lighting conditions digital cameras often have trouble distinguishing between similar colors like red vs. magenta or blue vs. cyan. Naturally, this creates a problem for color barcodes that rely on this distinction to scan properly. One solution is to avoid troublesome colors altogether by blocking out certain module locations in the final layer to limit the number of distinct colors displayed. The mockup shown here would achieve ~2.5 times the storage capacity of a same-sized standard Data Matrix, and has only black and white modules around its perimeter just like a standard Data Matrix symbol. This means we can use the standard libdmtx region detection logic without modification. Like before this is just a concept, but if it performs well I could see it being used in mobile applications to compensate for lost capacity when suboptimal camera optics limit the maximum reliable symbol size.
June 2007 - My Dog Enjoying the Halted Status
It's often frustrating that I can't send out a quick bugfix release to address all of the known problems with v0.3. But on the flipside, the temporary halt in distribution has given my dog some extra fetch-playing time this summer. When not playing fetch I have implemented many fixes and a couple big enhancements since the last release. Now if someone can just tell me why dogs only truly enjoy a tennis ball after it gets really gooey.
October 2006 - Non Standard Mosaic Concept
This is a concept that combines multiple Data Matrix barcodes into one image by using the red, green, and blue color channels independently. It's not implemented in the main tree yet, but I quickly hacked a version together that decodes it perfectly. In theory we can split more than 3 ways, but the method shown is clean and simple.
April 2006 - Piece of Mail
I've noticed that the USPS has increasingly been printing Data Matrix barcodes on envelopes as part of the normal delivery process. When I see stuff like this it drives me crazy not knowing what it says. Turns out it says "2669394000020000CI". Snore. And yes, that's my thumb.
March 2006 - Mostly Decoding a Barcode
At this point the library still didn't know how to decode a Data Matrix barcode even after finding it and reading the encoded bit information. The region detection logic was basically working, but sometimes required a few tweaks of the mouse for the region to be detected completely.
February 2006 - Calculating Sample Locations
The blue dots in the image are sample locations from which pixel colors will be read. These locations are calculated by transforming a simple grid pattern into the coodinate system of the barcode in the original image. In fact, libdmtx
doesn't ever copy, buffer, or filter images. Instead it builds and refines a transformation matrix that serves as a mathematical "lens" through which if you view the original image it will look perfectly aligned and square.