Объясните OCR на пальцах: как разобрать последовательность букв?

Понимаю, как работает классификатор, разбирающий единичные символы. Тот же рукописный MNIST. Для своей задачи построил примитивную модель, которая прекрасно справляется с моей частной задачей: определённый шрифт, всего 21 символ в алфавите — отдельные символы распознаются на ура.
шрифт и модель

пример моего шрифта, нагенерил картинок для обучения:5f1ade692159c927788503.png

Примитивная модель. 21 класс:
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28, 1)),
  tf.keras.layers.Dense(128,activation='relu'),
  tf.keras.layers.Dense(21, activation='softmax')
])
model.compile(
    loss='categorical_crossentropy',
    optimizer=tf.keras.optimizers.Adam(0.001),
    metrics=['accuracy'],
)


Не могу «въехать», как разбирать последовательность: строку текста.

Длина строки известна и постоянна: 11 символов. Словарь неприменим: это серийные номера.
Примеры

исходный: 5f1ae201d5bc0047129645.jpeg
обработанный: 5f1ae0ec63189702935962.png
сгенеренный: 5f1ae21bb40fb400598031.jpeg


Из того, что прочитал, понял, что надо конволюционно «ехать взглядом» вдоль строки маленькими шагами, на каждом пытаясь опознать символ «в кадре».
5f1adc9bd3958190996124.png

Не могу понять, как из набора выходных предположений строить окончательную строку. Ведь на нескольких соседних кадрах символ может повторяться. Между символами могут с низкой уверенностью предполагаться какие-то левые варианты. Пишут про CTC loss function (Connectionist Temporal Classification), но там обучение на большом объёме примеров. А у меня полный перебор всех комбинаций алфавита.

Хочу реализовать это самостоятельно, без OpenCV, Tesseract и Keras-OCR. Только TensorFlow, Keras, хард-софткор.
  • Вопрос задан
  • 452 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы