
Show HN: Photo Realistic QR-Codes - pickledcods
https://www.QRpicture.com
======
pickledcods
Hi HN!

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/qrpicture

~~~
detaro
Cool idea. Sadly only the b/w example scans for me, and even that takes a
while to register.

~~~
sp332
Which app are you using?

~~~
detaro
Default Android camera app on my moto x4 and SecScanQR

------
AriaMinaei
Slightly OT, but when migrating data between iPhones, the old iPhone displays
an animated point cloud that appears to function like a QR code. You scan it
with the new phone, and your data starts to migrate locally through Bluetooth.

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?

~~~
social_quotient
Here is a good demo of a streaming qr solution. Not ours but a good demo of
the concept.

[https://youtu.be/_0djJ1aVEXs](https://youtu.be/_0djJ1aVEXs)

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.

~~~
divan
Another animated QR data transfer that uses fountain codes:
[https://github.com/divan/txqr](https://github.com/divan/txqr)

~~~
throwaway0x00ff
Hey, I wanted to use your library to send data from computer A to computer B,
but I don't speak Go yet.

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!

~~~
divan
I'm actually planning to make Go+Flutter application, which will work on
iOS/Android, Desktop and Web. Out of curiosity, what's your use case?

~~~
throwaway0x00ff
I would use this in a security context.

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!

------
ravenstine
Somehow, I think these kinds of "clever" QR codes would be less used. Most
people aren't going to even notice that they are legit QR codes. QR codes are
already underutilized enough, at least in western countries. Cool idea,
though!

~~~
ksm1717
It’s my opinion that underutilization is because of application rather than
any more ephemeral thing like appearance. QR codes haven’t had a killer app
yet, and they tend to be used for marketing rather than any critical tasks
that rely on the qualities that make it a useful technology. My guess is this
will change as it’s become more or less a requirement to have a cell phone to
function in western society.

~~~
rahimnathwani
"QR codes haven’t had a killer app yet"

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.

~~~
kalleboo
QR code payments are also sweeping Japan, despite contactless smartphone
payments having existed since before the iPhone even.

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.

~~~
wonderlg
I think they’d need _some_ hardware to verify that the transaction happened. A
small business owner can use their own phone, but other businesses need a
smartphone per point of sale, which might be more expensive than a card reader
(that one likely has to have anyway)

~~~
kalleboo
You can use a phone (or whatever) to verify the transaction, but in practice
I've never seen anyone do that. It probably helps that crime is pretty low in
this part of Asia.

------
pickledcods
Please be patient, I'm adding extra workers to the instance. Old instance died
because it exceeded limits.

~~~
deathanatos
I'm a bit curious… how much traffic _is_ the front page of HN?

(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.)

~~~
AlexITC
I have been in the front-page twice, getting around 5k-10k visitors in the
same day, which should give you an idea.

~~~
jermaustin1
That seems to be what I typically see as well. I’ve seen up to 80k views over
the course of a day.

------
crazygringo
That's really clever.

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.

~~~
awesomeideas
With my Pixel 2, only the B&W worked with Google Lens.

~~~
SamBam
I couldn't get any of them to work with my Pixel 3, using Google Lens.

~~~
pickledcods
Really sorry to hear that. I do not have such a device and without. If I knew
which engine was being used I might have a starting point to figure out what
might be happening.

edit: I noticed that the QR needs to contain a message or it will not scan.

------
dexen
Funny how _QR codes scanning pictures of people_ has more content, and is more
engaging, than the "Pictures of People Scanning QR-codes" [1].

In all seriousness, impressive work - and very pragmatic delivery, queue
system and all.

\----

[1]
[https://picturesofpeoplescanningqrcodes.tumblr.com/](https://picturesofpeoplescanningqrcodes.tumblr.com/)

~~~
pickledcods
The queuing was based on 2007 metrics on load and usage. It now seems this
needs updating. Preferably making if full client-side javascript.

~~~
city41
Going full client side would also mean you could host it for free and it could
handle a ton of traffic.

------
rootusrootus
This is really cool!

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.

~~~
pickledcods
Hiding information in plain sight :) Animations. Real life Games. Information
stickers (like my photo containing contact information).

------
mangatmodi
Look like we killed another site from HN frontpage.

~~~
wnissen
Sample pictures are on Github.

[https://github.com/xyzzy/qrpicture/tree/master/www.qrpicture...](https://github.com/xyzzy/qrpicture/tree/master/www.qrpicture.com/assets)

------
antris
I must be missing something... What does this have to do with photo realism?

~~~
fizixer
I has nothing to do with it. Unfortunately, OP is engaging in a cheap form of
terminology hijacking.

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.

~~~
pickledcods
That might be true. What would you suggest as a better description.

~~~
antris
"Picture to QR code converter"?

------
serjester
Neat, although anyone else think his has an uncanny resemblance to LSD
blotters? Talk about an interesting branding opportunity!

------
gus_massa
I only get B&W QR. (In case it is important, I used the first photo (one with
three vertical yellow bananas)
[https://www.google.com/search?q=banana&rlz=1C1CHBF_esAR839AR...](https://www.google.com/search?q=banana&rlz=1C1CHBF_esAR839AR839&tbm=isch&source=iu&ictx=1&fir=LZxQx4PwvNVDfM%252C5ymPQx-S2visAM%252C%252Fg%252F120lq251&vet=1&usg=AI4_-kS_Ps27TvfuXUSvBgTIyh101nchpQ&sa=X&ved=2ahUKEwiZzMCg8JrrAhVPD7kGHYmaCQgQ_B16BAgWEA8#imgrc=LZxQx4PwvNVDfM)
)

> _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.

~~~
pickledcods
Thanks for the example. It's the colour threshold. But with the brief number
samples already posted I'm going to replace that that and generate two QR's. A
low and high colour contrast.

------
zelly
Related idea:

[https://www.aestheticodes.com/](https://www.aestheticodes.com/)

[https://www.youtube.com/watch?v=kW39Mt5kscQ](https://www.youtube.com/watch?v=kW39Mt5kscQ)

But this is probably better because it uses natively supported QR codes.

~~~
rsync
I have a pet project, "Oh By"[1] that is a replacement for QR codes that does
not require an app to create, or consume, and you can just chalk them up
anywhere.

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:

[https://0x.co/examples.html](https://0x.co/examples.html)

... and the "HN-Specific" FAQ is here:

[https://0x.co/hnfaq.html](https://0x.co/hnfaq.html)

[1] [https://0x.co](https://0x.co)

~~~
dTal
From a practical perspective, the larger problem with this implementation is
that unless you happen to have heard of your service (unlikely), it's not
obvious what to do with the code, or even how to find out what it is. You need
a distinctive, unique string format that yields to googling. Overloading the
hexadecimal notation was a poor choice, in my opinion.

~~~
rsync
You are correct - there is a chicken and egg problem here wherein "Oh By
Codes" are not useful unless everyone recognizes them for what they are.

Like I said - pet project. Nearly 100% of my time and effort goes to
rsync.net, but we'll see ...

------
chronomex
Related work elsewhere (2012):
[https://research.swtch.com/qart](https://research.swtch.com/qart)

------
wiradikusuma
The default Camera App in Google Pixel can auto-recognize QR codes, but
unfortunately it doesnt work with these. Meanwhile, a dedicated QR scanner
(such as built-in in iPhne) works.

~~~
deninho
I use gcam on a xiaomi redmi note 7 and it recognised everything except for
the animated ones.

------
StavrosK
I've long wondered whether you can make a photo that gets recognized as a QR
code by computers. This is very cool! Is there any way you can smooth out the
calibration squares?

~~~
bt1a
I think you're right about that, but sometimes things are interesting enough
based on the technical feat alone.

------
irjustin
Wow this is freaking cool! All worked for me in the iphone x

------
greesil
Is there an android app for qr code reading that doesn't want all my
information???

~~~
tspike
The built in camera app scans QR codes

------
rendall
Sadly, on my Samsung Galaxy S9, absolutely none of them register

------
ChrisMarshallNY
That's wild! Thanks!

------
ykevinator
That's really cool

~~~
pickledcods
Thank You!

------
iFire
I looked at this work and since it's AGPL licensed I went away.

[https://www.bitcat.cc/webapp/awesome-
qr](https://www.bitcat.cc/webapp/awesome-qr) is a great alternative.

------
alsdkfjkqjwer
QR should look MORE like QR, and always include an URL next to it.

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.

~~~
Majromax
... or the QR code isn't meant exclusively for direct human consumption?

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](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.

~~~
xellisx
Talking about what you can fit in one.
[https://www.youtube.com/watch?v=ExwqNreocpg](https://www.youtube.com/watch?v=ExwqNreocpg)

