sci-figure について
sci-figureは、学術PDFから図やサブ図を抽出するコマンドラインスキルです。画像抽出、コンピュータービジョン、キャプションを使うフォールバックを組み合わせ、OCRでサブ図ラベルを認識できます。
主な機能
- 01指定した図または全図の一覧・抽出
- 02ラベル付きサブ図の切り出し
- 03画像抽出・CV・キャプション戦略の併用
- 04形式・解像度・OCRの選択
- 05PDFページのレンダリングと注釈
活用シーン
- 01論文PDFから図を保存
- 02複合図から一つのパネルを抽出
- 03ページ上の検出範囲を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ shzhao27208/ aut_sci_write --skill sci-figureインストール後、Claude Code で/sci-figureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
_meta.jsonCHANGELOG.mdLICENSEREADME_CN.mdREADME.mdrequirements.txtsetup.pysci_figure.egg-info/dependency_links.txtentry_points.txtPKG-INFOrequires.txtSOURCES.txttop_level.txtsci_figure/__init__.pyannotator.pycaption_detector.pycli.pycolumn_detector.pyexceptions.pyfigure_extractor.pyimage_processor.pynative_extractor.pypdf_parser.pyregion_detector.pysubfigure_splitter.pyutils.pyscripts/extract_figure.pytests/__init__.pytest_caption_dedup.py詳細
Sci-Figure — 科学論文図版抽出ツール
学術論文の PDF から図やサブ図を正確に抽出します。
ライセンスに関する注意:sci-figure は、AGPL ライセンスの PyMuPDF (fitz) にリンクしているため、AGPL-3.0-or-later ライセンスで提供されています。
インストール
初回使用前に、スキルディレクトリからパッケージをインストールします。
cd ${SKILL_DIR}
pip install -e .
これにより、sh-sci-fig CLI コマンドが登録されます。Tesseract OCR が必要です。
- Windows:
winget install UB-Mannheim.TesseractOCR - Linux:
apt install tesseract-ocr - macOS:
brew install tesseract
設定(EXTEND.md)
Bash を使用して、EXTEND.md が存在するかどうかを優先順位順に確認します。
# 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 で設定できる項目:既定の DPI | 既定の出力形式 | Tesseract のパス
使用方法
sh-sci-fig <input.pdf> [options]
オプション
| オプション | 短縮形 | 説明 | 既定値 |
|---|---|---|---|
<input> | PDF ファイルのパス | 必須 | |
--figure | -f | 図番号(1、2、3...) | 必須(--list/--all を除く) |
--subfigure | -s | サブ図のラベル(a、b、c...) | なし(図全体を返します) |
--output | -o | 出力ディレクトリ | 現在のディレクトリ |
--dpi | -d | 出力解像度 | 600 |
--list | -l | 利用可能な図番号をすべて一覧表示 | false |
--all | すべての図を抽出 | false | |
--format | 出力形式(png/jpg) | png | |
--strategy | 抽出戦略:hybrid/native/cv | hybrid | |
--ocr | OCR エンジン:tesseract/easyocr/none | tesseract | |
--render-page | 注釈付きでページ全体をレンダリング | false | |
--annotate | レンダリングしたページにバウンディングボックスを描画 | false | |
--bbox | 手動での bbox 上書き(px 単位の x0,y0,x1,y1) | なし | |
--no-trim | 余白のトリミングを無効化 | false | |
--debug | デバッグログを有効化 | false | |
--quiet | -q | 情報メッセージを非表示 | false |
使用例
# 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
出力:
Extracted: figure_2c.png (1920x1080, 600 DPI)
エラー処理
| 状況 | 動作 |
|---|---|
| 図番号が見つからない | エラーを表示し、利用可能な図番号をすべて一覧表示 |
| OCR の認識に失敗 | 図全体の領域を返す |
| サブ図の分割に失敗 | 図全体の領域を返す |
| サブ図のラベルが見つからない | 図全体の領域を返す |
技術スタック
| ライブラリ | 役割 |
|---|---|
| pdfplumber | テキストと座標の抽出(キャプション検出) |
| PyMuPDF (fitz) | ネイティブ画像の抽出、高品質なページレンダリング |
| opencv-python | CV による領域検出、連結成分分析、コンテンツ検証 |
| Pillow | 最終的なトリミング、形式変換 |
| pytesseract | サブ図ラベル認識用 OCR(既定) |
| easyocr | 代替 OCR エンジン(オプション、pip install sci-figure[ocr]) |
| numpy | 画像配列の操作 |
抽出エンジン(v2)
| エンジン | 優先順位 | 適した対象 |
|---|---|---|
| Native(PyMuPDF) | 1 番目 | PDF に埋め込まれたラスター画像 |
| CV(連結成分) | 2 番目 | ベクター画像、色付きのプロット |
| Caption-anchored | 3 番目 | 上記のエンジンが失敗した場合のフォールバック |
hybrid 戦略(既定)は、3 つのエンジンを順番に試し、結果を検証します。
検出される図のフィールド
FigureExtractor.detect_all() が返す各図は、次のキーを持つ dict です。
| フィールド | 型 | 説明 |
|---|---|---|
number | int | 図番号 |
page | int | ページインデックス(0 始まり) |
bbox_pdf | tuple | PDF ポイント単位の切り抜き領域(x0, y0, x1, y1) |
bbox_px | tuple | ピクセル単位の切り抜き領域(x0, y0, x1, y1) |
caption_text | str | キャプション全文 |
figure_type | str | 次のいずれか:figure、scheme、chart、supplementary、extended_data |
sublabels | list[str] | サブ図のラベル。例:["a","b","c"] |
image | ndarray | 切り抜いた図の画像(numpy 配列) |
engine_used | str | 切り抜きを生成したエンジン:native、cv、fallback |
list_figures() は、image フィールドを除いた同じ dict を返します。
拡張機能のサポート
EXTEND.md を使用してカスタム設定を行えます。パスと対応オプションについては、設定のセクションを参照してください。
© ライセンスと著作権
Aut_Sci_Write — 自律型科学論文執筆ツール
- 著者:Shuo Zhao
- ライセンス:MIT License
- 著作権:© 2026 Shuo Zhao. All rights reserved.
- オリジナル作品:本作品は著者が作成したオリジナル作品です。明示的な許可なく、複製、再配布、または商用利用することはできません。 本ソフトウェアのコピーを取得したすべての人に対し、無償で次のことを許可します…(MIT ライセンスの全文については、ルートディレクトリの LICENSE ファイルをご覧ください。)
このスキルは Aut_Sci_Write スイートの一部です。ライセンス条項の全文については、プロジェクトルートの LICENSE ファイルをご覧ください。
コメント
Markdown 対応