bcdl-ppocr-v6 / README.md
ruisv's picture
Compiled BPU models for RDK S100/S100P
708eb80 verified
|
Raw
History Blame Contribute Delete
3.4 kB
---
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.