Download fetch_example_images.py from phungpx/PP-DocLayoutV3-ONNX: direct link, hf CLI and curl.
- Browser
- Download file 4.21 kB
-
https://huggingface.co/phungpx/PP-DocLayoutV3-ONNX/resolve/main/fetch_example_images.py
- Command line
-
hf download hf://phungpx/PP-DocLayoutV3-ONNX/fetch_example_images.py
-
curl -L -o fetch_example_images.py https://huggingface.co/phungpx/PP-DocLayoutV3-ONNX/resolve/main/fetch_example_images.py
4.21 kB
| """Fetch open-source document images with dense, varied layouts for the model card gallery. | |
| Pulls sample pages from the CDLA-Permissive-1.0-licensed `creative-graphic-design/PubLayNet` | |
| dataset on the Hugging Face Hub (a re-hosting of PubLayNet: Zhong et al., 2019, | |
| https://arxiv.org/abs/1908.07836 — scientific articles from PubMed Central Open Access). | |
| Scores a scan window of rows by their COCO-annotation count (a proxy for layout density — | |
| how many text/title/list/table/figure regions are on the page) and downloads the densest ones, | |
| so the gallery shows the model handling as many layout elements as possible per image. | |
| Uses only the HF `datasets-server` `/rows` REST API (plain paginated JSON + signed image URLs) | |
| — no `datasets`/torch/pyarrow dependency needed. | |
| Usage: | |
| python fetch_example_images.py --count 5 --scan 3000 --out-dir examples/inputs | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import urllib.request | |
| from pathlib import Path | |
| DATASET = "creative-graphic-design/PubLayNet" | |
| ROWS_URL = "https://datasets-server.huggingface.co/rows" | |
| PAGE = 100 | |
| def scan(scan_rows: int, split: str) -> list[dict]: | |
| candidates = [] | |
| for offset in range(0, scan_rows, PAGE): | |
| url = ( | |
| f"{ROWS_URL}?dataset={DATASET.replace('/', '%2F')}&config=default" | |
| f"&split={split}&offset={offset}&length={PAGE}" | |
| ) | |
| try: | |
| with urllib.request.urlopen(url, timeout=30) as r: | |
| payload = json.load(r) | |
| except Exception as exc: | |
| print(f" offset {offset}: skipped ({exc})") | |
| continue | |
| for item in payload["rows"]: | |
| row = item["row"] | |
| candidates.append( | |
| { | |
| "file_name": row["file_name"], | |
| "width": row["width"], | |
| "height": row["height"], | |
| "n_boxes": len(row["annotations"]["bbox"]), | |
| "n_classes": len(set(row["annotations"]["category_id"])), | |
| "src": row["image"]["src"], | |
| } | |
| ) | |
| print(f" offset {offset}: scanned ({len(candidates)} candidates so far)") | |
| return candidates | |
| def main() -> int: | |
| p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) | |
| p.add_argument("--count", type=int, default=5, help="how many images to download") | |
| p.add_argument("--scan", type=int, default=2000, help="how many dataset rows to scan for density") | |
| p.add_argument("--split", default="train") | |
| p.add_argument("--out-dir", type=Path, default=Path("examples/inputs")) | |
| args = p.parse_args() | |
| args.out_dir.mkdir(parents=True, exist_ok=True) | |
| print(f"Scanning {args.scan} rows of {DATASET} ({args.split}) for the densest layouts...") | |
| candidates = scan(args.scan, args.split) | |
| if not candidates: | |
| raise SystemExit("no candidates found — dataset-server may be unreachable") | |
| candidates.sort(key=lambda c: (-c["n_boxes"], -c["n_classes"])) | |
| chosen = candidates[: args.count] | |
| manifest = [] | |
| print("\nDownloading:") | |
| for c in chosen: | |
| dest = args.out_dir / c["file_name"] | |
| urllib.request.urlretrieve(c["src"], dest) | |
| print(f" {c['n_boxes']:3d} boxes, {c['n_classes']} classes -> {dest.name} ({c['width']}x{c['height']})") | |
| manifest.append({k: v for k, v in c.items() if k != "src"}) | |
| (args.out_dir / "SOURCE.json").write_text( | |
| json.dumps( | |
| { | |
| "dataset": DATASET, | |
| "dataset_url": f"https://huggingface.co/datasets/{DATASET}", | |
| "license": "CDLA-Permissive-1.0", | |
| "citation": ( | |
| "Zhong, X., Tang, J., & Yepes, A. J. (2019). " | |
| "PubLayNet: largest dataset ever for document layout analysis. " | |
| "arXiv:1908.07836" | |
| ), | |
| "note": "Pages sourced from PubMed Central open-access scientific articles.", | |
| "images": manifest, | |
| }, | |
| indent=2, | |
| ) | |
| ) | |
| print(f"\n{len(chosen)} image(s) -> {args.out_dir}") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |