Skip to main content

sci-figure

Extracts figures and sub-figures from academic PDF papers. Supports Fig/Figure, Scheme, Chart, Supplementary Figure, Extended Data Figure (Nature), and Chinese equivalents (图/方案/示意图/附图/补充图). Sub-figure label recognition supports (a)/(A)/a)/(i)/(1)/a. formats. High-quality PNG output at configurable DPI. Use when user asks to "extract figure", "截取文献图片", "提取子图", "get figure from paper", "Scheme", "方案图", "补充图", "Supplementary Figure", or "Extended Data".

来源信息

仓库
ShZhao27208/Aut_Sci_Write
最近来源活动
2026年8月13日 15:55
检测到的 SKILL.md 语言
英语
星标
210
Forks
28

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
30 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
sci-figure
description
Extracts figures and sub-figures from academic PDF papers. Supports Fig/Figure, Scheme, Chart, Supplementary Figure, Extended Data Figure (Nature), and Chinese equivalents (图/方案/示意图/附图/补充图). Sub-figure label recognition supports (a)/(A)/a)/(i)/(1)/a. formats. High-quality PNG output at configurable DPI. Use when user asks to "extract figure", "截取文献图片", "提取子图", "get figure from paper", "Scheme", "方案图", "补充图", "Supplementary Figure", or "Extended Data".
author
Shuo Zhao
license
AGPL-3.0-or-later
copyright
© 2026 Shuo Zhao. All rights reserved.
triggers
["提取图片","截取文献图片","提取子图","提取附图","补充图","方案图","示意图","图片提取","extract figure","extract subfigure","get figure from paper","Supplementary Figure","Extended Data","Scheme","figure extraction"]
# Sci-Figure — Scientific Figure Extractor Precisely extract figures and sub-figures from academic PDF papers. > **License note**: sci-figure is licensed under **AGPL-3.0-or-later** because it links [PyMuPDF (fitz)](https://pymupdf.readthedocs.io/), which is AGPL-licensed. ## Installation Install the package from the skill directory before first use: ```bash cd ${SKILL_DIR} pip install -e . ``` This registers the `sh-sci-fig` CLI command. Requires Tesseract OCR: - Windows: `winget install UB-Mannheim.TesseractOCR` - Linux: `apt install tesseract-ocr` - macOS: `brew install tesseract` ## Preferences (EXTEND.md) Use Bash to check EXTEND.md existence (priority order): ```bash # Check project-level first test -f .baoyu-skills/sci-figure/EXTEND.md && echo "project" # Then user-level (cross-platform: $HOME works on macOS/Linux/WSL) test -f "$HOME/.baoyu-skills/sci-figure/EXTEND.md" && echo "user" ``` **EXTEND.md Supports**: Default DPI | Default output format | Tesseract path ## Usage ```bash sh-sci-fig <input.pdf> [options] ``` ## Options | Option | Short | Description | Default | |--------|-------|-------------|---------| | `<input>` | | PDF file path | Required | | `--figure` | `-f` | Figure number (1, 2, 3...) | Required (except --list/--all) | | `--subfigure` | `-s` | Sub-figure label (a, b, c...) | None (returns whole figure) | | `--output` | `-o` | Output directory | Current directory | | `--dpi` | `-d` | Output resolution | 600 | | `--list` | `-l` | List all available figure numbers | false | | `--all` | | Extract all figures | false | | `--format` | | Output format (png/jpg) | png | | `--strategy` | | Extraction strategy: hybrid/native/cv | hybrid | | `--ocr` | | OCR engine: tesseract/easyocr/none | tesseract | | `--render-page` | | Render full page with annotations | false | | `--annotate` | | Draw bounding boxes on rendered page | false | | `--bbox` | | Manual bbox override (x0,y0,x1,y1 in px) | None | | `--no-trim` | | Disable whitespace trimming | false | | `--debug` | | Enable debug logging | false | | `--quiet` | `-q` | Suppress info messages | false | ## Examples ```bash # Extract Figure 2, sub-figure c sh-sci-fig paper.pdf -f 2 -s c # Extract entire Figure 3 sh-sci-fig paper.pdf -f 3 # List all available figures in a PDF sh-sci-fig paper.pdf --list # Extract all figures sh-sci-fig paper.pdf --all # Custom output directory and DPI sh-sci-fig paper.pdf -f 2 -s c -o ./output/ -d 300 # Use EasyOCR for sub-figure label detection sh-sci-fig paper.pdf --all --ocr easyocr # CV-only strategy (skip native extraction) sh-sci-fig paper.pdf --all --strategy cv # Render page with annotated bounding boxes (debugging) sh-sci-fig paper.pdf -f 1 --render-page --annotate # Manual bbox extraction (multimodal correction) sh-sci-fig paper.pdf -f 1 --bbox 100,200,800,1200 ``` **Output**: ``` Extracted: figure_2c.png (1920x1080, 600 DPI) ``` ## Error Handling | Scenario | Behavior | |----------|----------| | Figure number not found | Error + list all available figure numbers | | OCR recognition failed | Return entire figure region | | Sub-figure split failed | Return entire figure region | | No sub-figure labels found | Return entire figure region | ## Tech Stack | Library | Role | |---------|------| | pdfplumber | Text + coordinate extraction (caption detection) | | PyMuPDF (fitz) | Native image extraction + high-quality page rendering | | opencv-python | CV region detection, connected-component analysis, content validation | | Pillow | Final cropping, format conversion | | pytesseract | OCR for sub-figure label recognition (default) | | easyocr | Alternative OCR engine (optional, `pip install sci-figure[ocr]`) | | numpy | Image array operations | ## Extraction Engines (v2) | Engine | Priority | Best For | |--------|----------|----------| | Native (PyMuPDF) | 1st | Raster images embedded in PDF | | CV (connected-component) | 2nd | Vector graphics, colored plots | | Caption-anchored | 3rd | Fallback when above engines fail | The `hybrid` strategy (default) tries all three in order and validates results. ## Detected Figure Fields Each figure returned by `FigureExtractor.detect_all()` is a dict with these keys: | Field | Type | Description | |-------|------|-------------| | `number` | int | Figure number | | `page` | int | Page index (0-based) | | `bbox_pdf` | tuple | Crop region in PDF points (x0, y0, x1, y1) | | `bbox_px` | tuple | Crop region in pixels (x0, y0, x1, y1) | | `caption_text` | str | Full caption text | | `figure_type` | str | One of: `figure`, `scheme`, `chart`, `supplementary`, `extended_data` | | `sublabels` | list[str] | Sub-figure labels, e.g. `["a","b","c"]` | | `image` | ndarray | Cropped figure image (numpy array) | | `engine_used` | str | Engine that produced the crop: `native`, `cv`, or `fallback` | `list_figures()` returns the same dicts without the `image` field. ## Extension Support Custom configurations via EXTEND.md. See **Preferences** section for paths and supported options. --- ## © License & Copyright **Aut_Sci_Write** — Autonomous Scientific Writer - **Author**: Shuo Zhao - **License**: MIT License - **Copyright**: © 2026 Shuo Zhao. All rights reserved. - **Original Work**: This is an original work created by the author. No reproduction, redistribution, or commercial use without explicit permission. **Permission is hereby granted**, free of charge, to any person obtaining a copy of this software... (**See the LICENSE file in the root directory for the full MIT terms.**) --- *This skill is part of the Aut_Sci_Write suite. For full license terms, see the [LICENSE](../LICENSE) file in the project root.* ---
在 GitHub 查看