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

Manuscript in Erkat‘agir

Out[126]:

Expected results(in red boxes)

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

Automatic line detection

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

Load Convolutional Neural Network optimized for Line Transcription

In [130]:
model = models.line_transcriptors
Loading weights into state dict...
Finished!
In [131]:
len(page_empty.lines)
Out[131]:
8
In [132]:
line_id = 1
In [133]:
page_empty.lines[line_id].get_image()
Out[133]:
In [134]:
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 [135]:
page_gt.lines[line_id].plot_image(with_char_boxes=True, figsize=(20,20), color='r', linewidth=3)

Single forward pass

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

Automatic Detection & Recognition results

In [137]:
line_transcripted
In [138]:
print('ground truth:', page_gt.lines[line_id].get_class_names())
print('  prediction:', line_transcripted.get_class_names())
ground truth (expected results):  ['զ', 'ա', 'մ', 'ե', 'ն', 'ա', 'յ', 'ն', 'մ', 'ա', 'ն']
prediction (our results):         ['զ',      'մ', 'ե', 'ն', 'ա', 'յ', 'ն',      'ա', 'ն']