converters · · Updated
How Accurate Is Browser OCR? 14 Test Images, Measured
By Chirag
Optical character recognition turns a picture of text back into text. Whether it works on *your* picture depends on things you can control: the size of the text, how straight it is, and what is behind it. Rather than list general tips, this guide measures them. One line from an invoice was rendered fourteen different ways and run through this site's Image to Text (OCR) tool, which uses Tesseract (through tesseract.js 7) with its English model, running in the browser.
The test line:
Invoice INV/26-27/014 dated 24 September 2026. Total due: Rs. 44,840 (GST 18%).Accuracy below is the share of characters that came out right: one minus the edit distance between the result and the original, divided by the original's 79 characters. Whitespace differences are ignored.
Results
| Test image | Without enhancement | With enhancement |
|---|---|---|
| Arial 32 px, black on white | 100% | 100% |
| Arial 16 px | 100% | 98.7% |
| Arial 11 px | 98.7% | 100% |
| Arial 8 px | 53.2% | 100% |
| Times New Roman 16 px | 100% | 98.7% |
| 16 px, blurred by 1 px | 98.7% | 97.5% |
| 16 px, tilted 5° | 100% | 100% |
| 16 px, tilted 15° | 54.4% | 100% |
| 16 px, grey text on a grey background | 100% | 100% |
| 16 px, white text on dark blue | 97.5% | 100% |
| 16 px, on a multicoloured gradient | 60.8% | 98.7% |
| 16 px, saved as JPEG at quality 30 | 98.7% | 100% |
| Average of the 12 English images | 88.5% | 99.5% |
| Hindi (Devanagari) text | 18.8% | 18.8% |
| Two columns of text | 87.9% | 87.9% |
"Without enhancement" is Tesseract given the image as-is. "With enhancement" is the tool's default: the image is converted to grayscale, enlarged to twice its size if it is under 1,200 pixels wide, and straightened if it is tilted. Each run took roughly half a second after the engine had loaded; the first run on a device also downloads the engine, which took about 1.3 seconds in total on a fast connection.
What the numbers say
Clean, printed text is close to solved. Black text on white at 11 pixels and up, in a common font, came back essentially perfect either way. The one-character slips were all punctuation: a slash read as a capital I, or the comma in 44,840 read as a space.
Small text fails suddenly, not gradually. 11 px was fine; 8 px lost half its characters ("Invoice" became "cic"). Tesseract's documentation measures text by its x-height (the height of a lowercase x), says around 20 pixels is typical of good input, and warns that accuracy falls away below about 10. The 11 px Arial here had an x-height of about 6 pixels and still read correctly; at 8 px, about 4 pixels, it collapsed. Doubling the pixels, even by simple enlargement, fixed it completely. If you control the capture, a higher-resolution screenshot or scan is better still.
Tilt matters beyond a few degrees. 5° made no difference; 15° dropped accuracy to 54%, with nonsense like "Moje, M28 271014". Straightening the image first brought it back to 100%. The enhancement estimates the angle by rotating a small copy of the image and picking the rotation at which the lines of text are most sharply separated. Tesseract's own automatic rotation option detected no tilt at all on this image, which is why the tool does it separately.
Busy colour hurts more than low contrast. Grey text on grey was read perfectly, but the same text over a rainbow gradient lost 40% of its characters, because the colour changes looked like letter edges. Converting to grayscale removed most of that noise. White text on a dark background was fine.
JPEG compression barely mattered. Even at quality 30, with visible artifacts around the letters, only the final full stop was lost.
What enhancement can't fix
- Other scripts. The tool loads only Tesseract's English model, so Hindi text came back as Latin gibberish ("THE GAT, 9% TH TRIE gf"). No image preparation helps; recognising Devanagari needs a Hindi model.
- Columns. In the two-column test every word was recognised, but lines from the two columns were interleaved in the output. Crop one column at a time when reading order matters.
- Handwriting. Not part of these tests. The English model the tool loads was trained on printed text, so don't expect joined-up writing to come through.
Scanned PDFs
A scanned PDF is a set of page images, so everything above applies page by page. The PDF to Text (OCR) tool renders each page to an image first and then recognises it. If a PDF lets you select its text already, it doesn't need OCR at all: copy the text directly.
A short checklist
- Crop to the text you need, one column at a time.
- If the text is small on screen (around 11 pixels or less in these tests), enlarge the image or recapture it at a higher resolution.
- Straighten anything tilted more than a few degrees (the enhancement handles up to 20°).
- Leave enhancement on unless a clean screenshot comes back with a stray character, in which case try once with it off.
- Check numbers and codes by eye. In these tests, the characters OCR got wrong most often were punctuation inside numbers, such as the comma in 44,840.
All of this runs on your device: the image never leaves the browser, which matters for invoices, IDs and anything else you wouldn't upload to a stranger's server.
Related guides
- How to Edit Subtitles in Excel or CSV and Convert Back · A practical workflow for translating or reviewing subtitles in a spreadsheet: the column layout, how to make a second-language file, keeping timestamps intact, and when to pick .xlsx over CSV.
- How to Flatten Nested JSON and Convert JSONL Files · How dot-notation flattening turns nested objects and arrays into spreadsheet columns, what survives the trip back, and how JSON Lines differs from a normal JSON file.
- Extract Meta Tags and Tables From HTML (to CSV or Excel) · How to check a page's title, description, canonical and social tags from its source, the JavaScript-rendering trap that makes View Source lie, and how to pull a table with merged cells into a spreadsheet.