Skip to main content

layout/
layout.rs

1//! `cargo run -p fleischwolf-pdf --example layout -- file.pdf`
2//! Runs layout detection on page 1 and prints the regions.
3
4use fleischwolf_pdf::layout::LayoutModel;
5use fleischwolf_pdf::PdfDocument;
6
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!("page {} ({:.0}x{:.0}): {} regions", i + 1, page.width, page.height, regions.len());
17        let mut rs = regions.clone();
18        rs.sort_by(|a, b| a.t.total_cmp(&b.t));
19        for r in &rs {
20            println!(
21                "  {:<16} {:.2}  [{:.0},{:.0},{:.0},{:.0}]",
22                r.label, r.score, r.l, r.t, r.r, r.b
23            );
24        }
25    }
26}