Twibright Optar
---------------

This is a program to store data on paper using a 600dpi b/w laser printer and a
600+ dpi scanner.

You need to install ImageMagick so that the resulting .pgm image can be converted into
PostScript with the right dimensions (so each pixel is 3x3 600dpi pixels so that
there is no unnecessary jitter).

Compile with "make". Become root (su -) and type "make install". Now you have
optar, unoptar and pgm2ps installed on your system in /usr/local/bin.

Encoding (writing)
------------------
Run

./optar other_guys.ogg other_guys.ogg  

which will produce files:

other_guys.ogg_0001.pgm
other_guys.ogg_0002.pgm
other_guys.ogg_0003.pgm
other_guys.ogg_0004.pgm
other_guys.ogg_0005.pgm
other_guys.ogg_0006.pgm

Now convert them into PostScript using the included pgm2ps tool:
./pgm2ps *.pgm

Print them using a 600dpi (or more) laser printer. Inkjet or dot matrix was
never tested and will not probably work at the pre-defined data density. See
"Changing the format" below.

Decoding (reading)
------------------

Clean and polish the scanner glass with rubbing alcohol and paper towel. Put
yellow pages on the scanner lid to get sharper picture *).  Scan the pages into
PNG (not JPEG!) on 600dpi (or 1200dpi, slightly better):

scan_0001.png
scan_0002.png
scan_0003.png
scan_0004.png
scan_0005.png
scan_0006.png

Read the number sequence (format specification) from any of the papers and feed
it as 1st argument to the optar, 2nd argument is the filename part before the
underscore:

unoptar 0-65-93-24-3-1-2-24 scan > out.ogg

Then play out.ogg with mplayer. You should get first about 41 seconds from the
Ogg Vorbis file.

*) In the scanner I tried (Canoscan), the lid didn't seem to be heavy enough to
press the paper down completely - there were blurry spots in the picture.
Without yellow pages I got 526 reparable bad bits bad from 3.2 million. With
yellow pages the blurry spots were much sharper and I got only 261 reparably
bad bits!

Changing the format
-------------------
If your printer is low quality and you are getting irreparable bits, you can
try to format the media to lower capacity.  Unfortunately, setting by
commandline is not implemented yet.  Change XCROSSES and YCROSSES in optar.h to
lower values which yields bigger pixels and lower capacity per page, but higher
reliability.  Make sure they are in roughly the same proportion as before,
otherwise you get nonsquare pixels and unnecessary waste of channel capacity.

You can also change the decoding parameters in unoptar.c (look for MAGIC
CONSTANTS) in attempt to read a difficult recording: unsharp_mask,
unsharp_dist, sync_white_cut, white_cut, minmax_filter, pixel_blur, cross_trim.

Future improvement
==================
- manpage could be written for optar and unoptar
- commandline help (-h) could be written for optar and unoptar
- the format could be made configurable. Now it's stored in the optar.h
- the magic constants could be changed by commandline options. Now they are
  stored in unoptar.c.
- Golay code decoding could be rewritten faster, using a sophisticated
  algorithm (Kasami algorithm?)
- Easy support for multiple pages per page, so it can be read by a digital
  camera. Currently it cannot since digital camera blurs at the sides of
  the picture.

(c) GPL 2007 Karel 'Clock' Kulhavy of Twibright Labs
e-mail: clock (at) twibright (dot) com
Twibright Optar homepage: http://ronja.twibright.com/optar/
