Show HN: Photo Realistic QR-Codes
qrpicture.com
qrpicture.com
Inspired by a recent HN article on QR codes [0], I decided to finally publish [1] and open-source [2] a service I created 7 years ago. I got pulled away from it by projects with higher priority and it has been catching dust and been bitrot eroding since. Now reconstructed the basics and hosted on an AWS instance I would like to share so it might inspire.
Creating a photo realistic QR requires two steps. The first is to create a 93x93 dithered monochrome image. The dithering is calculated to preserve the mandatory QR framework/timing bits and keep the data/crc bits conforming. Trying to maximize the crc bits to match the original image.
The second step is adding colour information as a 186x186 dithered layer. The colour palette is created using Spacial Colour Quantification which uses the 93x93 QR image as constraints on the available colour range.
SCQ also stabilises palettes used for animations (a service not made available through the site yet).
[0] https://news.ycombinator.com/item?id=24119124
[1] https://www.qrpicture.com
[2] https://github.com/xyzzy/qrpictureThis is very cool tech but from a UX pov I think it's better codes small and pure (no logo or non-square dots)
Other than aesthetics, what are the advantages of the point cloud? Higher bandwidth?
Also, if you were to transfer 100s of megabytes of data from device A to B, using A's display and B's camera, what tech would you look into?
https://apple.stackexchange.com/questions/301563/what-is-the...
https://www.quora.com/Has-somebody-tried-to-dynamically-gene...
I imagine the heavy lifting is done on Apple's server. The data being transferred locally is likely a GUID/IMEI/etc + a nonce.
One (possible) advantage could be that the animated nature means that someone taking a photograph of the animation won't capture enough data to steal the whole payload? And the use of tiny pixels might mean that even a video capture from anywhere but up-close might not have enough fidelity (after compression) to read the encoding either?
We use a similar method for offline wallet transfers of private crypto keys. I’ll note a couple things. Keep the frame simple and not too dense. Be careful on ecc settings. Higher res camera androids to be slower in our testing. Be ready to loop the series to catch missed frames. Gives your frames and order context. If it’s really sensitive dat, encrypt it before encoding you QR. assume the video can be stolen from a camera. Inject noisy frames To help obfuscate.
How easy would it be to implement a txqr reader for desktop? Piping zbarcam's output could be the easiest way.
Have you got any directions for me to do it? It would be a great addition to txqr!
Thanks!
I want to use a one-time pad with a friend. That requires generating a fully random file that I then need to send to my friend (physically). I don't have an Ethernet port on my machine to send the file on the wire, and I don't want to rely on weaker cryptography (WiFI, aes) to send this file (basically, everything is weaker than a one-time pad). I also don't want to leave undeletable traces of my one-time pad on a flash drive.
So what's left is the actual screen of the device, provided I don't have any hidden cameras where I live.
I could use a hard drive and then shred the secrets, but nothing is proven regarding the actual deletion of the files, and QR codes are much cooler!
Higher information density, in that it can pass ad-hoc wifi network info and cryptographic keys. The animated "QR code" also contains a unique code in each frame that is then sent back during the pairing process. This allows them to measure the round trip time from display to camera to wifi back to the original device, preventing relay and replay attacks.
(This is based on my attempting to reverse engineer watch pairing for a few days)
I think that time has already arrived... I remember seeing reports that a cellphone was generally the most-valued item amongst the homeless in the US.
(Not quite a quantitative study, but here's an article on the importance of cellphones for homeless people, and challenges they face: https://www.calhealthreport.org/2019/01/11/expired-lost-stol... )
Also 1) only works up to a daily limit which you can configure 2) it’s a SEPA transfer, goes straight to another local, very traceable account and not a random bitcoin wallet in case you try to pull that off :)
Money mules make this less secure than you think. You can just rent some bums bank account.
I am French, use mobile payments and would be interested to see a payment qrcode (never seen one)
Also, when you mention Direct Debit, is this the mechanism which allows a merchant to draw on your bank account? There need to be confirmed with the bank before (though maybe it is possible now to have that in one step, which also has your consentement)
Owning a cell phone doesn't mean everyone keeps it with him at all times, and this will limit potential uses. Hopefully people don't become tied to it that badly.
When I lived in China, scanning QR codes was how we initiated payments for restaurants, groceries, couriers and other offline goods/services. It was also how we added people to WeChat.
I would guess at least 20 million QR codes are scanned per day in Beijing.
It's a thing we can't deny.
Like the fact that I will love you 'til I die.
For a shop to adopt QR payments, all they need a printout of a QR code. No hardware, not leasing some card reader, zero maintenance.
Since the virus hit, where I live restaurants are prohibited by law from having reusable menus. Instead, nearly all of them have a QR code at the able that you scan to see the menu on your phone.
That could do it.
I can see it being useful for stealth links to .onion sites which are generally impossible to remember and a pain to type out.
They are also very popular in China, the dang things are on just about every surface.
(I was thinking of posting a "Show HN" at some point, but I just do everything on my own machines. Not sure how much traffic my desktop would handle before figuratively melting. The nice thing about my Show HN is that it would be a static HTML page, so that's at least easier; yours is necessarily dynamic.)
Greetings
Using the 4 example images at the top, the first (color) and last (B&W) work flawlessly on my iPhone.
But the two animated ones in the middle will work for a second, and then the phone loses it. Animated seems like "too much" for a phone to lock on to -- perhaps just stick to static? That's cool enough.
edit: I noticed that the QR needs to contain a message or it will not scan.
In all seriousness, impressive work - and very pragmatic delivery, queue system and all.
----
I do wonder what the practical use is, though, aside from just being pretty cool. In a real world situation I think the recognizability of a QR code as something you can scan with your phone is an important part of the value.
https://github.com/xyzzy/qrpicture/tree/master/www.qrpicture...
Either that or OP has no idea what the word 'photorealism' means.
Either way OP is doing himself a disservice. Great project. Siraj-Raval vibes.
> If QR does not scan, then Re-Generate with more (+1) safer settings
What does this do? Can you give a technical explanation?
I don't like when the outline is so small that it doesn't cover the horizontal o vertical part of the grid. (This is a personal opinion anyway.)
Note: Remove the two spaces before the links in your comment, so they become clickable.
https://www.aestheticodes.com/
https://www.youtube.com/watch?v=kW39Mt5kscQ
But this is probably better because it uses natively supported QR codes.
The downside is that it is a centralized service. Further, you would need to trust that this centralized service would continue operating into the indeterminate future. Luckily I have a strong track record there.
A very simple example use-case is here:
... and the "HN-Specific" FAQ is here:
[1] https://0x.co
Like I said - pet project. Nearly 100% of my time and effort goes to rsync.net, but we'll see ...
0xJWW72G
You can just type either 0xJWW72G, or JWW72G, into the front page (0x.co) and look it up.
You can also modify it in the URI to see analytics:
https://www.bitcat.cc/webapp/awesome-qr is a great alternative.
If you display a QR Code with some url, and fail to show a shortened url next to it for people to type instead of scanning, you either fail basic common sense tests, or are intentionally being an asshat.
A QR code is quite information-dense. With even the highest error-correction rates, a 53x53 QR code will store 100 bytes of information (https://www.qrcode.com/en/about/version.html). That's more than you can replicate in a URL intended for typing.
For the case of the 'Show HN' here, think of semi-automatic uses of the QR code that still use the provided aesthetic potential, such as inventory-control stickers that look like the owning organization's logo.