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};