Optical Armenian Handwritten Character Recognition - Demo - © Calfa.fr

Manuscript in Erkat‘agir

Out[112]:

Expected results(in red boxes)

In [113]:
page_gt.plot_image(with_char_boxes=True, figsize=(30,20), color='r', linewidth=2.5)

Automatic line detection

In [114]:
detected_lines = strategy_gradient(page_gt)
page_empty = page_gt.clone()
page_empty.lines = {i:line for i,line in enumerate(detected_lines)}
In [115]:
page_empty.plot_image(with_lines=True, figsize=(30,20), color='b', linewidth=2)

Load Convolutional Neural Network optimized for Line Transcription

In [116]:
model = models.line_transcriptors
Loading weights into state dict...
Finished!
In [131]:
len(page_empty.lines)
Out[131]:
8
In [132]:
line_id = 0
In [119]:
page_empty.lines[line_id].get_image()
Out[119]:
In [120]:
page_gt.lines = {i:page_gt.lines[line_id] for i,line_id in enumerate(sorted(page_gt.lines, key=lambda line_id: page_gt.lines[line_id].get_coord()['y']))}
Expected results
In [121]:
page_gt.lines[line_id].plot_image(with_char_boxes=True, figsize=(20,20), color='r', linewidth=3)

Single forward pass

In [122]:
line_transcripted = model(page_empty.lines[line_id])

Automatic Detection & Recognition results

In [123]:
line_transcripted.plot_image(with_char_boxes=True, figsize=(20,10), color='b', linewidth=3)
In [124]:
print('ground truth:', page_gt.lines[line_id].get_class_names())
print('  prediction:', line_transcripted.get_class_names())
ground truth: ['մ', 'ա', 'ց', 'ա', 'ն', 'ե', 'ւ', 'ա', 'ս', 'ե', 'ն']
  prediction: ['մ', 'ա', 'ց', 'ա', 'ն', 'ե', 'ւ', 'ա', 'մ', 'ե', 'ն', '։ վերջակէտ']