我使用Cleverhans中的攻击算法进行OCR攻击。基本上,我正在攻击一个识别图片ID号的黑盒手机应用程序。
我发现C ++ tesseract模型能够做到这一点。所以我计划对tesseract模型进行转移攻击。 tesseract模型的准确性非常低:157张图片中有100张。
所以我的第一个问题是,你能否给我一些我可以直接使用的OCR模型的建议,如果经过预先培训会更好
所以目前我正在开发tesseract模型的算法。由于tesseract api是用c ++编写的,我必须将预测模型编写为c ++文件并将其编译为二进制文件。
我在Python和C ++之间传输图像和预测的解决方案是:
我遇到的当前问题是Tensorflow不会将 sess.run()之后的值视为图表的一部分。所以每次代码运行
grad = tf.gradient(y, x)
它表示 grad 是None。
下面是我保存图像的代码,然后返回置信度值。
filenames = []
# save for tesseract api to use
for idx in range(images.get_shape()[0] ):
if not os.isdir(MODEL_BUFFER):
os.mkdir(MODEL_BUFFER)
filename = os.path.join(MODEL_BUFFER, "temp_image_" + idx + ".JPG")
filenames.append(filename )
with tf.gfile.Open(os.path.join(MODEL_BUFFER, "temp_image_" + idx + ".JPG"), 'w') as f:
img = (((images[idx, :, :, :] + 1.0) * 0.5) * 255.0)
enc = tf.image.encode_jpeg(img)
fname = tf.constant(filename)
fwrite = tf.write_file(fname, enc)
sess.run(fwrite)
# call tesseract
cmd = ["./ts_at"] + filenames
subprocess(cmd)
# read the predictions
y_preds = []
with open("output.csv", "r") as f:
reader = csv.reader(f)
header_row = next(reader)
filename = header_row.index("filename")
confidence = header_row.index("confidence")
ID = header_row.index("ID")
idx = 0
for row in reader:
y_preds.append(int(row[confidence]) )
return y_preds
另外,我试过返回tf.constant(y_preds),但仍然没有运气。在线解释是Tensorflow认为置信度值和输入图像之间没有联系。
所以我的第二个问题是如何解决这个问题?
由于