Skip to content
imaged

OCR

PaddleOCR v5 mobile

Three-stage OCR for live feeds: detect, classify orientation, recognize.

Apache-2.0
Explore model

About this model

PP-OCRv5 mobile bundles three small ONNX stages: a 4.7 MB DBNet detector for text regions, a 0.6 MB orientation classifier for 0 or 180 degrees, and a 16 MB SVTR/CRNN recognizer. The dictionary holds 18,383 tokens covering CJK, Latin, punctuation, and emoji.

The build is the byte-identical export from PaddlePaddle's PP-OCRv5 release, converted via paddle2onnx. Use the mobile variant for live document capture or video. Switch to the server variant if recall on faint text is the bottleneck.

What you can build

  • Read receipts and labels from a phone camera in real time.
  • Extract IDs and serial numbers from product photos.
  • Caption screenshots in a desktop accessibility tool.
  • Pre-fill a form from a scanned document on device.

Variants & downloads

Choose the build for your app

Model files are being prepared.

Explore the model’s examples, source links, and integration notes while download variants are added.

Example inference

Input
A 3-line synthetic English test page with text and digits.
Output
The same page with green boxes around each detected line and the recognized text.

Performance

Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.

M1 Max, macOS 15, ONNX Runtime 1.17

See original catalog hardware notes · CPU

171.7 ms

Warm inference

Catalog reference · variant unspecifiedCold start (ms): 174.17

Reference result from the existing catalog; conversion variant and measurement date were not recorded.

RTX 2060, Ubuntu 24.04, ONNX Runtime 1.24.3

See original catalog hardware notes · CUDA

34.6 ms

Warm inference

Catalog reference · variant unspecified

Reference result from the existing catalog; conversion variant and measurement date were not recorded.

Integration examples

Vision SDK integration

cpp

#include "imaged/sdk.hpp"
#include "imaged/families/paddleocr/paddleocr_family.hpp"

imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("paddleocr.detection.model", "weights/detection_v5-small.onnx");
config.set("paddleocr.classification.model", "weights/classification.onnx");
config.set("paddleocr.recognition.model", "weights/recognition_v5.onnx");
config.set("paddleocr.recognition.dict", "weights/ppocrv5_dict.txt");

imaged::SDK::PaddleOcrFamily family;
family.load(config);

imaged::SDK::Image image;
image.load("page.jpg");

auto result = std::get<imaged::SDK::OcrResult>(family.run({&image}));
for (const auto& line : result.lines) {
    std::cout << line.text << " (score " << line.score << ")\n";
}