Ognjen Regoje bio photo

Ognjen Regoje
But you can call me Oggy


I make things that run on the web (mostly).
More ABOUT me and my PROJECTS.

me@ognjen.io LinkedIn

Quick rundown of barcodes and marker systems

#qr #summary

When I visited Egypt, I noticed these stickers that looked liked machine-readable code.

Machine codes in Egypt

A closer look:

Machine codes in Egypt

The guide didn’t know what they were exactly but said the University of Warsaw that’s doing the restorations put them there.

Long story short

After Googling several permutations of “university of warsaw codes”, I found that they are a type of circular data matrix code used for machine vision. Mystery solved. Which one? I can’t exactly tell. So, mystery half-solved.

Long story long

The long story is that I found an article that proposes a new type of code. In the process of doing so, it describes existing ones. Interestingly, it was published in August 2021, just one month before my trip.

And in the process of reading through them, I came across a fascinating genealogy of sorts of machine-readable codes.

The barcode

It all starts with the humble linear barcodes for which there are several standards. They’re ubiquitous.

Barcode

Linear barcodes evolved into 2D, or matrix barcodes. Our favorite current iteration of a 2D barcode is the QR Code. Another common one is the Data Matrix often seen on electronics. SemaCode is a Data Matrix specifically for URLs.

SPARQCode is an encoding standard for QR codes that even closed funding in 2010 but it seems defunct now.

Code collage

Interestingly, my Samsung phone was able to scan the examples on the Wikipedia pages of all of the above.

The Aztec code, however is not an implementation of the data matrix so my phone couldn’t scan it. It is apparently used on some tickets, particular rail and some documents. I don’t have any documents or tickets with it.

Aztec code

The codes then start diverging.

MaxiCode

MaxiCode

The MaxiCode was invented by the UPS and can contain about 93 characters.

The central part is more structured and contains information relevant for mail, ie. the post code, country code and type of service.

The centered symmetrical bullseye is useful in automatic symbol location regardless of orientation, and it allows MaxiCode symbols to be scanned even on a package traveling rapidly.

ShotCode

Shot code

They consist of “only” 40 bits of data. There seem to have been some attempts to commercialize it, but not very successful and it seems defunct now.

High Capacity Color Barcode

High Capacity Color Barcode

Developed by Microsoft and initially marketed as the Microsoft Tag, although that branding has been discontinued.

It’s main advantage over QR codes is the increase in density.

I remember the fanfare when it was released but it never really took off.

Bokode

Bokode

A bokode uses a lens, and in some cases an LED that requires a power source, to miniaturize a data matrix code.

That’s really interesting. In the picture above it uses an LED with a power source but apparently there are also versions that have a lens and work by changing the focus on the camera. Obviously that makes it more difficult to scan it automatically.

Fiducial marker systems

The previous examples are generic codes that can encode any data.

They then evolved into fiducial marker systems that optimized for use in computer vision.

ARToolKit

ARToolKit

ARToolKit, ARToolkitX and ARToolKit+ are all iterations of what looks basically like a QR code where the white quiet zone is replaced with a black one.

Docs are here

TRIPtag

TripTag

A TRIPtag consists of two concentric black-colored rings in the middle, which are also called the bull’s eye.

TRIPtags can represent IDs between 1 and 19.683

The reason why concentric rings were chosen for identifying objects and their locations is that round shapes are not as common in man-made environments as square and rectangular shapes. Furthermore, the identification of round shapes is easier and less CPU-intensive than the identification of rectangular shapes. To extract the 3D position of a tagged object and its orientation it is necessary to use the known size of the tag and to calculate its perspective projection.

Smartlab

CanTags

CanTag

I think the codes I saw were either CanTags or TRIPTags.

Neimark and Foxlin

Neimark and Foxlin

Described in the very dense paper linked above.

ARTag

Similar to ARToolKit. Website is down. There is mention of it being used on the Mars Science Laboratory, but “it can be used in the future”.

reacTIVision

reacTIVision

reacTIVision is an open source, cross-platform computer vision framework for the fast and robust tracking of fiducial markers attached onto physical objects, as well as for multi-touch finger tracking.

Very interesting-looking. Last release on 18 May 2016.

FourierTag

FourierTag

Fourier tag has the beneficial property that the bit string it encodes has variable length as a function of the distance between the camera and the target.

CALTag

CALTag

[…] a self-identifying marker pattern for camera calibration

AprilTag

AprilTag

AprilTag is a visual fiducial system, useful for a wide variety of tasks including augmented reality, robotics, and camera calibration.

AprilRobotics seems very active and the Github has had recent updates.

RUNE-tag

RUNE-Tag

It’s main advantage is

estimation of the marker even with severe occlusions

Github last update 5 years ago, so it seems to be purely academic.

CCTag

CCTag

Particularly interesting because they work based on the thickness of the rings. And while they seem to be able to encode only a limited amount of information, they can be read while significantly blurred.

Github seems active.

Others

There are also several others that I didn’t manage to find much information about. (Granted, I didn’t look very hard.)

  • CyberCode Very limited capacity of only 24 bits.
  • VisualCode
  • SIFTTag
  • ArUco
  • ChromaTag
  • BullsEye