/ocr

OCR Online - Extract Text From Images Locally

Extract text from images with OCR. Supports Norwegian and English, and recognition runs locally in your browser.

Requires network access. On first use, a language model (~3 MB per language) is downloaded from a public CDN. The text recognition itself runs locally, your image never leaves your browser.

Drop an image here or click to browse

PNG, JPG, WebP …

About the OCR tool

Text recognition runs with Tesseract.js directly in your browser. Your image is never sent to a server. On first use, the language model is downloaded (~3 MB per language) from a public CDN; after that, all recognition happens locally.

For best results: use sharp images with good contrast and clear, upright text.

About this tool

The OCR tool extracts text from images using Tesseract.js, a JavaScript port of Google’s open Tesseract engine. Everything runs in your browser, no images are uploaded to any server. The first time you use a language a model (~3 MB) is fetched from CDN and cached in the browser, then the tool works offline too. Norwegian (bokmål) and English are supported, plus a combined "Norwegian + English" for mixed-language documents. Works well on printed text, screenshots, scanned documents and photos with good contrast.

How to use it

  1. Choose language (Norwegian, English, or both for mixed content).
  2. Drop an image (PNG, JPG, WebP) on the drop zone or click to pick.
  3. Wait while the language model downloads (first time only, ~3 MB per language).
  4. Copy the extracted text from the text box when processing is done.

Examples

Extract text from a screenshot
InputPNG screenshot of a 300-word article in English.
OutputPlain text with roughly 297 of 300 words recognised correctly. Paragraphs, spacing and line breaks are reasonably well preserved.
Screenshots with clean digital text give the best result (95-99% accuracy). Make sure the image is not scaled below 800 px wide, or OCR loses detail.
Scanned Norwegian invoice
InputJPG at 200 dpi of a printout, Norwegian language selected.
OutputText with reasonable accuracy. Norwegian æ/ø/å are handled when Norwegian is selected. Table layouts may come out distorted.
The Norwegian language model (nor.traineddata) includes æ/ø/å. Use English alone only if you’re sure text is English, otherwise Norwegian special characters get misrecognised.

Common use cases

  • Extract quotes from book or magazine photographs.
  • Convert scanned paper documents into searchable text.
  • Copy serial numbers or account numbers from invoices.
  • Turn video-meeting screenshots into searchable chat history.
  • Avoid uploading to insecure free online OCR services.

Frequently asked questions

Does it work on handwriting?
No, not reliably. Tesseract is trained on printed text and often guesses wrong on handwriting. For handwriting you need specialised models (e.g. Google Cloud Vision, Azure Read API), but those require uploading and aren’t local.
Why does the first run take so long?
The first run must download the core library (~2 MB WebAssembly) and language model (~3 MB per language). After that everything is cached in the browser, so the next image with the same language starts in under a second. On slow connections the first run can take 10-30 seconds.
Can I get tables and layout preserved?
Partly. Tesseract tries to preserve line breaks and paragraphs, but complex layouts like tables, columns and footnotes often collapse into one continuous text stream. For structured data, try Tabula (PDF) or commercial services with layout analysis.
What should I do if accuracy is poor?
Check the source image: make sure it’s high resolution (at least 300 dpi when scanning, 1200 px wide for photos), well lit, without shadows and at a straight angle. Convert to black-and-white with strong contrast before OCR. Remove background noise and make sure text fills most of the image.

Technical background

Tesseract.js is a JavaScript port of Tesseract 4/5, which uses LSTM neural networks for text-line recognition. The engine is compiled to WebAssembly for browser execution. Process: image blob is read to `ImageBitmap`, `Tesseract.recognize(image, lang, { logger })` starts a Web Worker that loads `tesseract-core.wasm` from CDN and the relevant `nor.traineddata` / `eng.traineddata` files (the `nor+eng` combo loads both). The image is preprocessed (grayscale, adaptive threshold), page segmentation splits lines, each line runs through the LSTM model for character-by-character prediction. Output is a `{data: {text, confidence, lines, words}}` structure; `text` goes to the textarea and confidence shows as a progress percentage.