Image to Text (OCR)
Extract text from an image in your browser, with a per-word confidence score so you can see where the recognition is shaky. 13 languages, no upload.
Choose an image, drop it here, or paste a screenshot
Read in this tab. The image is never uploaded.
Getting this right matters more than it sounds — the engine uses the language to decide between characters that look alike. Each language downloads its own data the first time you use it, then it is cached.
What Image to Text (OCR) Does
Optical character recognition turns a picture of text back into text, and its defining property is that it fails quietly. A bad conversion does not throw an error or return gibberish. It returns real words, spelled correctly, that are not the words on the page. "rn" becomes "m", "1" becomes "l", "0" becomes "O", and the result reads perfectly while being wrong.
That is why this page reports confidence. The engine produces a score for every word it recognizes, and almost every OCR tool discards it before showing you anything. Here the overall figure is stated and every word scoring below 70% is listed, because knowing which five words to check is worth more than a slightly better average.
The other half of getting a usable result is the input. Tesseract was built for scanned documents, and its own documentation recommends at least 300 DPI. A photograph taken at an angle in poor light is nothing like that, which is most of the reason people conclude OCR "does not work". So small images are upscaled toward that target, converted to grayscale, and contrast-stretched between the 1st and 99th brightness percentiles. Those two numbers are chosen deliberately: ink is a small minority of the pixels on a page, commonly between 1 and 4%, so a more generous 5th-percentile black point lands inside the paper and the correction does nothing at all on exactly the pages that need it.
Everything runs in your browser as WebAssembly. The language data is fetched once from a CDN and cached; the image itself is never transmitted.
How to Use Image to Text (OCR)
- Add an image, drop it on the box, or paste a screenshot
- Choose the language of the text. This affects accuracy as well as the alphabet
- Leave the clean-up on unless the result looks worse with it
- Read the confidence figure, check the highlighted words, then copy the text
How Image to Text (OCR) Works
OCR with Tesseract in the browser
draw the image on white → if its long side is under 1,000 px, upscale up to 3× → convert to grayscale and stretch the contrast so ink goes to 0 and paper to 255 → Tesseract.js recognizes words in the chosen language → report each word's confidence
- upscaling
- Tesseract reads small text poorly. A 600 px screenshot is enlarged by 1,000 ÷ 600 ≈ 1.7× before recognition; nothing is enlarged past 3×.
- contrast stretch
- The darkest ink level is mapped to black and the paper level to white, which helps with gray phone photos of paper. The steps applied are listed after each run.
- language
- English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Hindi, Arabic, Chinese (simplified), Japanese or Korean. Each language's data downloads the first time it is used.
- confidence
- Tesseract's own 0–100 score per word. Words under 70 are highlighted as worth checking, and the overall figure turns amber below 85 and red below 70.
Worked example
A 600 × 400 screenshot of an English paragraph, preprocessing on
- Long side 600 < 1,000, so it is upscaled 1.7× to about 1,000 × 667
- Grayscale and contrast stretch are applied, and listed under the result
- English language data loads (first use only), then recognition runs
- Any word scored below 70 is highlighted in the output
Result: The recognized text, ready to copy, with its overall confidence and the doubtful words marked so you know which ones to proofread.
What the confidence figure means
Reported per word by the engine. The bands below are practical guidance, not thresholds defined by Tesseract.
| Overall confidence | What to expect | What to do |
|---|---|---|
| 95%+ | Essentially clean — typically a screenshot or a proper scan | Use it as-is |
| 85–95% | Good; occasional wrong character in unusual words | Skim the highlighted words |
| 70–85% | Usable draft with real errors scattered through it | Proofread against the original |
| Below 70% | Unreliable — plausible words that are often wrong | Re-photograph rather than proofread |
What actually improves a result, in order
Input quality dominates. No amount of post-processing rescues a photograph taken at an angle.
| Change | Effect | Why |
|---|---|---|
| Photograph straight on, not at an angle | Large | Perspective distorts letterforms the engine matches against |
| Get closer so the text is physically larger | Large | Tesseract’s documentation asks for 300 DPI or better |
| Even, diffuse light with no shadow across the page | Large | Shadow gradients defeat a global threshold |
| Select the correct language | Large | The language model resolves lookalike characters |
| Grayscale and contrast stretch | Moderate | Applied here automatically |
| Upscaling a small image | Moderate | Only helps up to a point; it adds no detail |
How to Read Your Result
A screenshot is the ideal input
It is already pixel-perfect, evenly lit, straight on, and at native resolution. If the text you need exists on a screen somewhere, screenshotting it will beat photographing the printed version every time, usually at well over 98% confidence.
Handwriting is out of scope, not merely hard
Tesseract is a printed-text engine with no handwriting model behind it. Neat block capitals sometimes partly come through; cursive does not. Pages advertising handwriting recognition on top of Tesseract are describing something the engine does not do.
Layout is a separate problem from recognition
The output is running text. Columns interleave, tables lose their structure and captions land wherever they fell. Reconstructing document structure from glyph positions is a genuinely harder problem than identifying the glyphs, and no other OCR tool solves it either.
Limitations & Accuracy Notes
- Printed text only. There is no handwriting or cursive support.
- Layout, columns, tables and reading order are not preserved; the result is running text.
- One language at a time. A page mixing two scripts will read one of them badly.
- Each language downloads its own trained data on first use, so the first run in a new language needs a connection.
- Very large images are slow, because recognition runs on your own device rather than a server farm.
- The confidence score is the engine’s own estimate. It is a good guide but no guarantee: a confidently wrong word is possible.
Frequently Asked Questions
How accurate is OCR, and how would I know?
That second question is the important one, and it is the one most tools refuse to answer. OCR does not fail loudly: it returns plausible wrong words with no visible sign of trouble. The engine produces a confidence figure for every word, so this page reports the overall score and highlights every word below 70%. A clean 300 DPI scan of printed text typically runs above 95%; a phone photo at an angle can drop below 70 and still look like a confident answer.
Why does it clean up my image first?
Because Tesseract was built for scanned documents and a phone photo is not one. Its own documentation says it works best at 300 DPI or better, so small images are upscaled toward that, then converted to grayscale and contrast-stretched between the 1st and 99th brightness percentiles. The cut is 1% rather than the more usual 5% because ink is only 1 to 4% of the pixels on a typical page, so a 5th-percentile black point lands in the paper and does nothing. The page lists exactly which steps it applied.
Can it read handwriting?
No. Tesseract is a printed-text engine; there is no handwriting model behind it. Pages advertising handwriting recognition through Tesseract are overstating what it does. Neat block capitals sometimes partly work, and cursive does not work at all.
Does choosing the right language matter?
More than it sounds. The engine uses the language model to decide between characters that look alike, so reading Spanish text with the English model produces subtly wrong words rather than obvious gibberish. Each language downloads its own trained data the first time you select it, then your browser caches it.
Will it keep my layout, columns or tables?
No. The output is running text. A PDF or an image stores no notion of "this is a table"; that structure is something a reader infers from position, and reconstructing it reliably is a much harder problem than recognizing the characters.
Is my image uploaded?
No. Tesseract.js runs the recognition in your browser as WebAssembly. The site is a static export with no backend, so there is nowhere to send a file. The language data is fetched from a CDN once and cached; the image itself never leaves your device.
My result is poor. What actually helps?
In order: photograph the page straight on rather than at an angle, get more light, get closer so the text is physically larger in the frame, and make sure the correct language is selected. Those beat any post-processing. If the source is a screenshot, it is already ideal; screenshots usually read near-perfectly.
References & Further Reading
- Tesseract OCR — The engine, Apache 2.0 licensed, which is why it can ship on an ad-supported page
- Tesseract — Improving the quality of the output — Source of the 300 DPI recommendation the preprocessing targets
- Tesseract.js — The WebAssembly build that runs the engine in your browser