--- license: apache-2.0 library_name: bcdl tags: - rdk-s100 - rdk-s100p - d-robotics - bpu - hbm - ocr - text-recognition --- # PP-OCRv6 for RDK S100/S100P — detection + recognition + angle Compiled BPU models (`.hbm`) for the **D-Robotics RDK S100 / S100P**, ready to load — no ONNX export, no calibration, no `hb_compile`. Built and measured with [**BCDL**](https://github.com/ruisv/bcdl), a C++17 inference and media library for the RDK S-series with Python bindings. Upstream: [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) PP-OCRv6 medium > [!TIP] > **Redistributable, including commercially.** The licence chain was checked on > the code, the pretrained weights it started from, and the data it was trained > on — all three, because a permissive repository badge does not by itself say > anything about the weights. See [Licence](#licence). ## Files | file | what it is | |---|---| | `ppocrv6_medium_det_960x960.hbm` | text detection, 960x960 — 22.4 MB | | `ppocrv6_medium_rec_int16_48x320.hbm` | recognition, 48x320, all-int16 — 24.0 MB | | `ppocrv5_lcnet_cls_80x160.hbm` | textline angle 0/180 (from v5 — v6 ships none) — 2.3 MB | | `ppocr_keys_v6_18710.txt` | dictionary — required by the recogniser | ## Measured on an S100P | stage | latency | throughput | |---|---|---| | detection | 8.55 ms | 117 FPS | | recognition | 2.22 ms | 451 FPS | | angle classifier | 0.37 ms | 2710 FPS | `hrt_model_exec perf`, one thread, minimum of three runs, on a board first gated against its own previously recorded numbers. **BPU time only** — CPU pre/post-processing is on top and is listed per task in BCDL's [benchmark results](https://github.com/ruisv/bcdl/blob/main/benchmarks/RESULTS.md). ## Use it ```bash conda install -c https://mirrors.ruis.ai/conda -c conda-forge bcdl ``` ```python import bcdl engine = bcdl.Engine("ppocrv6_medium_det_960x960.hbm") print(engine.input_shape(0), engine.output_shape(0)) ``` Each task has a decoder in BCDL that turns those raw outputs into boxes, keypoints, masks, disparity or text — see the [Python API](https://github.com/ruisv/bcdl/blob/main/docs/API.md) ([中文](https://github.com/ruisv/bcdl/blob/main/docs/API.zh.md)). ## What to know before deploying **The recogniser is all-int16 on purpose.** On the S100P it roughly halves the character error of the compiler's default mixed-precision int8 build *and* is about 2x faster, because a uniform int16 graph carries no int8-int16 requant on its internal boundaries. **The dictionary is not optional and it is version-specific.** v6 recognises 18710 classes against v5's 18385; pairing a model with the wrong key file decodes to plausible-looking wrong characters rather than failing. The right one ships here. For text lines longer than about 6.7:1 there is also a 960-wide recogniser in the conversion recipe; this package carries the 320 build. ## Licence Apache-2.0, on the code **and** on every model card. **BCDL itself is Apache-2.0 and is unrelated to these terms** — it is a general-purpose runtime that loads any `.hbm`. The licence above constrains *these weights and this compiled artefact*. The conversion recipe — ONNX export, calibration, `hb_compile` config and the acceptance numbers — is public in [**bcdl-model-zoo**](https://github.com/ruisv/bcdl-model-zoo), so this build can be reproduced or retargeted rather than taken on trust.