CRNN Line Reader by lasal.ai
CRNN + CTC · 2006 / 2015

Read a whole line without cutting it into letters

The older approach had to find every character first, and touching letters broke it. A CRNN looks at the whole line, makes a guess for every thin vertical slice, and CTC turns those guesses into text. Nobody ever told it where each letter is.

loading…
ArchitectureCNN → BiLSTM → CTCEach block is a layer. The stacks are its real feature maps for your line; hover one to fan it out, then hover a single map to pull it out full size.
no activation → strongestdata moving to the next layerBiLSTM: → forward reads left to right, ← backward right to left
write a word or a line, letters may touch
Read as
?

No dictionary and no character cutting: the text comes only from the per-slice guesses below.

What is happening

Write something, then press Read to watch it go through the network.

Every layer's output, aligned slice by slice
1 · Input linescaled to 32 px high
2 · Convolutions4 layers find strokes, curves and letter parts. The strongest maps of each layer:
3 · Slicesthe image becomes a row of columns, one per 4 pixels, each described by 256 numbers
4 · BiLSTMreads the slices left to right and right to left, so each slice knows its neighbours
top: forward → · bottom: ← backward
96 + 96 memory cells
5 · A guess per sliceprobability of every character, plus “blank” (no new character here)
6 · CTC decodingbest guess per slice, then merge repeats and drop blanks
What it learned from · synthetic data (Synth90k idea, 2014)

No human labelled a single image. Every training line was generated: printed and handwriting fonts plus real handwritten EMNIST letters and MNIST digits glued together so they touch, then slanted, stretched, blurred and speckled. A new random batch was made at every step.

Accuracy on held-out lines

Compare with the character-by-character reader, which must cut the line into letters first: Multi-letter recognizer ↗. Write the same joined-up word in both.

Built by lasal.ai · CTC: Graves et al., 2006 · CRNN: Shi, Bai and Yao, 2015 · Synth90k: Jaderberg et al., 2014 · data: EMNIST (Cohen et al., 2017), MNIST