【发布时间】:2021-08-22 17:26:08
【问题描述】:
在过去的几个小时里,我一直在互联网上寻找有关如何将单个 jpeg 图像传递到我的预训练模型(保存和加载)并以字符串格式接收预测的答案。
我正在使用来自此来源的验证码 OCR - https://keras.io/examples/vision/captcha_ocr/
以下这两种方法让我走得最远(我认为),但它们仍然不起作用:
方法 1:
model = load_model('trained_models/my_trained_model.h5', custom_objects={'CTCLayer': CTCLayer})
img_path = '/test/my_image.jpeg'
img = image.load_img(img_path, target_size=(200, 50))
img_array = image.img_to_array(img)
img_batch = np.expand_dims(img_array, axis=0)
img_preprocessed = preprocess_input(img_batch)
prediction = model.predict(img_preprocessed)
使用这种方法,我没有将图像转换为灰度,但在它可能造成任何麻烦之前我收到了这个错误:
ValueError: Layer ocr_model_v1 expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 200, 50, 3) dtype=float32>]
方法 2: 这种方法几乎是从 OCR 模型的数据预处理中复制而来的:
img = tf.io.read_file(img_path)
img = tf.io.decode_jpeg(img, channels=1)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, [200, 50])
img_preprocessed = tf.transpose(img, perm=[1, 0, 2])
prediction = model.predict(img_preprocessed)
它给了我几乎相同的错误:
ValueError: Layer ocr_model_v1 expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 200, 1) dtype=float32>]
但这一次看起来图像格式也有问题。
我认为这个错误是由 OCR 中的这一行引起的:
# Define the model
model = keras.models.Model(
inputs=[input_img, labels], outputs=output, name="ocr_model_v1"
)
由于模型需要两个值(在训练时,我们传递带有图像和图像名称的 dict(验证码的答案))。但现在,我希望这个模型能够实际预测图像,所以我无法传递答案/标签。
几个小时后,我能够把它推到现在,但现在我没有想法了。
有人可以指点我正确的方向吗?
/// ---------- /// 编辑 /// ---------- ///
嗨!我想编辑我的问题。与此同时,我能够将 jpeg 传递到这个模型中,但不是那么干净。我基本上从本教程的最低部分复制了所有代码 - https://keras.io/examples/vision/captcha_ocr/
感谢我没有收到任何错误,但确实有很多代码看起来是多余的,但我无法有效地重构它。
修改了这段代码:
prediction_model = keras.models.Model(
trained_model.get_layer(name="image").input, trained_model.get_layer(name="dense2").output
)
现在我收到关于错误形状等的错误消息。是否可以从本教程的“推理”部分重构代码?
【问题讨论】:
标签: python tensorflow keras ocr captcha