# Rust PaddleOCR
PaddleOCR 모델과 MNN 추론 런타임을 사용하는 경량 Rust OCR 라이브러리입니다. 텍스트 검출, 텍스트 인식, 엔드투엔드 OCR, 파일 또는 메모리 바이트에서의 모델 로딩을 지원합니다.
관련 도구:
- CLI: [newbee_ocr_cli](../../newbee_ocr_cli)
- HTTP 서비스: [newbee_ocr_service](../../newbee_ocr_service)
- C API 바인딩: [paddle-ocr-capi](../../paddle-ocr-capi)
## 지원 모델
런타임 MNN 모델 파일은 모두 `models/` 아래에 두어야 합니다.
| PP-OCRv4 | `ch_PP-OCRv4_det_infer.mnn` | `ch_PP-OCRv4_rec_infer.mnn` | 구형 중/영 모델 |
| PP-OCRv5 | `PP-OCRv5_mobile_det.mnn` 또는 `PP-OCRv5_mobile_det_fp16.mnn` | `PP-OCRv5_mobile_rec*.mnn` | 기본 중/영/일 모델과 스크립트별 모델 |
| PP-OCRv6 tiny | `PP-OCRv6_tiny_det.mnn` | `PP-OCRv6_tiny_rec.mnn` | 경량 v6 티어. 일본어는 지원하지 않음 |
| PP-OCRv6 small | `PP-OCRv6_small_det.mnn` | `PP-OCRv6_small_rec.mnn` | 균형형 v6 티어 |
| PP-OCRv6 medium | `PP-OCRv6_medium_det.mnn` | `PP-OCRv6_medium_rec.mnn` | 정확도 우선 v6 티어 |
PP-OCRv6 `small` 과 `medium` 은 중국어 간체, 중국어 번체, 영어, 일본어, 46개 라틴 문자 언어를 포함한 공식 v6 인식 언어 50개를 지원합니다. PP-OCRv6 `tiny` 는 같은 범위에서 일본어를 제외합니다. 한국어, 키릴 문자, 아랍 문자, 데바나가리, 태국어, 그리스어, 타밀어, 텔루구어는 PP-OCRv5 스크립트별 인식 모델을 사용해야 합니다.
v6 문자셋 파일은 티어별로 분리되어 있습니다.
```text
models/ppocr_keys_v6_tiny.txt
models/ppocr_keys_v6_small.txt
models/ppocr_keys_v6_medium.txt
```
## Paddle 모델을 MNN 으로 변환
변환 스크립트는 기본적으로 MNN FP16 을 사용해 모델 크기를 줄입니다. `--install-dir ./models` 를 지정하면 런타임에서 쓰는 표준 파일명으로 `models/` 에 복사합니다.
```bash
python script/convert_paddle_to_mnn.py \
--ocr-dir /path/to/paddle/inference/models \
--install-dir ./models
```
전체 정밀도 MNN 이 필요할 때만 `--no-fp16` 을 사용하세요.
## Rust 사용법
```rust
use ocr_rs::OcrEngine;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let engine = OcrEngine::new(
"models/PP-OCRv6_small_det.mnn",
"models/PP-OCRv6_small_rec.mnn",
"models/ppocr_keys_v6_small.txt",
None,
)?;
let image = image::open("test.jpg")?;
let results = engine.recognize(&image)?;
for item in results {
println!("{:.2}: {}", item.confidence, item.text);
}
Ok(())
}
```
검출 전용 또는 인식 전용 엔진도 만들 수 있습니다.
```rust
let det = ocr_rs::OcrEngine::det_only("models/PP-OCRv6_small_det.mnn", None)?;
let rec = ocr_rs::OcrEngine::rec_only(
"models/PP-OCRv6_small_rec.mnn",
"models/ppocr_keys_v6_small.txt",
None,
)?;
```
## 빌드
```bash
cargo build --release
cargo test
```
사용 가능한 경우 사전 빌드된 MNN 라이브러리가 자동으로 사용됩니다. MNN 을 소스에서 빌드하려면:
```bash
cargo build --features build-mnn-from-source
```
GPU 백엔드는 `OcrEngineConfig` 로 선택합니다.
```rust
use ocr_rs::{Backend, OcrEngineConfig};
let config = OcrEngineConfig::new().with_backend(Backend::Metal);
```
## License
Apache-2.0