Skip to the tool
CALCPARK

Image to Text (OCR)

Extract text from a photo, screenshot or scan in your browser. Tesseract OCR in eight languages, paste with Ctrl+V, edit the result, copy it or download a .txt file.

Files stay on your device
Loading the tool…

How to use it

  1. Choose the language of the text (English is preselected).
  2. Drop the image, pick it with the button or paste it from the clipboard.
  3. Press Recognise text. The first run downloads the engine and model; the progress bar shows the phase.
  4. Read and correct the text in the box, then Copy text or Download .txt.

Example

A 1,600 × 1,200 px photo of a printed invoice in English: the first run spends about 4–8 s downloading and starting the engine, then 3–6 s recognising on a laptop; the result box shows roughly 180 words and 1,100 characters. A second invoice in the same language skips the download and finishes in 3–6 s. A 6,000 × 4,500 px scan is downscaled to 4,000 × 3,000 px first (a note under the image says so).

How the recognition works

The tool runs tesseract.js 6 (a WebAssembly build of Tesseract 5) in a web worker. It calls createWorker(lang, 1)– OCR engine mode 1 is LSTM-only, the neural network recogniser – without custom paths, so the worker script, the WASM core (tesseract.js-core) and the language data (@tesseract.js-data/<lang>/4.0.0_best_int, the “best” integer models) are fetched from jsdelivr. tesseract.js stores the language model in IndexedDB, which is why only the first run per language downloads anything. Before recognition the image is decoded with EXIF orientation applied and drawn on a canvas at most 4,000 px wide or high; the engine receives that canvas, not the file. The output is the plain text block (data.text) with Tesseract's own line breaks.

Limits: one language model per run (mixed-language pages are read with the chosen model only); no layout analysis beyond Tesseract's default page segmentation, so multi-column pages may interleave; vertical text, handwriting and decorative fonts are largely unsupported; very large images cost memory on phones. If the CDN is unreachable the tool reports the download failure instead of guessing.

Sources: tesseract.js on GitHub (API, default CDN paths), Tesseract OCR documentation (engine modes, LSTM models), tessdata_best language models.

Questions

Is my image uploaded anywhere?
No. Recognition runs in a web worker inside your browser. The only network traffic is the one-time download of the Tesseract engine and the language model from the jsdelivr CDN, which the browser then caches.
Why is the first run slow and later runs fast?
The first run has to fetch about 1.4 MB of engine code plus the language model (0.7–3 MB compressed) and initialise the WebAssembly core. Both are cached, so the next image in the same language starts recognising immediately.
How can I improve accuracy?
Use a sharp, evenly lit, straight-on image with dark text on a light background, at least about 300 DPI for scans (roughly 20–30 px letter height). Crop away photo borders and pick the correct language; the models are language-specific dictionaries and shapes.
Can it read handwriting or a whole PDF?
Handwriting is not supported by the Tesseract models used here. For PDFs, export or screenshot the page as an image first, or use the PDF to Word tool which handles text-based PDFs directly.