This is a computer vision question with a strong emphasis on programming.
I'm looking for a visual system to encode 4 bits of information. Here are the requirements:
The goal is to maximize the range of permissible distances and angles in step 2.
For example, using a QR code and the zxing library makes for a decent system but it doesn't hold up too well at some angles and across my office. It also encodes way too much information.
Even 1D barcodes like EAN seem too verbose. I know ahead of time that the data will be exactly one of at most 16 things. So what 16 things that I could print would be most easily and efficiently recognized at harsh angles and long distances, and not confused between each other or with common household objects?
Bonus points for easily implementable ideas.
What about one of these sixteen characters 0123456789ABCDEF
printed with OCR-A (or OCR-B) font?
OCR-A is described in Alphanumeric character sets for optical recognition -- Part 1: Character set OCR-A -- Shapes and dimensions of the printed image. ISO 1073-1:1976
OCR-B is described in Alphanumeric character sets for optical recognition -- Part 2: Character set OCR-B -- Shapes and dimensions of the printed image. ISO 1073-2:1976