2D barcode reader