Skip to content

grantgustafson/qr_tx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

qr_tx

Proof-of-concept library to transmit data as a stream of QR codes. Demo

Encoding

Data is loaded from an input file as raw binary and first encoded using Luby Transform code, a class of erasure codes, to add redudancy and facilitate lossy transmission. The LT encoded output symbols are then encoded to a stream of QR codes that are displayed on screen to be recorded as the transmission.

Decoding

An input video file is parsed frame-by-frame to extract the LT encoded symbol data from detected QR codes. After all frames are parsed, the resulting set of symbols is decoded to the orignal message if possible.

Commandline Usage

Create python env (conda):

conda env create -f environment.yml
conda activate qr_tx

Encoding:

python -m qr_tx.encode <file>

Decoding:

python -m qr_tx.decode <movie_file> <output_file>

Potential Improvements

Integrity:

  • Use a PRNG in the LT encoding implementation to avoid issues with numpy version compatability (current implementation depends on seed values)

Performance:

  • Use a more performant QR encoding library
  • Parallelize the QR frame encoding process

Tuning:

  • Try different QR code versions (sizes). Current size chosen partly because larger capacity QR versions take too long to encode with current QR library
  • Benchmark optimal redundancy level based on expected symbol loss (code rate). For example, current implementation drops only around 1% of symbols when using screen recording, yet 2X redundancy can handle well over 10% symbol loss. What is expected loss when videoing a screen with a phone or other device?

About

Data transmission via QR codes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages