## 5 Technologies for Automated Observation-Based Identity Confirmation
### Visual Observation Technologies  
One set of technologies that can be adopted for the observation is machine-readable visual codes--such as barcodes, QR or Data Matrix codes.  
Conventional one-dimensional barcodes can store a maximum of around 100 characters (for example Code 128 is defined in [6] and can store 103 data symbols). However, two-dimensional barcodes such as the QR Code or Data Matrix (defined [7]) can store over 1000 symbols.  
For SRUP observations, we need to encode a 128-bit value: here is a Universally Unique Identifier (UUID) rendered as a string of 32 hexadecimal characters [8]. As such, any display hardware capable of displaying either a one- or two-dimensional barcode could be adopted--along with any barcode technology capable of displaying 32 hexadecimal characters (e.g., Code-128, Code-93 or Code-39).  
The disadvantage of linear codes is that for a 32-character code, the resulting barcode is quite long--exceeding the convenient aspect-ratio and dimensions of many displays without unduly squeezing the vertical height--resulting in the mark/space size of the code being reduced.  
Figure 4(a)-c show the same 32-character hexadecimal value, rendered in a number of one-dimensional codes, and Figure 5(a),b show the same data rendered as two-dimensional codes.  
Experimentation using codes for the same UUID value--rendered on an LCD display, and read using a smart-phone camera--showed that only Code-93 and Code-128 linear barcodes could be reliably read (and that Code-93 was most often read). Code-39 format barcodes were not readable.  
Figure 5: A 32-character hexadecimal value, rendered in a number of one-dimensional bar code types.  
Figure 6: The 32-character hexadecimal value, rendered as two-dimensional bar code types.  
Two-dimensional codes, on the other hand, are already more suitable to being rendered on a display, due to their square shape, and both Data Matrix and QR codes could be easily read by the app, with approximately the same accuracy.  
The Data Matrix code has some potential advantages over the QR code, including the resulting size of the code required for a given length of data being smaller, and improved detection and error correction [9].  
Further experimentation was conducted using a Raspberry Pi and camera, looking to automatically locate and extract a 32-character hexadecimal value encoded as a two-dimensional barcode. Unlike the previous example, here the code was not manually aligned with the reader: rather, the software was required to identify where in the image streamed from the camera, the barcode was located before it could be decoded.  
In both cases the Pi (a Raspberry Pi 3B+), fitted with a Raspberry Pi Camera Module, was running Python code to process the image. For the Data Matrix code, the pylibdmtx library [10] was used, and the QR codes were read using the pyzbar library [11].  
In both cases the code was tweaked to maximize performance. With the Data Matrix code, the best performance was achieved when processing a 320 \(\times\) 240 grayscale. PNG file (taken from an video capture of the camera being shown the code): and it took an average of 12.7 s per image to detect and extract the code (in contrast to less than a second when the DM code is manually cropped from the image file). This is unacceptably slow for a system processing video frames, and is in contrast to the pyzbar library, searching for QR codes--which was shown to manage to process several frames per second.  
Although additional image processing and manipulation techniques could be used (for example to detect and crop the DM code in the image), for the purposes of demonstrating the machine observation techniques QR codes were selected.