JAB Code – A high-capacity 2D color bar code
github.com
github.com
2d barcodes are used for cradle-to-grave inventory tracking by systems like Glovia and SAP. everything from transmission gears to soda pop are tagged during manufacture with numerous 2d barcodes that change at different stations, and at different times.
it doesnt matter what your new standard claims to achieve, it is useless without industry adoption. Toyota, Honda, Yamaha, Ford, Dell, and countless other manufacturing titans have invested collective billions into the QR implementations of their factories and arent going to re-tool just because your standard has colors.
QR is also massively resilient to failure. Try this experiment: cut a QR code in half, try to read it. It will succeed. This resilience is pivotal in harsh environments and especially during international/trans oceanic shipping.
black and white QR can be engraved on shipping containers and is resistant to corrosion, solvents, and the environment around it. QR codes are regularly burned at thousands of degrees as part of the heat treatment process for hardened steel, and still perform. Vision systems for forklifts and robotic cranes at shipping yards (most are robotic yards these days) rely on near/far vision systems developed by Intermec and other companies to read a code the size of a postage stamp from up to 150 meters away.
The codes use reed-solomon ECC and the symbology spec has different levels of error tolerance ranging up to a max of ~30% errors. That's certainly robust but it still requires a controlled optical setup to avoid operator frustration. Sometimes, in some applications, a nice big 1D barcode is better. Your 150 meter postage stamp example is an extreme use case that requires a lot of setup to work properly.
This color barcode appears to be an effort from a respected institution to increase information density. It doesn't have to be immediately accepted by major manufacturers to succeed. It just has to solve some problems for some applications. I think it's a compelling new symbology.
I work in manufacturing too.
This is being done to improve self check out speed (no more having to find the bar code) and help with tracking receipt-less returns (this box of cereal was purchased at our store).
Think of the impact on forensics when every single article contains its source of origin.
Time to start a company selling an invisible privacy spray for your cereal box that coats it in UV ink and obscures the original invisible barcode...
Tagging things during manufacture is a different application area, with different constraints and requirements. Bar codes are not gone because QR codes are here, QR codes won't be gone because color codes appear.
Personally, I think QR codes are just fine for manufacturing but as for encodings meant for end-users, I think we should be focusing on making them more human-readable or at least visually comparable, without sacrificing bit-depth.
Still, this tech was really neat to play around with and I hope something good comes out of all the work put into it.
So for reference, QR codes are specified up to 177 pixels wide, and at that size they can hold around 2KB with medium error correction.
But for practical use you probably want half that width, so a 400 byte payload is fine but not much more.
You're much better off using the QR code to encode a unique key which points to a record of the desired size in some database in a networked system.
Edit: this is actually a discussion I've had in a professional context pretty recently.
I'm sure you understand why this is not going to work the same way as reading the actual public key. Not only it needs a network, but it also is susceptible to stealing the values from the database by just generating the (short) unique keys.
I could only get it into a 141x141 by dropping error correction right down to 7%, but under ideal conditions (from my monitor to an iPhone) it reads reliably, as shown. I tried a 4096 bit key, but I couldn't (as text) get it into even a 171x171 QR Code at minimum error correction without truncating (and even in ideal conditions, my phone won't reliably read 171x171 resolution QR codes...)
Even a very small QR code fits enough bits to prevent that.
> it needs a network
It depends on what the key is for. For many purposes a hash of the public key is sufficient.
A barcode is not often used as the sole storage medium in an application. Typically it's used in conjunction with a piece of software that can connect to a database. In a manufacturing setting this could be a piece of shop floor control software. In that setting the barcode doesn't encode any information that could change in the database. It is instead used to encode a machine-readable identifier for the material that it is labeling.
An ECDSA key would be 256 bits or 32 bytes long. At low error correction, it can fit into QR Code version 2 (21×21 modules). Or if you're thinking of RSA, then a 2048-bit key would fit in version 10 (57×57).
You have no idea what this person's intentions are, and calling their work useless because Toyota, Honda, Yamaha, Ford, and Dell don't use it is obnoxious.
Does anyone know of these super long range scanners (e.g, 150 m)?
Looking through Honeywell's products, the Granit 1280i [1] claims 16.5 m, which is impressive but not the 150 m mentioned above. I'm curious how aiming is even possible with what I would assume to be an incredibly narrow field of view.
[1]: https://www.honeywellaidc.com/products/barcode-scanners/indu...
Assuming 32 by 32 pixels with a size of 1mm by 1mm, you get a field of view of about 2 by 3 meters or smaller if you want to skip exotic monolithic decoders that integrate de-aliasing into the error correction decoder. Below about 1.2 sensor pixel per code pixel it stops being fun and you try to find a way to get more magnification.
So, at 150 meters distance, assuming a cube for simplicity, and 5 square meters FOV. We have a cube of 300 m side length. That cube has a surface area of 540 000 m^2, which is just ~100k times the FOV. The 300 frames per second you could get out of the sensor would get this done in about 20 minutes, so yes, it's a lot, but you can reduce to 30% assuming the height difference is approximately known. Then you can probably get another 10x speed by restricting the angle in which anything interesting could happen, and you get 3% of 20 minutes/1000 seconds. That's half a minute, if you can only tell the scanner that it's about there, with a precision of "between one and two 'o clock, I'm sure".
And that's <10k$ hardware I'm speaking of (not including the cost to get a 2k$ FPGA to extract 2D-barcodes from it's video feed), in 3-digit quantities.
I deem the number plausible.
- CRONTO, PM-Code and HCCB and AuthPaper are proprietary. CRONTO has attracted some usage mainly by banks, PM-Code looks like vaporware, AuthPaper seems inactive and HCCB is dead [2].
- CobraKing seems to be a 2012 research project, unmaintained
- HCC2D seems to be mainly academic exploration
Papers and results similar to HCC2D pop up periodically (i.e. [3]), but unfortunately nobody has released any (experimental) source code. It quite frustrating. For example, AuthPaper implemented their solution on top of ZXing, but they never contributed back. They apparently thought they could make some money out of it, but now that their venture is inactive, their ZXing modification is in limbo as well.
From my one-hour research, that makes JAB Code the only actually FOSS implementation of a high capacity 'barcode'. If you know of other (FOSS) implementations, please let me know.
I'm quite surprised JAB Code has existed for so long in a fairly production-ready state without attracting much attention. It deserves much more, looking at the rest of the field.
[1] https://github.com/jabcode/jabcode/issues/2
[2] https://en.wikipedia.org/wiki/High_Capacity_Color_Barcode#Di...
[3] https://pdfs.semanticscholar.org/95c7/fe455a084b0f0ce9923e99...
The spec can be found at https://www.bsi.bund.de/EN/Publications/TechnicalGuidelines/... (63 pages, the BSI is the German Federal Office for Information Security, a government agency), and this is slated to become an ISO standard.
Here's the Google translation (original in German provided somewhere else by @JdeBP) of an article introducing the tech:
https://translate.google.com/translate?hl=fr&sl=auto&tl=en&u...
I agree with others that the master/slave terminology is unfortunate in new tech like this. Otherwise this looks pretty good.
Looking closer at the spec you linked, it is tacked on to a standard for visual checksumming of printed documents. It isn't even moving forward on its own merits as a reasonable 2D barcode implementation.
What exactly are the technical issues that make you dismiss this project so harshly?
JAB codes just look like a jumble of colored pixels -- it's not obvious it's encoded data, if you were to see this "in the wild".
It kind of misses another potential feature, which is registration marks could also establish a baseline for colors, which a reader/scanner could then use to compensate for differences in color reproduction (due to printing / screen settings / etc).
Every JAB code has four registration patterns in the corners, as well as multiple color pallets at fixed locations.
Edit: I should have said untrained humans.
QR codes are able to be recognized as QR codes, which means you're able to think "I could definitely scan that", rather than thinking "that is some data there, that I could maybe read or maybe not."
It's the same as the difference between saying that data on the wire is "a TCP packet" vs saying it's "HTTP." Yes, either way, you know that you've got some packets—but if you want to parse them, you'd better be able to recognize the format of those packets.
This is backed by the Fraunhofer Society and the German government, and on tracks to become an ISO standard. It will be implemented in scanners (hardware and software).
You end up with that pattern all the time when you try to efficiently pack rectangles around a different sized rectangle. I remember trying to avoid that back when placing fields in age of empires 2.
A black border containing a colour spectrum centered on each side would make for a distinctive "this is one of those JAB thingies" appearance.
A border might be required anyway if tightly packing codes makes it too difficult to tell where one code ends and another begins.
Wikipedia: https://en.wikipedia.org/wiki/High_Capacity_Color_Barcode
Using colored high-capacity encoding should yield much better results, given the decoder is as fast as QR one.
So my guess is that Apple's approach is optimized for coolness, rather than transfer speed.
[1] http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=H...
[2] http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&Sect2=H...
Similarly, but with audio[1]: http://www.whence.com/minimodem/
[1]: (and yes, I know this is how it "used" to be done / I am old enough to remember it.)
And that is just a square inch, I think you could reach pretty good transfer speeds with higher resolution and wider dimensions.
[1] - https://pdfs.semanticscholar.org/95c7/fe455a084b0f0ce9923e99...
It's cool, it works well and it's fancy, but every time I do banking I have to turn off my computer's "night light" mode.
I assume lots of people use color filters for various good reasons. Are these codes resisent to that? Else I'd truly prefer oldschool monochrome QR codes, to be honest.
[1] https://www.nayuki.io/page/creating-a-qr-code-step-by-step
> The technical specification of the barcode is available as BSI TR03137 - Part 2[0]
It's apparently research done by the German Federal Office for Information Security.
[0] https://www.bsi.bund.de/EN/Publications/TechnicalGuidelines/...
Edit: ok, found the docs/description of the finder patterns: https://imgur.com/a/ZXXLtQ0
Can't speak for the Americas, but here in Europe QR codes aren't used that much, I feel, except maybe for mobile payments. Compare this with China, where QR codes are in literally every store, each taxi driver has a printed one nearby and even street food cards use them to pay. I can't see this one becoming popular, given how many are printed on glossy / dirty paper (often using black and white printers as well). I am amazed though how well the standard QR code works in most cases, even with everyone adding an icon in the middle of it (and basically removing error correcting redundancy).
An interesting QR thing I picked up last time I was there is how circular QR codes are becoming more popular, see e.g. https://irf.fhnw.ch/bitstream/handle/11654/17880/Fokusreport... and https://en.wikipedia.org/wiki/ShotCode for earlier approaches but WeChat has started using its own thing, kind of like Facebook and Snapchat are doing: https://chinachannel.co/wechat-launches-new-mini-program-qrc...
People are quick to point out "nobody uses QR" but it's not exactly fair to expect ubiquity from something like that. My response would be the same for those in this thread saying "people can't recognize JAB codes like they can with QR." Well, those who find a use for JAB codes are probably going to be the people using them 99% of the time(maybe more than QR because of data density), thus they're almost certainly know to know how to recognize them.
I think everyone uses them, but they just don't know it.
Pretty much every label on every consumer good (in America, at least) from cough syrup to Coca-Cola to computer chips has a tiny QR code on it. But since people don't actively engage with the code, they don't realize that it's there, and is a big part of the process of getting things from raw material to store shelves.
Mostly, I trust QR codes about as much as I trust random bit.ly links, i.e. not much at all.
They are fantastic for that use case as with high levels of error correction you can read them in a rain storm when one corner is missing.
That and every UPC scanner in existence seems to read them no problems.
High capacity code have probably different applications. I haven't seem them anywhere yet, but there are several products around them. I think printing a public key with such a code on a business card would be cool.
But National Express does them, right?
Seems to work in Chrome, so not sure what's wrong with the implementation to make it not work.
This was in Chrome.
(The above is based on my quick exploration with it on Safari, YMMV)
Imagine downloading a working application from a barcode (perhaps assuming you have the "reader" app which includes a set of software libraries to do some of the heavy lifting / batteries included) -- gameboy did it. It might be useful in a disaster, or an oppressive regime scenario, but at worst, it would be fun.
3D models? Retro game console with games distributed on paper?
My imagination is limited, but I have a feeling that barcodes are something waiting to meet some newly-possible potential with the advent of handheld scanners and very high capacity barcodes.
We tried VR and PDAs and cellphones and stuff in the late 80s/early 90s, but it wasnt until the 2010s they became something really useful; I wonder if barcodes will find some new life in the future, now that more capable and available hardware exists.
If the colors are quantized into a constellation, even significant error could be corrected.
But I’m sure you too feel that the failure modes of this colored barcode form a proper subset of the failure modes of its monochromatic counterpart.
The primary problem I see is that so many industrial cameras today are black and white. B&W cameras can send at a higher framerate and you don't need to convert to greyscale as your first step in your algorithm, so it saves time to use b&w cameras.
[1] https://en.wikipedia.org/wiki/Esoteric_programming_language#...
Has research been done to see how safe implementations are from infringing on currently-valid patents?
https://austingwalters.com/chromatags/
My post goes a bit into more detail on how it works, and why for instance - the given colors were chosen. It appears they too use the Lab color space for instance.
From their encoding spec: > In order to optimize the decoding of JAB Code, the used colors shall be so distinguishable as possible. Therefore, the used colors shall keep a distance from each other in the RGB color space cube
> In case of 256-color-mode, the color channel R and G take eight values, 0, 36, 73, 109, 146, 182, 219 and 255, and the color channel B takes four values, 0, 85, 170 and 255, which will totally generate 256 colors.
Which is too bad, because your idea of using Lab with ChromaTags to enable quick and accurate finding of the symbol was a really insightful technique. The decoding algorithm they suggest seems like it would be slow, and their use of RGB seems like a whole bunch of issues due to color-selective fading, shadows, damage, lighting, incorrect printer calibration, etc.
One use case is those placards for artworks at museums and galleries. I want to print something that's both easy to scan and easy to jot down.
Like a UPC code? Those have the contents printed right underneath.
Note that isn't just one of many independent implementations as both the repository links to BSI and vice versa.
Basically: cheap consumer printers suck. Don't bother.
nooo
Spatial relationship aside, there are plenty of less problematic ways to depict who is in charge.
Personally, I want to be a master to my mechanical slaves (tools, dishwashers, computers, robots) and can't wait for a future where machine-slavery is so pervasive that no humans need to work anymore.
The term "machine" is perfectly fine. You're actually choosing to be offensive for the sake of being offensive. Please stop.
Why would the machines continue to feed us if we're dead weight to the economy?
Likewise for social security and state-run unemployment insurances.
AI is coming in the form of industry automatization, in a very competitive, capitalist framework. Agriculture and resource extraction is also being automated.
Capital is literally growing a brain, and once it doesn't need us it will stop feeding us, and we'll be powerless against it because we are so dependent on it. Think of a spider shedding its dead skin after molting.
If automation will make agriculture more competitive, then food will get cheaper. Governments will be able to subsidise it.
Capital needs consumers to make a profit.
Politics will solve any kind of food crisis. Otherwise there will be a revolution.
Fundamentally, demand is survival instinct, which develops under Darwinian pressure. B2B is already growing faster than B2C. Wages are globally stagnating while capital keeps on growing. The industry as a self-maximizer can be its own consumer.
> Governments will be able to subsidise it. [...] Otherwise there will be a revolution.
This assumes that humans will still have some kind of power. Being somewhat competitive in the job market is the only power most people have today.
Embarrassing story time: I was working in Brazil on a database, and used the Portuguese translations for "master" and "slave" in a technical meeting (I speak Portuguese). The whole room looked at me in shock, and my manager politely corrected me: "um, we just use the English terms 'master' and 'slave'... if you translate them, it's pretty racist."
Slavery in humans is bad. Slavery in software applications it not.
Good luck finding a country with people of any color that hasn't experienced some level of slavery.
Correct use of words is important if those words have been misused in the past.
https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publicat...
"Beacon" and "frame" would describe them better, or even "lord" and "serf" if you really need there to be a power dynamic
But in this context I'm not sure at a pixel level how much 'extra' information is added by _removing_ red/green from the blue pixels, green/blue from the red etc.
In other words, if the image came from a digital camera, to actually stuff more information into the same number of pixels, colour may or may not help. In any case working with the raw CFA bayer source image would almost certainly be beneficial over interpreting the image after it has been converted to a normal RGB image (losing information in the process)
On the other hand if you're stuck with things like mobile phone cameras, and can only control the bar code side, then Id imagine you'd see some improvements as you say.
An interesting middle ground would be if you could get the raw image from the sensor before a generic debayer algorithm gets applied.
Good luck, keep up the good work... i've worked commercially on optical barcode systems and it's a super interesting topic (tho looks like my post has been downvoted out of existence so maybe you wont see this).
What I can offer is that it is now possible to get memory buffers containing "raw" sensor data from mobile phones. I've only done it on iPhone so far, but the "camera2" API on Android looks to support this as well. It only works in single-shot photo mode - I suspect there isn't the bandwidth to do 30 fps streaming, and they rely on the ISP for debayering and color space conversion in video mode.
iPhones seem to have negligible chromatic aberration in their raw output, weirdly, so that isn't a blocker for full sensor resolution grayscale imaging. Someone could exploit this to write the world's greatest mobile phone QR reader app.