Image to Text (OCR)

Read the text out of photos and screenshots in English, Vietnamese, Spanish or Portuguese. The recogniser runs in your browser — no image is uploaded.

image

Image to Text (OCR)

Images to read

Drop files here, or click to choose

Runs entirely in your browser. Your input never leaves your device.

What next?

FAQ

Is my photo uploaded anywhere?

No. The recogniser is Tesseract, compiled to WebAssembly and run inside this browser tab by tesseract.js. Your image is decoded to a canvas, handed to that WebAssembly module as raw pixels, and the text comes back in the same tab. No request carries the picture.

That matters more here than on most tools, because the images people run through OCR are rarely neutral: a payslip, a prescription, a passport page, a contract someone photographed on a desk, a screenshot of a private conversation. Most free OCR sites are a form that posts your file to a server and, in several cases, to a paid API behind it. Open your developer tools, switch to the Network tab, and watch this one: after the language files load, nothing leaves.

What actually gets downloaded, and when?

Nothing OCR-related loads when you open the page. The moment you press Recognize text, three things are fetched from this site — never from a CDN:

  • the worker script, about 110 KB;
  • the WebAssembly recognition engine, about 3.8 MB;
  • the language data for the language you chose, between 0.5 MB and 4 MB.

The language file is then stored in your browser's IndexedDB, so the second run of that language downloads nothing at all. English is the largest at roughly 4 MB; Vietnamese is the smallest at about 0.5 MB. Clearing site data removes them, and they will be fetched again on the next run. Everything is served from this origin, so the fact that you are reading a document is not disclosed to Google, jsDelivr or anyone else.

Why only English, Vietnamese, Spanish and Portuguese?

Because those four language files are shipped with the site and are therefore available offline and instantly. Tesseract supports over a hundred languages, but each one is a separate download that would have to be fetched from a third party at the moment you picked it — which is exactly the request this tool exists to avoid.

If your text is in a language not listed, the result will be poor rather than empty: the recogniser will map the shapes onto the alphabet it knows. Latin-alphabet languages close to the four listed (Italian, French, Catalan) often come out surprisingly usable with Spanish or Portuguese selected, because the letter shapes are the same and only the dictionary differs. Non-Latin scripts will not work at all.

How accurate should I expect this to be?

For a clean, straight, well-lit page of printed text at a reasonable resolution, expect somewhere in the high nineties per cent of characters — good enough to read and correct rather than retype. The tool shows an average confidence figure so you can judge before trusting it; below roughly 70% the output usually needs real correction.

Three things degrade it sharply, in order of severity. Skew: a page photographed at an angle is much harder than a page photographed square, and no automatic straightening is applied here. Resolution: text smaller than about 20 pixels tall in the image is often unreadable to the recogniser even when it looks fine to you on screen. Contrast and glare: a phone flash on glossy paper wipes out whole lines.

Handwriting does not work. Tesseract's models are trained on printed type; cursive and hand-printed notes produce nonsense with high confidence, which is the worst combination. Highly stylised display fonts, dense tables and text over photographs are all considerably worse than plain body text.

Which image formats can I drop here, and why not TIFF?

PNG, JPEG, WebP, GIF, AVIF and BMP — the formats a browser can decode by itself. Recognition happens in the tab, so the picture has to reach a canvas before Tesseract ever sees it, and the only decoders available are the ones the browser ships with.

TIFF is not one of them, in any current browser, which is awkward because scanners produce it constantly and multi-page TIFF is a normal way to hold a scanned document. Convert it first: many scanner utilities can output PDF instead, and a scanned PDF can go through the OCR PDF tool on this site without a conversion step at all. TIFF used to be listed in this tool's file picker, which only meant the file was accepted and then failed.

One file in my batch failed. What happens to the rest?

They are read normally. Each image is handled on its own: a file that cannot be decoded — a corrupt download, something renamed to .png that is not a PNG, a format the browser does not support — gets a line of its own in the list under the text saying what went wrong, and every other image in the batch still produces its text. Files that failed are left out of the .txt entirely rather than appearing as an empty section, and they do not count towards the average confidence.

Two things do end the whole run rather than one file: pressing Stop, and the recognition engine failing to start at all. The second means something is wrong with this page's assets, not with your image, and trying the remaining nineteen files would only repeat the same failure.

What does Stop actually do?

It shuts the recogniser down and abandons the run. The image being read is dropped, the batch does not continue to the next file, and you get no text — including for the images already finished. The button shows "Stopping…" until the run has actually unwound, so you cannot start a second run on top of one that is still finishing.

If a batch is too long to sit through, run it in smaller groups rather than relying on Stop to salvage part of it.

Why the "keep line breaks" option?

Because printed text wraps at the column edge, and those breaks are an artefact of the page, not of the sentence. By default the tool joins the lines within each detected block back into continuous paragraphs, so pasting the result into a document gives you prose rather than text with a hard return every eight words.

Turn the option on when the line breaks are meaningful: poetry, addresses, code, receipts, tables, forms. Toggling it re-formats the text you already have — it does not run recognition again.

Which model is used, and could it be more accurate?

The language files are from Tesseract's tessdata_fast set: integer-quantised models built for speed and size. The alternative, tessdata_best, is roughly two to three per cent more accurate on difficult scans and about four times larger — English alone would be 15 MB or so downloaded per visitor. That trade is not worth it for the common case, so fast is what ships. The result is a real, if small, accuracy ceiling, and it is better stated than hidden.

More image tools