如何制作攻击OCR模型的张量流GAN模型

时间:2017-10-05 01:00:31

标签: python c++ security machine-learning tensorflow

我使用Cleverhans中的攻击算法进行OCR攻击。基本上,我正在攻击一个识别图片ID号的黑盒手机应用程序

我发现C ++ tesseract模型能够做到这一点。所以我计划对tesseract模型进行转移攻击。 tesseract模型的准确性非常低:157张图片中有100张。

所以我的第一个问题是,你能否给我一些我可以直接使用的OCR模型的建议,如果经过预先培训会更好

  • OCR模型只需要识别数字0-9和字符X
  • 我能够获得一些信心值

所以目前我正在开发tesseract模型的算法。由于tesseract api是用c ++编写的,我必须将预测模型编写为c ++文件并将其编译为二进制文件。

我在Python和C ++之间传输图像和预测的解决方案是:

  • 我将首先在本地保存扰动的图像
  • 运行二进制文件以将输出标签和置信度值存储在.csv文件中
  • Python将读取.csv文件的标签和置信度值

我遇到的当前问题是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认为置信度值和输入图像之间没有联系。

所以我的第二个问题是如何解决这个问题?

由于

0 个答案:

没有答案