Matrix Codes & Visual Code Recognition on Cellphones

As mentioned briefly before i’m currently doing some work in the area of visual code recognition, on cellphones to be more specific. After some research i’m a little overwhelmed, lots of activity in this area and it seems that most people are happily working on their own funky standards/implementations/platforms (it’s often difficult to figure out what they’re actually doing behind all the marketing-speech) for quick & easy profit.
Anyway, this is a list of 2d barcode standards and platforms which are used for applications on cellphones, with brief commentary and roughly in order of usefulness to me. This list is by no means complete, suggestions and corrections are more than welcome. I’ll update this list as i come across new stuff.
A few words of caution: if you don’t think that barcodes are totally hot & sexy this will all seem a bit dull.
Before we get to the bulletpoints, a few introductory words about 2d barcodes. I guess we’re all familiar with traditional barcodes as they’ve been plastered on pretty much all consumer products for the last few decades. 2d codes basically take the concept of barcodes to a new dimension: by storing information in 2 dimensions it’s possible to increase storage capacity. 2d codes typically fall into one of two categories: stacked barcodes and matrix codes. Stacked barcodes are just what the name implies, several traditional 1d barcodes stacked on top of each other. Matrix codes use a 2d matrix to encode information in both horizontal and vertical directions for improved storage density. Most of the things on this list use matrix codes.
So let’s start with the two established, well-documented, more-or-less open, widely adopted standards that you’ll come across repeatedly when researching this topic:

  • QR CodeQR Code (wikipedia) was developed by denso wave and released in 1994. The specification is disclosed and the patent right owned by denso wave isn’t exercised. It has been approved by various standards bodies over the years, most notably it’s an approved iso standard (ISO/IEC18004) and availabe for purchase in their store (search for 18004). QR code symbols comprise of three position detection patterns located at corners of the symbol, a data area and a quiet zone outside of the symbol. The symbol size ranges from 21×21 to 177×177 modules (increases in steps of 4 modules per side) and it supports four error correction levels using reed-solomon code. Symbols are square in shape. QR codes can store up to 7089 numeric characters, 4296 alphanumeric characters or 2953 bytes, a comprehensive table showing maximum data capacity for each version & error correction level is available here. Another related standard developed by denso wave is micro qr code. Micro qr code sacrifices storage capacity for a smaller print footprint. It has only one position detection pattern, supports fewer levels of error correction and ranges in symbol size from 11×11 to 17×17 modules. Micro qr code is an approved JIS standard (JIS X 0510) and just as qr code its specification is disclosed and the patent right owned by Denso Wave is not exercised.
    Though originally intended for inventory management and logistics, qr codes have become popular for consumer-oriented applications in japan due to increased inclusion of qr code readers in japanese cellphones. Typical applications strive to ease the burden of data-entry on cellphones by encoding urls or contact details. Encoding schemes vary between different operators but are typically just direct qr code encodings of text following a special syntax; docomo’s encoding scheme is described here (of note: only qr code versions 1-10 are supported) and this tool creates qr codes compatible with various operator schemes. Because of qr code’s widespread adoption in consumer-oriented applications they’ve garnered quite a lot of attention in the last few years, even though there’ve been few signs of adoption outside japan.
    Some promising open source software projects for encoding and decoding qr codes exist, typically of japanese origin and unfortunately mostly lacking english documentation. Two promising projects are this java library for both encoding and decoding qr codes and these scripts for creating qr codes (the japanese version of the site seems to be more extensive).
  • Data Matrix CodeData Matrix (wikipedia) was invented by rvsi acuity cimatrix and has been placed in the public domain. It’s an approved iso standard (ISO/IEC16022) and availabe for purchase in their store (search for 16022). Data matrix symbols comprise of two solid borders as handles for alignment, two broken borders on the opposite corner as syncs for module sampling, a data area and a quiet zone outside of the symbol. Additional handles and borders are added with growing matrix dimensions. The symbol size ranges from 10×10 to 144×144 modules and it supports reed-solomon error correction. Symbols can be square or rectangular in shape. Data matrix codes can store up to 3116 numeric characters, 2335 alphanumeric characters or 1555 bytes.
    Data matrix codes haven’t garnered the same public attention as qr codes and rvsi acuity cimatrix seems to primarily promote their use in industrial, military and governmental fields. However if you look under the hood of several visual code recognition projects in the cellphone area you’ll find data matrix at their core, the probably most prominent of these projects being semacode. Another example is active print which uses data matrix as well as qr codes.
    Unfortunately i’m not aware of any open source software projects for encoding or decoding data matrix codes. Mike Laughton is developing an open source library for creating and decoding data matrix codes. A bunch of closed-source applications and tools by semacode and active print are out there, but we’ll get to these later in this post.

