Como posso usar o exemplo do Keras OCR?
eu encontreiexamples/image_ocr.py
o que parece para o OCR. Portanto, deve ser possível fornecer uma imagem ao modelo e receber texto. No entanto, não tenho ideia de como fazê-lo. Como alimentar o modelo com uma nova imagem? Que tipo de pré-processamento é necessário?
Instalando as dependências:
Instalarcairocffi
: sudo apt-get install python-cairocffi
Instalareditdistance
: sudo -H pip install editdistance
mudançatrain
para retornar o modelo e salvar o modelo treinado.Execute o script para treinar o modelo.Agora eu tenho ummodel.h5
. Qual é o próximo?
Vejohttps://github.com/MartinThoma/algorithms/tree/master/ML/ocr/keras para o meu código atual. Eu sei como carregar o modelo (veja abaixo) e isso parece funcionar. O problema é que não sei como alimentar novas digitalizações de imagens com texto para o modelo.
Questões secundárias relacionadasO que é CTC?Classificação temporal conexionista?Existem algoritmos que detectam de maneira confiável a rotação de um documento?Existem algoritmos que detectam linhas / blocos de texto / tabelas / imagens de maneira confiável (portanto, fazem uma segmentação razoável)? Acho que a detecção de arestas com suavização e histogramas em linhas já funciona razoavelmente bem para isso?O que eu tentei#!/usr/bin/env python
from keras import backend as K
import keras
from keras.models import load_model
import os
from image_ocr import ctc_lambda_func, create_model, TextImageGenerator
from keras.layers import Lambda
from keras.utils.data_utils import get_file
import scipy.ndimage
import numpy
img_h = 64
img_w = 512
pool_size = 2
words_per_epoch = 16000
val_split = 0.2
val_words = int(words_per_epoch * (val_split))
if K.image_data_format() == 'channels_first':
input_shape = (1, img_w, img_h)
else:
input_shape = (img_w, img_h, 1)
fdir = os.path.dirname(get_file('wordlists.tgz',
origin='http://www.mythic-ai.com/datasets/wordlists.tgz', untar=True))
img_gen = TextImageGenerator(monogram_file=os.path.join(fdir, 'wordlist_mono_clean.txt'),
bigram_file=os.path.join(fdir, 'wordlist_bi_clean.txt'),
minibatch_size=32,
img_w=img_w,
img_h=img_h,
downsample_factor=(pool_size ** 2),
val_split=words_per_epoch - val_words
)
print("Input shape: {}".format(input_shape))
model, _, _ = create_model(input_shape, img_gen, pool_size, img_w, img_h)
model.load_weights("my_model.h5")
x = scipy.ndimage.imread('example.png', mode='L').transpose()
x = x.reshape(x.shape + (1,))
# Does not work
print(model.predict(x))
isto dá
2017-07-05 22:07:58.695665: I tensorflow/core/common_runtime/gpu/gpu_device.cc:996] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN Black, pci bus id: 0000:01:00.0)
Traceback (most recent call last):
File "eval_example.py", line 45, in <module>
print(model.predict(x))
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1567, in predict
check_batch_axis=False)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 106, in _standardize_input_data
'Found: array with shape ' + str(data.shape))
ValueError: The model expects 4 arrays, but only received one array. Found: array with shape (512, 64, 1)