← SkillSafe OCR Lab

Read the text out of a screenshot, without uploading it

Detection and recognition both run in this tab, on the PP-OCRv6 models, through onnxruntime-web compiled to WebAssembly. Your image is never sent anywhere — there is no upload step and no server in the recognition path. It works offline once the models are loaded.

The PP-OCRv6_tiny weights ship with the app — about 6 MB, loaded once when you open the page and then cached by your browser. Nothing to download, no sign-in, and the models are the publisher's own bytes, unmodified.

Free, and it works signed out: recognition itself, the per-line confidence score for every line, the bounding boxes, a filter for just the low-confidence lines, the diagnostics panel, and every export — text, CSV, JSON and Markdown. Only the optional repair-and-structure pass in step 4 is metered: it needs a signed-in account with credits, and it is reconciled against the local recogniser so it cannot quietly invent a character the recogniser never produced.

1 · The engine

loading…

Loading the PP-OCRv6 models…

Detection 1.7 MB, recognition 4.3 MB, plus the 6,904-entry character dictionary. It runs in this tab; nothing is uploaded.

Use a different model package (advanced)

The bundled models are PP-OCRv6_tiny. To run a different PP-OCR package — small, medium, or one you fine-tuned — drop its files here: the detection .onnx, the recognition .onnx, and the recognition inference.yml that carries the character dictionary. Names do not matter; each file is identified by its graph shape, and the thresholds, channel order and dictionary are all read out of the package itself rather than assumed.

Drop a model package here

or

small and medium use a different detection head and a larger dictionary. Both load, but they are slower, and the post-processing here is tuned for tiny.

Offline copy of the engine

The engine is about 20 MB — a 13.5 MB WebAssembly runtime and 6.2 MB of weights — and this site's assets are only cacheable for five minutes, so the app keeps its own verified copy in the browser's Cache Storage. That is what makes a reload instant instead of a fresh 20 MB download. Each entry is keyed and checked by its SHA-256, so a new release replaces it automatically and a damaged copy is re-fetched rather than used.

Checking the cache…

2 · The image

Drop a screenshot or photo here

or · paste with Ctrl/+V · try a sample: ·

Load the engine and an image first.

3 · Recognised text

Nothing recognised yet. The bundled sample below is a real capture from these models, so you can see the output shape before loading anything.

4 · Repair and structure metered

Recognition gives you lines. This pass gives you a document: reading order fixed, split sentences rejoined, obvious character confusions corrected and flagged, and — if you ask for it — the values pulled out as JSON. It runs on the platform's model, so it costs credits, and the app checks its answer against what the recogniser actually produced.