use image::RgbImage;
use ppocr_rs::{LayoutAnalyzer, SemanticClass};
use serde::{Deserialize, Serialize};
use crate::error::Result;
pub mod ppocr;
#[cfg(feature = "tesseract-engine")]
pub mod tesseract;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrWord {
pub text: String,
pub x1: u32, pub y1: u32, pub x2: u32, pub y2: u32,
pub confidence: f32,
pub layout_idx: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrBlock {
pub text: String,
pub x1: u32, pub y1: u32, pub x2: u32, pub y2: u32,
pub confidence: f32,
pub layout_idx: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrLayoutBox {
pub class_name: String,
pub semantic: SemanticClass,
pub x1: u32, pub y1: u32, pub x2: u32, pub y2: u32,
pub reading_order: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrTable {
pub layout_idx: i32,
pub gfm: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrFormula {
pub layout_idx: i32,
pub latex: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrPageResult {
pub page_angle: u32,
pub page_width: u32,
pub page_height: u32,
pub layout_boxes: Vec<OcrLayoutBox>,
pub blocks: Vec<OcrBlock>,
pub words: Vec<OcrWord>,
pub tables: Vec<OcrTable>,
pub formulas: Vec<OcrFormula>,
}
pub trait OcrEngine: Send {
fn process_page(
&mut self,
img: &RgbImage,
layout: &mut LayoutAnalyzer,
) -> Result<OcrPageResult>;
}