Skip to main content

df_ocr_switcher/
lib.rs

1//! df-ocr-switcher — pipeline OCR documento in puro Rust.
2//!
3//! ## Architettura
4//!
5//! ```text
6//! Input (TIFF/PNG/JPEG)
7//!   └── DocPipeline
8//!         ├── DocOrientationClassifier (ppocr-rs PP-LCNet)  → rotazione
9//!         ├── LayoutAnalyzer           (ppocr-rs PP-DocLayoutV3) → regioni
10//!         └── OcrEngine (impl):
11//!               ├── PpOcrEngine   → detect_with_layout (PP-OCRv6)
12//!               └── TesseractEngine → Ocr5Engine + layout assignment
13//!   └── Output
14//!         ├── Markdown  (to_markdown)
15//!         └── JSON      (serde_json)
16//! ```
17//!
18//! ## Quickstart
19//!
20//! ```no_run
21//! use df_ocr_switcher::{DocPipeline, OutputFormat, PpOcrEngineConfig, engine::ppocr::PpOcrEngine};
22//! use std::path::PathBuf;
23//!
24//! let engine = PpOcrEngine::new(PpOcrEngineConfig::default()).unwrap();
25//! let mut pipeline = DocPipeline::new(
26//!     Box::new(engine),
27//!     "models/paddleocr/layout/PP-DocLayoutV3.onnx",
28//! ).unwrap();
29//!
30//! let md = pipeline.process_file("scan.tiff", OutputFormat::Markdown).unwrap();
31//! println!("{md}");
32//! ```
33
34pub mod engine;
35pub mod error;
36pub mod input;
37pub mod output;
38pub mod pipeline;
39
40pub use engine::{OcrBlock, OcrEngine, OcrFormula, OcrLayoutBox, OcrPageResult, OcrTable, OcrWord};
41pub use engine::ppocr::{OcrModelPaths, PpOcrEngine, PpOcrEngineConfig, TableModelPaths};
42#[cfg(feature = "tesseract-engine")]
43pub use engine::tesseract::{TesseractEngine, TesseractEngineConfig};
44pub use error::{Error, Result};
45pub use output::markdown::{page_to_markdown, to_markdown};
46pub use pipeline::{DocPipeline, OutputFormat};