Как я могу эффективно передавать данные с помощью изображений? - PullRequest
0 голосов
/ 21 июня 2020

Для проекта заказчика у меня есть доступ к серверу разработки и сборки через подключение к удаленному рабочему столу. Мне нужно загрузить некоторые артефакты сборки для локальных тестов, но из-за политики компании заказчика я не получу доступа s sh или чего-либо полезного для передачи файлов. Через общий буфер обмена я действительно могу копировать данные (например, в кодировке base 64), но, к сожалению, это не работает надежно. Имея под рукой дешевое устройство видеозахвата с HDMI на USB, я решил, что смогу использовать его для передачи данных. В лучшем случае устройство может захватывать необработанное видео 1080p YUV 4: 2: 2, увы, полученные неподвижные изображения несколько нечеткие.

Итак, какой алгоритм / технологию я могу использовать для кодирования / декодирования данных, которые я хочу передать? Очевидно, что QR-коды будут работать, но скорость передачи данных будет довольно низкой (несколько КБ на захваченный кадр - и из-за не слишком хорошего соединения RD я смогу использовать кадр только каждые несколько секунд).

1 Ответ

0 голосов
/ 02 июля 2020

После некоторых экспериментов я обнаружил, что точность цветопередачи устройства захвата далека от полезной. Я попытался закодировать данные в виде пикселей шкалы серого, но даже многократное повторение значения каждого пикселя не привело к получению захваченного изображения, из которого я мог бы надежно извлечь исходные 8-битные значения. Возможно, сработало бы только использование верхних 4 бита на значение серой шкалы и повторение значения несколько раз, но в итоге я получил простые черно-белые изображения, кодирующие один и тот же бит в двух последующих пикселях. В захваченных изображениях я еще не сталкивался с перевернутым битом (в отличие от использования одного пикселя на бит). также), но плотность данных немного выше. У меня есть только небольшой заголовок с подписью, размерами изображения и контрольной суммой, поэтому я могу легко найти и проверить закодированные данные. Я также оставляю несколько пикселей слева пустым справа. Таким образом, на изображение 1080p я могу закодировать около 125 КБ. Это намного меньше, чем я ожидал, но, по крайней мере, это позволяет мне передавать данные без присмотра в разумные сроки.

...