Start here

Quick start & APIInstallOnline OCRCode generator

Models & pipelines

PP-OCRv6 modelsLanguagesPP-StructureV3PaddleOCR-VL

Deploy & integrate

Serving & APIPaddleOCR.jsMCP server

Fix & upgrade

TroubleshootingMigrate from 2.xReleases

Evaluate

Our benchmarkCompare OCR toolsLicense & cost

Tools

Online OCRInstall command builderCode generatorError fixer2.x → 3.x converterLanguage code finder

Language

English简体中文日本語Try OCR online
Free tool · No sign-up · No upload

PaddleOCR online — runs in your browser

Drop an image and the official PaddleOCR.js SDK reads it right here, on your device, with PP-OCRv6. You get every text line with its box and confidence, plus JSON and the Python code to reproduce the result.

Checked against PaddleOCR 3.7.0Updated 4 min readRuns in your browser

PaddleOCR in your browser#

Images never leave your device
Your results will appear hereDetected lines are outlined on the image. Hover a box or a line to match them up.

Private by design#

The page downloads the model, not your image. Recognition happens in this tab with ONNX Runtime Web — close the tab and nothing remains except the cached model.

50 languages, one model#

PP-OCRv6 small reads Chinese (simplified and traditional), English, Japanese and 46 Latin-script languages without switching models. The tiny tier covers 49 (no Japanese).

Same output as Python#

You get rec_texts, rec_scores and polygons in the same shape PaddleOCR 3.7 returns, plus a ready-to-run Python script for your own machine.

How this online PaddleOCR works#

This page loads PaddleOCR.js, the official browser SDK published by the PaddleOCR team as @paddleocr/paddleocr-js. It runs the same two-stage pipeline as the Python library:1

1 · InputYour imageDecoded in the browser. Never sent to a server.
2 · DetectionPP-OCRv6 detFinds every text line and returns a 4-point polygon.
3 · RecognitionPP-OCRv6 recReads each cropped line and scores its confidence.
4 · OutputLines + boxesText, confidence and polygons, as text or JSON.

Both models run through ONNX Runtime Web. The SDK picks WebGPU when your browser exposes it and falls back to WebAssembly otherwise. The model files come from Baidu's official CDN; if that fails, this page fetches the identical ONNX export from the PaddlePaddle organisation on Hugging Face. Either way they are stored in your browser's cache, so the second visit starts in seconds.3

Which model should you pick?#

ModelDownloadLanguagesBest for
PP-OCRv6 small31.2 MB50 (incl. Japanese)Default. The most accurate model the browser SDK ships.
PP-OCRv6 tiny6.3 MB49 (no Japanese)Phones and slow connections; quick checks of Latin or Chinese text.
PP-OCRv5 mobile21.5 MBChinese, English, JapaneseComparing against the previous generation.

The server-grade PP-OCRv6 medium model (the default in Python) isn't offered by the browser SDK. In our CPU benchmark small matched medium exactly on three of our five test documents and made one extra character error on each receipt, so it is a fair preview of what the Python library gives you.

Time to read one receipt in the browser

PaddleOCR.js 0.4.2, WebAssembly backend, our 4-vCPU test machine. Lower is faster.

ModelSeconds
PP-OCRv6 tiny1.14 s
PP-OCRv6 small5.82 s
Measured by paddleocr.dev, 2026-10-27, headless Chromium, no WebGPU. A laptop with WebGPU or more cores will usually be faster.

Tips for better results#

  • Crop to the text. Large photos are downscaled before detection, so small print on a big photo can get lost. Cropping is the single biggest win.
  • Text missing? Open Detection settings and lower text_det_box_thresh (for example to 0.4). Faint or low-contrast text often clears the threshold then.
  • Letters cut off at the edges? Raise text_det_unclip_ratio to 2.0 so boxes are drawn a little wider.
  • Rotated pages work up to a moderate tilt (our receipt photo is turned 7.5° and read perfectly). For pages upside down or sideways, the Python pipeline's use_doc_orientation_classify=True fixes orientation first.
  • Use the confidence slider to hide shaky lines. Red boxes are below 0.80, which is where most misreads sit.

Browser vs Python: what's different?#

This online tool (PaddleOCR.js)Python library (PaddleOCR 3.7)
InstallNonepip install + an inference engine
ModelsPP-OCRv6 small/tiny, PP-OCRv5 mobileAll, including PP-OCRv6 medium and 100+ languages
PDFsNo — export a page as an imageYes, multi-page
Tables, layout, formulasNoYes, with PP-StructureV3 or PaddleOCR-VL
Orientation / unwarpingNoOptional preprocessing models
PrivacyLocalLocal

Put the same OCR on your own website#

Everything this page does is available to you through the official SDK. The minimal version:

jsocr.js
import { PaddleOCR } from "@paddleocr/paddleocr-js";

const ocr = await PaddleOCR.create({
  lang: "en",
  ocrVersion: "PP-OCRv6",          // maps to PP-OCRv6_small
  ortOptions: { backend: "auto" }  // WebGPU if available, else WASM
});

const [result] = await ocr.predict(fileInput.files[0]);
for (const line of result.items) {
  console.log(line.text, line.score.toFixed(3), line.poly);
}

Our PaddleOCR.js guide covers bundlers, Web Workers, WebGPU headers and the CDN behaviour we had to work around to make this page reliable.

Questions#

Is this online PaddleOCR free?

Yes. There's no account, quota or watermark. The page is static: your browser downloads the open-source model once and does the work itself, so there is nothing for us to meter.

Is my image uploaded anywhere?

No. The image is read into a canvas in this tab and passed to ONNX Runtime Web locally. The only network requests are for the SDK code (jsDelivr) and model files (Baidu's CDN or Hugging Face). You can confirm this in your browser's developer tools under the Network tab.

Can I OCR a PDF here?

Not directly — the browser SDK takes images. Export the page as PNG or JPG, or use the Python library, which reads PDFs natively. For PDFs with tables or formulas, use PP-StructureV3.

Is this the official PaddleOCR demo?

No. paddleocr.dev is an independent site; this tool is built on the official PaddleOCR.js SDK. The PaddleOCR team runs its own demos, including a hosted service at paddleocr.com, which processes files on its servers.

Why does the first run take a while?

The first run downloads the model (6–31 MB depending on the tier) and starts the WebAssembly runtime. After that the model is cached by your browser and later runs only pay for inference.

Which languages does it read?

PP-OCRv6 small handles simplified and traditional Chinese, English, Japanese and 46 Latin-script languages such as French, German, Spanish, Portuguese, Italian, Polish, Turkish and Vietnamese. Korean, Arabic, Cyrillic, Thai, Devanagari and other scripts need the Python library — see the language list.

Sources

  1. PaddleOCR.js SDK README and source (model presets, backends): github.com/PaddlePaddle/PaddleOCR/tree/main/paddleocr-js — npm @paddleocr/paddleocr-js 0.4.2 (published 2026-06-11).
  2. PP-OCRv6 language coverage (50 languages for medium/small; tiny 49, no Japanese): PP-OCRv6 algorithm doc.
  3. Model download sizes: Content-Length of the official ONNX archives on Baidu's CDN and file sizes of PaddlePaddle on Hugging Face, checked 2026-10-27.
  4. Browser timings: measured by paddleocr.dev on 2026-10-27 in headless Chromium (WASM backend, no WebGPU) on a 4-vCPU Intel Xeon @ 2.10 GHz Linux container. Your device will differ.
Updated October 27, 2026·How we verify facts