#python #python-3.x #printing #image-recognition #image-scanner
#python #python-3.x #печать #распознавание изображений #изображение-сканер
Вопрос:
Недавно я разработал собственный тип хранилища данных — набор черно-белых квадратов на напечатанном листе бумаги, который я могу отсканировать с помощью сканера. Для меня это имеет два основных преимущества:
- Если бы у меня на жестком диске были важные фотографии, и они потерялись, я бы не смог их восстановить (скорее всего). Однако в моем проприетарном формате все данные являются физическими и, следовательно, не могут быть потеряны (если вы не похожи на меня и не склонны сильно ошибаться).)
- Данные, хранящиеся на бумаге, не могут быть «украдены» хакерами и т.д.
Итак, я запрограммировал простой алгоритм, который берет ~2.5KiB
файл и преобразует его в этот формат (каждый «бит» информации представляет собой блок пикселей 4×4):
from PIL import Image, ImageDraw
im = Image.new("RGB",((160*4) 2, (128*4) 2), "white")
pix = im.load()
dw = ImageDraw.Draw(im)
dw.rectangle([0,0,160*4 1,128*4 1], outline=(0,0,255))
with open("program.exe", mode="rb") as f:
l = list(f.read())
# we now have the numerical binary!
# time to convert each number into a bit!
binary = ""
temp = ""
for a in l:
temp = format(a, "#010b")[2:]
binary = temp
idx = 0
print(len(binary))
for y in range(1, im.size[1]-1, 4):
for x in range(1, im.size[0]-1, 4):
ax = binary[idx]
if ax == "1":
for i in range(0, 4):
for j in range(0, 4):
pix[x j, y i] = (0,0,0)
idx = 1
im.show()
im.save("code.png")
Если вам интересно, program.exe
это двоичный исполняемый файл, написанный на сборке x86, который просто печатает hello, world!
на терминале.
Однако я не совсем понимаю, как (после сканирования) преобразовать отсканированное изображение обратно в машинный код и записать его в исполняемый файл. Кажется, что каждый раз на заднем плане изображения появляется какой-то нечеткий шум, который я, похоже, не могу удалить, и есть также тот факт, что изображение несколько искажено. Я попробовал библиотеку Python под названием pyzbar
(и да, я знаю, что она предназначена для штрих-кодов и QR-кодов, но у меня была надежда, что она сможет распознать хотя бы что-то, но я хватался за соломинку, и на выходе ничего не вышло.
Кто-нибудь знает, как это сделать (например, распознавание изображений или что-то еще для чтения данных)?
Комментарии:
1. Вы, кажется, запутались. Физические элементы легко теряются, перемещаются не по месту, повреждаются или уничтожаются и, как правило, являются громоздкими и дорогостоящими для безопасного хранения, в то время как цифровые данные можно безопасно копировать в несколько местоположений. Используйте шифрование, если оно должно быть конфиденциальным.
2. О нет, я знаю. Это только для моих целей, и, как я уже описал, я часто размещаю что-то не так, но при определенных условиях бумага может храниться более 400 лет. Это скорее хранилище данных типа «возможно ли это сделать».
3. возможно, вам следует использовать модуль
cv2
(OpenCV) — вы могли бы даже найти примеры, которые показывают, как распознавать прямоугольники или другие фигуры или даже шахматную доску.