PaddleOCR

PaddleOCR

Turns images and PDFs into text, layout or Markdown

PaddleOCR is a Python library, with a paddleocr CLI, that reads images and PDFs and returns plain text, page layout or a complete Markdown document. The repository holds three model families:

  • PP-OCR reads text line by line, with coordinates. PP-OCRv6 has been the default model since release 3.7.
  • PP-StructureV3 breaks a page into tables, formulas, seals and images, and outputs Markdown or JSON down to the coordinates of each table cell.
  • PaddleOCR-VL pairs a layout analysis model with a 0.9B-parameter vision-language model, aimed at formulas, charts, seals and historical documents.

The open source OCR comparison sets PaddleOCR against the other OCR engines, vision models and Markdown converters.

Weights under Apache 2.0 and client-side OCR on npm

  • PP-OCRv6 in three sizes: 1.5M, 7.7M and 34.5M parameters, built for edge devices, mobile and servers. One model covers 50 languages, 46 of them in Latin script; dedicated PP-OCRv5 models for Cyrillic, Arabic, Devanagari and other scripts take the total past 100.
  • Weights under Apache 2.0, same as the code: that is the license on the Hugging Face cards for PaddleOCR-VL-1.6 and PP-OCRv6. Chandra ships its weights under a modified OpenRAIL-M license, free only for research, personal use and startups under $2M in funding or revenue.
  • A choice of inference engine: the engine parameter, added in 3.5, switches between PaddlePaddle, Hugging Face Transformers and ONNX Runtime.
  • OCR in the browser: PaddleOCR.js, published on npm as @paddleocr/paddleocr-js, runs PP-OCRv5 client-side on ONNX Runtime Web. That is also where Tesseract.js runs, as a WebAssembly port of Tesseract that does not read PDFs.
  • Markdown, JSON and DOCX output: the doc2md extra also turns Word, Excel and PowerPoint files into Markdown.

Inference server for the VL model, no release since June

PaddlePaddle is still the default engine. pip install paddleocr installs no inference engine. You add PaddlePaddle, Transformers 5.10 or later, or ONNX Runtime, and the docs advise one per environment because their dependencies can conflict. Without an explicit engine, PaddleOCR runs on PaddlePaddle in most cases, and training or exporting models requires it. The documented commands pull PaddlePaddle from paddlepaddle.org.cn and Docker images from a Baidu AI Cloud registry.

PaddleOCR-VL needs an inference server in production. The docs treat local inference as a validation step. For production, the client keeps layout analysis and hands the vision model to a dedicated service: vLLM, SGLang, FastDeploy, MLX-VLM or llama.cpp. On NVIDIA hardware, vLLM needs compute capability 8.0 and CUDA 12.6 or later, which means an RTX 30, 40 or 50 series card, an A10 or an A100; the docs advise against T4 and V100 cards, which tend to time out or run out of memory. vLLM, SGLang and FastDeploy don't run natively on Windows, and on an x64 CPU llama.cpp is the only supported service. The PaddleOCR-VL Docker image is about 8 GB, the vLLM server image 13 GB. Falcon-Perception does without PaddlePaddle: it runs on PyTorch with CUDA or on MLX, with a 270M-parameter OCR model.

The vision model alone is not the pipeline. Calling PaddleOCR-VL-0.9B directly, through Transformers or a vLLM endpoint, bypasses layout analysis. If published scores don't reproduce or the output fills with hallucinations, the docs say to first check that the full pipeline is running.

PP-OCRv6 scores come from an internal test set. The README claims PP-OCRv6 medium beats Qwen3-VL-235B and GPT-5.5, while the docs state that PP-OCRv6 figures are measured on an internal evaluation set.

Six releases between January and June 2026, none since. Release 3.3.3 shipped on January 20 and 3.7.0 on June 11. The repository took 127 commits between January 1 and that release, then 11 more up to September 16, and only one of those adds a feature: HPD-Parsing support, on July 22.