OCR — Image to Text
Extract text from any image using OCR powered by Tesseract.js. Upload a photo of a document, screenshot, or handwritten note and get editable text instantly. Free, private, and runs entirely in your browser.
Drag & drop an image or
Supports JPG, PNG, WebP — works best with clear, high-contrast textWhat Tesseract.js is doing
This tool is a front end for Tesseract.js, a WebAssembly port of Google's open‑source Tesseract OCR engine. Tesseract has been developed since 1985 (originally at HP, then open‑sourced in 2005, adopted by Google in 2006) and version 4+ uses an LSTM neural network for line recognition. The model for each language is a ~5–15 MB file downloaded on first use and cached. Everything — image processing, the model, the inference — runs in your browser via WASM. No image ever leaves your machine.
Images that work well
- Printed text, screenshots, and scanned book pages — Tesseract was trained on these and handles them confidently.
- Dark text on a light background — the canonical case. Reverse it if you need to (Tesseract prefers black‑on‑white).
- At least 300 DPI, or a photo taken at 10+ megapixels held close to the page — the engine needs about 20 pixels of height per character to read confidently.
- Standard fonts — serif, sans‑serif, slab. Decorative or script fonts will drop accuracy.
Images that don't
- Handwriting. Tesseract is a printed‑text engine. It occasionally reads neat printed‑style handwriting but results are unreliable. For handwriting use Apple's built‑in Live Text, Google Lens, or a specialised model.
- Photos of documents at steep angles — deskew them first.
- Low‑contrast scans, faded receipts, or faxed pages. Boost contrast in a photo editor before running OCR.
- Text over busy backgrounds (posters, memes). Crop tight to the text first.
- Tables — Tesseract reads top‑to‑bottom, left‑to‑right like body text. Tabular layouts come out as a mess. Use a PDF with text layer where possible, or a specialised document AI service.
Languages and the confidence score
Pick the right language before extracting. Tesseract uses the chosen language's trained model and its character frequency statistics — running a French document through the English model will produce plausible‑looking but wrong output. Non‑Latin scripts (Chinese, Japanese, Korean, Arabic, Hindi) work but usually with lower accuracy than Latin; they benefit most from high DPI input. The confidence percentage shown after extraction is Tesseract's own self‑assessment, averaged across words. Above 85% is usually trustworthy; below 70% expect multiple errors and double‑check the output.
Tips to improve accuracy
- Crop tight to the text, then let the engine work on a dense image rather than a sparse one.
- Convert to greyscale if the image has colour noise.
- Straighten skewed pages before uploading.
- If a scan is dim, bump contrast (Preview / Photos has a slider for this).
- For multi‑column documents, split the image into column strips and OCR each separately.
Privacy
Tesseract.js downloads the language model once (cached in your browser), then all recognition happens locally in WebAssembly. The image bytes, the intermediate binarisation, and the output text all live in your tab's memory only. This makes the tool a good fit for confidential documents — medical notes, contracts, bank statements — that you'd rather not send to a cloud OCR service.