代码拉取完成,页面将自动刷新
同步操作将从 GanZhenliang/MindSpore-Watermark 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import glob
import bchlib
import numpy as np
from PIL import Image, ImageOps
import torch
from torchvision import transforms
BCH_POLYNOMIAL = 137
BCH_BITS = 5
def main():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--model', type=str, default='./saved_models/decoder.pth')
parser.add_argument('--image', type=str, default='./images/test_hidden.png')
parser.add_argument('--images_dir', type=str, default=None)
parser.add_argument('--secret_size', type=int, default=200)
parser.add_argument('--cuda', type=bool, default=True)
args = parser.parse_args()
if args.image is not None:
files_list = [args.image]
elif args.images_dir is not None:
files_list = glob.glob(args.images_dir + '/*')
else:
print('Missing input image')
return
decoder = torch.load(args.model)
decoder.eval()
if args.cuda:
decoder = decoder.cuda()
bch = bchlib.BCH(BCH_POLYNOMIAL, BCH_BITS)
width = 200
height = 200
size = (width, height)
to_tensor = transforms.ToTensor()
with torch.no_grad():
for filename in files_list:
image = Image.open(filename).convert("RGB")
image = ImageOps.fit(image, size)
image = to_tensor(image).unsqueeze(0)
if args.cuda:
image = image.cuda()
secret = decoder(image)
if args.cuda:
secret = secret.cpu()
secret = np.array(secret[0])
secret = np.round(secret)
packet_binary = "".join([str(int(bit)) for bit in secret[:96]])
packet = bytes(int(packet_binary[i: i + 8], 2) for i in range(0, len(packet_binary), 8))
packet = bytearray(packet)
data, ecc = packet[:-bch.ecc_bytes], packet[-bch.ecc_bytes:]
bitflips = bch.decode_inplace(data, ecc)
if bitflips != -1:
try:
code = data.decode("utf-8")
print(filename, code)
continue
except:
continue
print(filename, 'Failed to decode')
if __name__ == "__main__":
main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。