If you’ve made it this far i have good news for you: it’ll be a bit less technical and a bit more practical from here on. Now that we’ve covered the two most prevalant matrix code standards used in visual code recognition applications for cellphones it’s time to move on to a few concrete projects. Some are based on above standards, others use their own formats. Some are commercial, some are research projects, some are both:

  • Active print is a project led by hewlett-packard and originated from hp labs in bristol under the name active posters in 2004. Its focus seems to be on research and like many of the projects listed here it explores linking of printed materials to online resources. It uses both data matrix and qr codes as underlying standards for encoding urls directly. They have a series60 application named glass available (download) which i couldn’t try yet, but it seems it reads both data matrix and qr codes. They also have a simple web tool for creating your own data matrix or qr codes. A list of projects using active print is available here. They mention in their faq that they may add support for other code formats in the future and their faq is actually a very worthwile read giving a good overview of use-cases and hardware limitations with visual code recognition on cellphones. Their website makes me like them and their work a lot. Mhh, warm fuzzy feeling inside, must be all the pink.
  • Semacode is probably one of the best known projects in this area. They’re positioning themselves as a platform provider for linking the physical to the virtual and you can get a lot of information about the underlying technologies in this technical overview. They’re using data matrix codes for direct encoding of urls, basically the same as active print without qr codes but with added media buzz. They have a simple web tool for creating semacodes (data matrix codes) as well as a free tagger sdk (java) for writing your own code creation tools. There’re also several standalone readers for java and symbian phones and reader sdks in free and commercial versions, though i’m not quite sure about the criteria for qualifying for one or the other of the two versions. A list of applications using semacode is available here and there are other noteworthy applications missing from that list, such as semapedia, eruv and semanote. There’s also a guide for creating your own applications on their site.
  • Kaywa offers a reader application for decoding both datamatrix and qr codes. You can also create your own qr codes and datamatrix codes.
  • Visual Codes is a research project and there are several interesting demo applications for series60 phones available. It uses its own matrix code format designed and implemented by Beat Gfeller and Michael Rohs. The code format is relatively simple (though in all fairness highly appropriate for its applications) and encodes 83 bits or 76 bits using hamming code for error correction. There’s also a (proposal for a?) naming service for visual codes, but i’m not quite sure what to make of that.
    The interesting thing about visual codes is that they’re not just trying to create printable hyperlinks, but also explore visual code recognition as an input mechanism beyond mere data entry. Matrix codes are not only great for storing data, they’re also comparatively easy to recognize in a picture. Reading a matrix code can give you immediate feedback about the distance and relative position between code and camera, and analyzing a stream of pictures allows you to track tilting, rotation and relative movement of the phone. Of the many papers available at the visual codes site i found the following particularly interesting: using camera-equipped mobile phones for interacting with real-world objects is a nice introduction to the whole project, a conceptual framework for camera phone-based interaction techniques defines interaction primitives and proposes a framework for combining these primitives to create more expressive interactions and real-world interaction with camera-phones presents some technical details of the recognition algorithm.
    The accompanying sourceforge project hosts symbian/c++ and java source code for encoding and decoding visual codes, and encoding scripts in various scripting languages.
  • Shotcode was originally developed by high energy magic under the name spotcode and later sold to op3. Instead of a 2d matrix it uses circular barcodes for data encoding, which are arguably more esthetically pleasing than traditional matrix codes. Once again it’s aimed at linking printed materials to online content (sounds familiar by now, right?). They’re also positioning themselves as a platform provider, but with a much tighter grip on the whole process than for example semacode it seems. Juicy technical details are scarce and their code format seems to be closed so far, but i believe i read somewhere that shotcodes encode only 42 bits of data, which suggests that a central lookup service is needed to resolve shotcodes. If you want to create shotcodes you have to sign up for a free or pro account, with the free account being very limited in use and pro accounts obviously not targeted towards individuals with their pricing – this is not the mobile web i’m anticipating. Reader software is available for several phones, alas not mine so i couldn’t try it myself so far. Despite the closed nature of shotcode there are signs of openness – the people behind shotcode have recently released phonifier, an open source project for optimizing web pages for mobile phones.
  • Colorcode, another attempt at linking the physical and virtual, originated in korea and uses multicolored matrix codes. This suggests higher data density, but i imagine it also increases demands on camera quality. The service seems to be based on a central lookup model.
  • PaperClick is interesting because it kinda turns around the “established” approach of linking physical objects to online data. Where most other projects seem to be mostly concerned with issuing new codes for tagging, paperclick goes the other way round: you register your existing barcodes (and they support several standards) with them and augment these existing barcodes with additional information. An interesting approach and one where a central lookup model actually makes sense.
  • scanLIFE – i can’t say much about them because their website not only lacks technical information, but is barely functional yet. They’re affiliated with scanbuy. Their so-called “eZcodes” look suspiciously like the visual codes developed by Beat Gfeller and Michael Rohs (11×11 modules, same guidebar pattern). Seems like a shady operation to me… I retract that last statement – someone from scanbuy got in touch and informed me that they are the worldwide exclusive licensee of visual code and have renamed it eZcode. My sincere apologies to scanbuy.

So that’s it for today, thanks if you’ve made it this far. As mentioned above, if you have any suggestions, corrections or other feedback, mail me at christoph [at] engadgeted [dot] net, i’ll update this post. Many thanks to Chris Heathcote whose qr codes update got me started on these tracks and provided many invaluable pointers.

# Sep 18, 2005 11 comments

Would you like to comment?
Tell me what you think on Twitter: