pub struct LayoutModel { /* private fields */ }Implementations§
Source§impl LayoutModel
impl LayoutModel
Sourcepub fn load() -> Result<Self, String>
pub fn load() -> Result<Self, String>
Load the ONNX model from DOCLING_LAYOUT_ONNX (or models/layout_heron.onnx).
Examples found in repository?
examples/layout.rs (line 11)
7fn main() {
8 let path = std::env::args().nth(1).expect("usage: layout <file.pdf>");
9 let bytes = std::fs::read(&path).expect("read pdf");
10 let doc = PdfDocument::open(&bytes, None).expect("open pdf");
11 let mut model = LayoutModel::load().expect("load layout model");
12 for (i, page) in doc.pages.iter().enumerate().take(1) {
13 let regions = model
14 .predict(&page.image, page.width, page.height)
15 .expect("predict");
16 println!(
17 "page {} ({:.0}x{:.0}): {} regions",
18 i + 1,
19 page.width,
20 page.height,
21 regions.len()
22 );
23 let mut rs = regions.clone();
24 rs.sort_by(|a, b| a.t.total_cmp(&b.t));
25 for r in &rs {
26 println!(
27 " {:<16} {:.2} [{:.0},{:.0},{:.0},{:.0}]",
28 r.label, r.score, r.l, r.t, r.r, r.b
29 );
30 }
31 }
32}Sourcepub fn predict(
&mut self,
img: &RgbImage,
page_w: f32,
page_h: f32,
) -> Result<Vec<Region>, String>
pub fn predict( &mut self, img: &RgbImage, page_w: f32, page_h: f32, ) -> Result<Vec<Region>, String>
Detect layout regions on a page image. page_w/page_h are the page size
in points; returned boxes are in those coordinates.
Examples found in repository?
examples/layout.rs (line 14)
7fn main() {
8 let path = std::env::args().nth(1).expect("usage: layout <file.pdf>");
9 let bytes = std::fs::read(&path).expect("read pdf");
10 let doc = PdfDocument::open(&bytes, None).expect("open pdf");
11 let mut model = LayoutModel::load().expect("load layout model");
12 for (i, page) in doc.pages.iter().enumerate().take(1) {
13 let regions = model
14 .predict(&page.image, page.width, page.height)
15 .expect("predict");
16 println!(
17 "page {} ({:.0}x{:.0}): {} regions",
18 i + 1,
19 page.width,
20 page.height,
21 regions.len()
22 );
23 let mut rs = regions.clone();
24 rs.sort_by(|a, b| a.t.total_cmp(&b.t));
25 for r in &rs {
26 println!(
27 " {:<16} {:.2} [{:.0},{:.0},{:.0},{:.0}]",
28 r.label, r.score, r.l, r.t, r.r, r.b
29 );
30 }
31 }
32}Auto Trait Implementations§
impl !RefUnwindSafe for LayoutModel
impl !UnwindSafe for LayoutModel
impl Freeze for LayoutModel
impl Send for LayoutModel
impl Sync for LayoutModel
impl Unpin for LayoutModel
impl UnsafeUnpin for LayoutModel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more