SHIFT OCR is a library for handwriting text segmentation and character recognition.
pip install shiftlab_ocr
Reader
from doc2text
performs text detection and the following recognition.
import urllib
from shiftlab_ocr.doc2text.reader import Reader
urllib.request.urlretrieve(
'https://raw.githubusercontent.com/konverner/shiftlab_ocr/main/demo_image.png',
'test.png')
reader = Reader()
result = reader.doc2text("test.png")
Display recognized text:
print(result[0])
Действительно ли добро сильнее зла?
Именно над этим вопросом аставля заставляет
читателей задуматься В. Тендряков.
Автор рассматривает данную пробле-
му на конкретном примере, рассказывая
историю 00 заблудившемся немце русских
солдатах, которые пожалели врала и
позволи ему остаться землянке.
Display segmented crops:
import matplotlib.pyplot as plt
def show_img_grid(images, N):
n = int(N**(0.5))
k = 0
f, axarr = plt.subplots(n,n,figsize=(10,10))
for i in range(n):
for j in range(n):
axarr[i,j].imshow(images[k].img)
k += 1
f.show()
show_img_grid(result[1], 48)
It generates handwriting script with random backgrounds and handwriting fonts with a given string or a list of strings saved in source.txt
.
Generating a random sample from a string:
from shiftlab_ocr.generator.generator import Generator
g = Generator(lang='ru')
s = g.generate_from_string('Москва',min_length=4,max_length=24) # get from a string
s
Generating batch of random samples from source.txt
:
import numpy as np
# upload source.txt with one word per line
g.upload_source('source.txt')
b = g.generate_batch(12,4,13) # get batch of random samples from source.txt
fig=plt.figure(figsize=(10, 10))
rows = int(len(b)/4) + 2
columns = int(len(b)/8) + 2
for i in range(len(b)):
fig.add_subplot(rows, columns, i+1)
plt.imshow(np.asarray(b[i][0]))
Also, see Google Colab Demo