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!(
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}