oar_ocr_core/models/detection/
pp_doclayout.rs1use super::scale_aware_detector::{
8 ScaleAwareDetectorInferenceMode, ScaleAwareDetectorModel, ScaleAwareDetectorModelBuilder,
9 ScaleAwareDetectorModelOutput, ScaleAwareDetectorPostprocessConfig,
10 ScaleAwareDetectorPreprocessConfig,
11};
12use crate::core::OCRError;
13use crate::core::inference::OrtInfer;
14
15pub type PPDocLayoutPreprocessConfig = ScaleAwareDetectorPreprocessConfig;
19
20pub type PPDocLayoutPostprocessConfig = ScaleAwareDetectorPostprocessConfig;
22
23pub type PPDocLayoutModelOutput = ScaleAwareDetectorModelOutput;
25
26pub type PPDocLayoutModel = ScaleAwareDetectorModel;
31
32#[derive(Debug, Default)]
34pub struct PPDocLayoutModelBuilder {
35 inner: ScaleAwareDetectorModelBuilder,
36}
37
38impl PPDocLayoutModelBuilder {
39 pub fn new() -> Self {
41 Self {
42 inner: ScaleAwareDetectorModelBuilder::pp_doclayout(),
43 }
44 }
45
46 pub fn preprocess_config(mut self, config: PPDocLayoutPreprocessConfig) -> Self {
48 self.inner = self.inner.preprocess_config(config);
49 self
50 }
51
52 pub fn image_shape(mut self, height: u32, width: u32) -> Self {
54 self.inner = self.inner.image_shape(height, width);
55 self
56 }
57
58 pub fn build(self, inference: OrtInfer) -> Result<PPDocLayoutModel, OCRError> {
60 self.inner
61 .inference_mode(ScaleAwareDetectorInferenceMode::ScaleFactorAndImageShape)
62 .build(inference)
63 }
64}