OCR
PaddleOCR v5 mobile
Three-stage OCR for live feeds: detect, classify orientation, recognize.
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 appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
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
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
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";
}