Image OCR (text extraction)
Photos and screenshots → text. Tesseract.js WASM running entirely in your browser.
Images never leave your device. OCR runs in the browser via a WASM engine. The engine and language data (~10–13MB) are downloaded once from a CDN, then cached in IndexedDB.
⚠️ Accuracy notice — OCR accuracy depends on image quality, fonts, and language (typically 80–95%). Always review the result by hand, and for legal documents or precise figures, double-check manually.
First run downloads training data — English ~10MB, Korean ~13MB. Wi-Fi recommended.
Preparing...
[ AdSense slot ]
Factors that affect OCR accuracy
| Factor | Good | Bad |
|---|---|---|
| Resolution | 1000+ px wide | under 500 px |
| Contrast | White background, black text | Colored background, faint text |
| Angle | Frontal, level | Skewed, perspective-distorted |
| Font | Standard print fonts (sans / serif) | Handwriting, cursive |
| Layout | Single-column horizontal text | Vertical text, multi-column, tables |
| Noise | None | Lines, smudges, glare, shadows |
Related tools
About Tesseract.js
Tesseract.js is the Tesseract OCR engine (originally Google's) compiled to WebAssembly for the browser. Apache-2.0 license. Runs 100% client-side.
What is "traineddata"?
A model file containing per-language character-shape statistics. English ~10MB, Korean ~13MB. This tool downloads them from the jsdelivr CDN (
tessdata.projectnaptha.com) and caches them in IndexedDB — instant start on subsequent runs.
Does it work offline?
Yes, once the training data is cached. IndexedDB may be cleared after long inactivity or by browser data clearing — that triggers a re-download next time.
Processing time for large images
Time grows with resolution. 4000×3000+ images can take a minute or more. The accuracy/time sweet spot is around 1500–2000px wide. Use the resize tool to shrink first, then OCR — it's significantly faster.
Frequently Asked Questions
Are my images uploaded to a server?
Images stay on your device. OCR runs entirely in the browser via the Tesseract.js WASM engine.
The OCR worker code and language training data (around 10–13MB) are downloaded once from the jsdelivr CDN on first use, then cached in IndexedDB for offline use.
The site operator cannot see your images.
Why is the first run slow?
The OCR engine core (WASM) and language training data (10–13MB) download on first use.
After that, IndexedDB caches them and subsequent runs start instantly.
Avoid the first run on cellular data — use Wi-Fi once to warm the cache.
Is accuracy 100%?
OCR is a statistical inference task and does not guarantee 100%.
With Tesseract.js, clean printed/digital text typically scores 80–95%.
Handwriting, vertical text, or distorted documents drop significantly.
Always have a human review the results — for legal or critical material, type it in manually.
Which languages are supported?
Currently English, Korean, and English + Korean mixed.
Mixed mode downloads both language models, so the first run takes longer.
Other languages like Japanese and Chinese are planned.
Output looks garbled.
① Re-shoot if the photo is blurry or skewed
② crop just the text area to avoid background noise
③ enlarge the image if the font is too small
④ if your text mixes English with another language, use the mixed mode.
Can I OCR a PDF?
This tool currently accepts images (JPG / PNG / WebP) only. If your PDF already has digital text, copy it directly from a PDF viewer.
For scanned PDFs, export each page as an image (e.g. screenshot) and bring it here.
References
Last reviewed: 2026-05-09 / Tesseract.js (Apache-2.0) WASM engine.
- Tesseract.js (Apache-2.0) — GitHub
- Tesseract OCR engine — GitHub (Apache-2.0)
- Training data — tessdata
⚠️ The recognized text is not warranted by this tool. Users must review and correct the output before relying on it.