Если единственным способом передачи данных в машиночитаемом виде из одной системы в другую является создание скриншотов, ваша идея использования QR-кодов, несомненно, является подходом, который технически работает и даже может преодолеть разрыв между монитором, на который выводятся изображения, и физически разделенной камерой, которая делает снимки этого монитора.
Однако для вашей ситуации это может быть не очень эффективным способом, ни с точки зрения плотности данных (огромные изображения для небольшого количества данных), ни с точки зрения эффективности разработчика. У меня складывается впечатление, что вы раскалываете орех кувалдой (хотя либы QR-кодов сегодня, вероятно, легко найти и использовать).
Если вы можете делать скриншоты с точностью до пикселя, которые сохраняют оригинальный цвет RGB каждого пикселя, то более простым подходом было бы
интерпретировать исходный текстовый файл как байты
сгруппировать байты в кортежи по три штуки
интерпретировать эти 3 кортежа как RGB-значения изображения, которое вы выводите в виде отчета
Затем снимок экрана необходимо сохранить, используя какой-либо формат изображения без потерь, например PNG
Затем декодирование работает в обратном направлении. Это дает 24 бита полезной нагрузки на пиксель.
Конечно, если ваши скриншоты не являются на 100% точными и могут содержать некоторую потерю данных или нарушение цвета, вам придется вложить больше труда:
Если ваша проблема заключается только в цветокоррекции, вы можете уменьшить количество используемых цветов, возможно, до черного и белого. Это уменьшит плотность данных до 1 бита на пиксель.
если определение точного положения изображения является проблемой, добавьте к нему легко находимые маркеры краев
если вы время от времени теряете несколько пикселей, вы можете использовать какой-нибудь код с коррекцией ошибок, например, кодировку Рида-Соломона . Конечно, QR-коды тоже используют такую коррекцию ошибок, но я ожидаю, что при использовании такого кода напрямую, вы сможете получить гораздо более высокую плотность данных. Смотрите этот stackoverflow Q&A пример на Python.
В конечном итоге, все зависит от качества вашего транспортного канала. Вам может понадобиться применить какой-либо алгоритм коррекции ошибок, и существует несколько различных доступных, для всех видов целей.
Что касается OCR: использование стандартных латинских символов в качестве "схемы кодирования" делает данные читаемыми для человека, но излишне трудными для машины и более подверженными ошибкам, чем необходимо. Я бы настоятельно не рекомендовал идти этим путем, если нет других ограничений, которые вынуждают вас к этому.
Позвольте мне добавить последнее слово о вашем случае в целом: Я полагаю, что ограничения на получение данных только "по скриншоту" изначально предназначались для того, чтобы доступ к данным мог быть получен только вручную, человеком. Прежде чем тратить столько усилий на обход этого ограничения, вам следует объяснить клиенту, что вы собираетесь делать. Я бы ожидал, что это приведет к одному из двух следующих результатов:
они понимают, что вы нарушаете их первоначальные меры безопасности, и запретят это.
они понимают, что их буквальные требования только создают искусственное препятствие, и что в случае, если они заплатят вам, они просто создают дополнительные расходы на разработчика для себя без видимой выгоды
Прикрепляю к посту несколько видео по теме: