Turn pixels back into words
A screenshot of a message you cannot copy, a printed page, a receipt, a whiteboard photo. This tool reads the letters and gives you selectable text — with a confidence score, so you know when to trust it.
The Image to Text OCR turns a scan or a photo of a page into selectable text. You choose the language, clean the scan and copy or download the result. Recognition runs in your browser with Tesseract compiled to WebAssembly, so a contract never leaves your device.
Accuracy by source, without the hype
| Source | Typical accuracy | Notes |
|---|---|---|
| Screenshot of text | 97–99% | The easiest case: sharp, flat and evenly lit |
| Scanned page, 300 dpi | 95–98% | Black and white cleanup helps most here |
| Phone photo of a printed page | 90–96% | Straighten it, shoot from above, avoid shadows |
| Receipt or thermal print | 80–92% | Faded ink and narrow fonts cost accuracy |
| Handwriting | 30–70% | Only cursive-free print, and even then unpredictable |
| Text on a photo background | 70–90% | Crop to the text area before reading |
The cleanup step does the heavy lifting
Recognition engines prefer ink and paper. A phone photo gives them grey, uneven light instead, so the tool converts the picture to brightness values, calculates the threshold that separates ink from paper in the middle of the histogram, and pushes every pixel to black or white.
Otsu's method is the classic way to find that threshold automatically, and it adapts per image: a dark scan and a bright one both end up clean. For screenshots the same step simply proves harmless, and for light text on a dark interface the invert option flips the polarity.
The layout setting tells the engine how the text is arranged. A page of paragraphs, a single block, one line, or scattered words on a poster: each choice uses a different page-segmentation mode, and picking the wrong one is the most common reason a page comes back half empty.
- check_circleStraighten the text: rotation costs letters
- check_circleShoot from directly above, not at an angle
- check_circleAvoid shadows across the paper
- check_circleMore pixels help up to about 2400 px
From photo to plain text
Add the picture
A screenshot, a scan or a photo. Everything happens in the tab; the file is never sent anywhere.
Clean it
Grayscale plus an automatic threshold turns grey paper into clean black and white.
Read it
The engine downloads once and then works locally, showing progress while it recognises.
Copy or save
The text appears with a copy button, a confidence score, and a .txt download.
Why is the first run slow?expand_more
The recognition engine and the language data are about ten megabytes together and are fetched once from a public CDN, then cached by the browser. The second picture is much faster, and afterwards the tool keeps working even without a connection.
What does the confidence number mean?expand_more
It is the engine's own average certainty about the characters it produced, from 0 to 100. Above 90 the text is usually usable with a quick read; between 70 and 90 expect a handful of wrong characters; below 70 the picture is too small, too dark or too skewed, and a better photo beats any setting.
Can it keep the layout?expand_more
Paragraph breaks and line breaks survive, columns do not. A two-column page usually comes back as one stream of text. Splitting the image into two pictures, one per column, gives a correct result with almost no work.
Does it read numbers and tables?expand_more
Numbers are read well when the font is clean — invoices and receipts are the classic use. Table structure is not preserved, so expect the cells to arrive as separate lines that you paste into a spreadsheet.
OCR questions, answered
Is the document uploaded?expand_more
Which languages are supported?expand_more
Can I read a photo of handwriting?expand_more
Is there a page limit?expand_more
What output do I get?expand_more
Will it match the original formatting exactly?expand_more
What Actually Happens Inside an OCR Engine
Optical character recognition looks like magic from the outside and like statistics from the inside. The engine does not compare each letter with a stored picture of an A. It walks the image line by line, finds dark regions, guesses where a character begins and ends, and then asks a model which letter best explains the pattern of strokes, given the letter that came before. Language is part of the calculation: "receipt" is more likely than "rece1pt" because the sequence of letters is more common.
That is why accuracy depends so heavily on the picture rather than on the settings. A screenshot is the easiest possible input — sharp edges, uniform white, no noise. A phone photo introduces three enemies at once: perspective, uneven light and blur. Each of them breaks the assumption that a line of text is a horizontal stripe of consistent darkness, and each one can be fixed before the image ever reaches the engine.
Preprocessing is most of the result
The single most effective step is binarisation: throw away every grey value and keep only black ink and white paper. The threshold is not a fixed number; it is computed per image with Otsu's method, which looks at the brightness histogram and picks the value that separates the two clusters best. On a photo of a paperback taken under a lamp, this alone can move recognition from unusable to near-perfect.
Deskewing matters almost as much. A line of text tilted by three degrees is still horizontal to a human and is a problem for an engine that segments by projection profiles. No editor needed: when photographing a document, put the phone on the table and shoot from directly above. Alternatively, lay the page on a dark surface and let the edges of the paper guide the crop.
Reading the confidence score honestly
Character confidence is an average, and averages hide trouble. A page can come back at 94% with a single wrong digit in an invoice number, which is exactly the kind of error that matters. Treat the score as a triage tool: above 95 with clean input, read the text once; 85 to 95, check every number, name and code; below 85, retake the picture rather than editing the output.
Numbers deserve special care because the engine confuses characters that share shapes: 0 and O, 1 and l and I, 5 and S, 8 and B. If the source is a receipt or a technical document, zoom the picture before reading and compare digit by digit.
What OCR cannot do
- Recover text that is not visible: faded thermal print, heavy shadow, an out-of-focus area.
- Keep layout: multi-column pages, tables and sidebars usually arrive as a single stream.
- Read joined-up handwriting reliably at any quality setting.
- Understand context: it will happily transcribe a wrong word in a way that reads plausibly.
The privacy argument for local recognition
Documents that get scanned are frequently the sensitive kind: invoices, contracts, medical letters, ID pages. Every online OCR service that accepts an upload has a copy of that document, at least for a while, and its privacy policy decides for how long. Running the engine in the browser removes the question entirely, and the practical cost is one download of about ten megabytes on the first use. After that the tool works on a plane, in a basement, or with the network cable unplugged — which is also the simplest test that nothing is being uploaded.
Building a searchable archive, one page at a time
The most useful thing you can do with OCR is not to copy a quote, it is to turn a folder of scans into text you can search. The workflow is dull and reliable: scan at 300 dpi in greyscale, read each page with the language of the document, save the .txt with the same base name as the image, and keep the two side by side. A file manager search then finds the sentence you half remember, and the scan is still there when you need to check it.
For a printed book, photograph the pages with the phone flat on a stand, one page per frame, and run them in order. Two hundred pages take a while, but the result is a text file that can be read on any device, indexed by any search tool, and copied without retyping. Numbers and names will need a check; prose rarely does.
Do not throw away the scans afterwards. Text recognition is a convenience layer, not a replacement: a signature, a stamp, a handwritten margin note and the layout of a form all survive only in the picture.
Related document tools
fact_checkQuick facts
- Tesseract’s own documentation recommends about 300 dpi for a scanned page; below that, character recognition drops quickly.
- A straight, evenly lit scan recognises far better than a photo taken at an angle, because the engine matches shapes, not meaning.
- WebAssembly became a W3C Recommendation in 2019 and lets a page run a full encoder such as FFmpeg without a plugin.menu_bookW3C
- Because WebAssembly runs inside the page, a file processed this way never has to leave the visitor’s device.menu_bookMDN Web Docs
- A file chosen in an <input type="file"> is read by the page itself through the File API, so no network request is needed to process it.menu_bookWHATWG
helpQuestions people ask
How do I get text out of an image?expand_more
Why is the OCR result full of mistakes?expand_more
Is OCR on my device private?expand_more
hubWhat this page is about
- OCRopen_in_new
Optical character recognition: turning the pixels of a scanned page into selectable text, done in the browser by Tesseract compiled to WebAssembly.
- WebAssemblyopen_in_new
A binary instruction format for the browser, standardised by the W3C, that runs code compiled from C, C++ or Rust at near-native speed.
- File APIopen_in_new
The part of the HTML standard that lets a page read a file the visitor chose, without uploading it anywhere.
library_booksOfficial sources cited on this page
- Tesseract OCR engine documentationTesseract OCR project
- WebAssembly Core SpecificationW3C
- WebAssemblyMDN Web Docs
- HTML Living Standard (canvas, file input, media elements)WHATWG
Continue with the same file
Each of these opens what the tool above produces. Use “Use in another tool” under the result to carry the file over — it moves from tab to tab inside your browser, never to a server.
Switched-off tools are not listed here: only what works right now.