use serde::{Deserialize, Serialize};
use spdf_types::SpdfResult;
#[derive(Debug, Clone)]
pub struct OcrOptions {
pub languages: Vec<String>,
pub correct_rotation: bool,
pub dpi: Option<u32>,
}
impl Default for OcrOptions {
fn default() -> Self {
Self {
languages: vec!["en".into()],
correct_rotation: false,
dpi: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OcrResult {
pub text: String,
pub bbox: [f64; 4],
pub confidence: f64,
}
pub trait OcrEngine: Send + Sync {
fn name(&self) -> &'static str;
fn recognize(&self, image: &[u8], options: &OcrOptions) -> SpdfResult<Vec<OcrResult>>;
fn recognize_batch(
&self,
images: &[&[u8]],
options: &OcrOptions,
) -> SpdfResult<Vec<Vec<OcrResult>>> {
images
.iter()
.map(|img| self.recognize(img, options))
.collect()
}
}