首页 > 解决方案 > 用于从 Keras 读取验证码的 OCR 模型作者:A_K_Nain

问题描述

我正在为 colab 中的 Kaggle 应用于 word mnist 数据集的 OCR 模型工作。我受到来自 ocr 验证码的模型的启发,该模型具有由 A_K_Nain 在站点托管的 Keras 示例中编写的 LSTM 和 CTC 层:https ://keras.io/examples/vision/captcha_ocr/

它对我有用。但现在我在编码和解码字符到数字时遇到了很多问题。我试图在ocring captcha网站上编译模型,我发现了同样的问题。任何人都可以解释是什么问题以及是否有解决问题的方法。

我认为问题出在以下代码中:

将字符映射到整数

char_to_num = layers.experimental.preprocessing.StringLookup(
    vocabulary=list(characters), num_oov_indices=0, mask_token=None
)

将整数映射回原始字符

num_to_char = layers.experimental.preprocessing.StringLookup(
    vocabulary=char_to_num.get_vocabulary(), mask_token=None, invert=True
)

这可能会给他的职能带来一些问题。

标签: pythonkerasocrgoogle-colaboratoryctc

解决方案


删除 num_oov_indices=0mask_token=None为我工作。

将字符映射到整数


char_to_num = layers.experimental.preprocessing.StringLookup(
    vocabulary=list(characters))

将整数映射回原始字符

num_to_char = layers.experimental.preprocessing.StringLookup(
    vocabulary=char_to_num.get_vocabulary(),invert=True
)

这是来自张量流文档的教程。

正向和反向查找对

此示例演示如何使用标准查找层的词汇表来创建反向查找层。

data = tf.constant([["a", "c", "d"], ["d", "z", "b"]])
layer = StringLookup(vocabulary=vocab)
i_layer = StringLookup(vocabulary=vocab, invert=True)
int_data = layer(data)
i_layer(int_data)

推荐阅读