返回市场
pdf图形提取-mcp服务器

pdf图形提取-mcp服务器

作者:vlln2 星标更新:2025-10-27

项目介绍

图像提取器API和MCP服务器

使用基于FastAPI的服务从PDF文档中提取图像和表格。图像提取器API和MCP服务器提供了一个简单的HTTP接口,用于PDFFigures 2.0,这是一个由Allen Institute for AI开发的强大图像提取系统。

此API封装使得它非常适合集成到各种应用程序和工作流程中,特别是对于检索增强生成(RAG)应用程序。

MCP服务器由FastMCP驱动,将PDF提取功能作为MCP工具公开。这允许与AI代理和可以自动调用提取服务的工作流无缝集成。

  • 该服务器托管了extract_figures_from_pdf工具,可以通过向/mcp端点发送HTTP请求来调用此工具。此工具接受一个PDF URL,处理文档,并以结构化的JSON格式返回提取的图像和表格。

默认的MCP服务器URL:http://localhost:5001/mcp

<img src="./doc/mcp.png" alt="mcp_tool_use" style="zoom:67%;" />

关于PDFFigures 2.0

此API服务建立在PDFFigures 2.0之上,这是一个由Allen Institute for AI开发的基于Scala的项目。PDFFigures 2.0专门设计用于从计算机科学领域的学术文献中提取图像、图注、表格和章节标题。原始工作在其学术论文中有详细描述:“PDFFigures 2.0:从研究论文中挖掘图像”(Clark和Divvala,2016)。您可以在这里阅读论文这里,并访问PDFFigures 2.0网站

┌─────────────────┐      ┌──────────────────┐      ┌────────────────┐
│   您的应用程序  │ HTTP │ 图像提取器        │ JNI  │  PDFFigures    │
│  (任何语言)   │──────►  API & MCP服务器  │──────►     2.0        │
│                 │      │  Python(FastAPI) │      │  (Scala/JVM)   │
└─────────────────┘      └──────────────────┘      └────────────────┘

特性

  • PDF图像和表格提取
  • 支持本地和远程PDF文件
  • 提取表格和图像的统计信息
  • Docker支持,便于部署
  • PDF解析的可视化选项

FastMCP工具

此项目现在包括一个FastMCP工具,允许通过编程方式调用PDF提取服务。extract_figures_from_pdf工具可用于根据给定的URL从PDF中提取图像。

使用案例

  1. 机器学习数据集创建 从临床试验报告和研究论文中提取视觉数据,以构建医学图像分析和AI模型的训练数据集,使研究人员能够高效地收集图像以训练医疗诊断中的机器学习算法。

  2. 临床研究数据挖掘 自动提取并编目医学研究文章中的图像,捕捉关键可视化内容,如治疗效果图表、患者结果图表和实验结果图,以支持系统综述和元分析。

  3. 学术文献回顾和教育 快速编制来自学术出版物的综合视觉库,让研究人员和教育者创建教学资源,比较研究方法,并跟踪跨学科的视觉趋势。

部署

Docker部署

  1. 克隆仓库:

    git clone https://github.com/Huang-lab/figure-extractor.git
    cd pdf-extraction
    
  2. 构建Docker镜像:

    docker build -t pdf-extraction .
    
  3. 运行Docker容器:

    docker run -p 5001:5001 pdf-extraction
    

测试API

  • 打开网络浏览器并导航至http://localhost:5001/docs查看API文档。

  • 使用CLI测试API。例如,要从PDF中提取图像,请运行以下命令:

    python figure_extractor.py <您的PDF路径>
    

使用

从PDF中提取图像和表格

/api/extract端点现在同时支持PDF文件上传和PDF URL。

使用API

您可以向/api/extract发送POST请求,其中包含:

  • 一个file(multipart/form-data),包含PDF。
  • 一个pdf_url(form-data),包含PDF的URL。

API将返回一个JSON响应,其中包含提取的图像和表格,包括完整的renderURL路径。

一个JSON响应示例(imageText被截断以简化显示):

[
  {
    "caption": "表III CMAPSS 数据集属性",
    "captionBoundary": {
      "x1": 113.12599182128906,
      "x2": 225.1184844970703,
      "y1": 116.80506896972656,
      "y2": 130.57305908203125
    },
    "figType": "Table",
    "imageText": [
      "需要", "风扇", "转换", "速度", "rpm", "高压", "涡轮机", "冷却", "空气", "流量",
      "lbm/s", "低压", "涡轮机", "冷却", "空气", "流量", "lbm/s", "引气", "焓", "-", "需要"
    ],
    "name": "III",
    "page": 5,
    "regionBoundary": {
      "x1": 46.8,
      "x2": 291.12,
      "y1": 140.88,
      "y2": 385.91999999999996
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-TableIII-1.png"
  },
  {
    "caption": "图3. 带有Google ADK的代理AI实现。",
    "captionBoundary": {
      "x1": 335.4129943847656,
      "x2": 516.9002685546875,
      "y1": 228.6050567626953,
      "y2": 233.40704345703125
    },
    "figType": "Figure",
    "imageText": [],
    "name": "3",
    "page": 5,
    "regionBoundary": {
      "x1": 302.88,
      "x2": 549.12,
      "y1": 86.88,
      "y2": 216
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-Figure3-1.png"
  },
  {
    "caption": "表I 代理AI与代理AI之间的比较",
    "captionBoundary": {
      "x1": 204.9189910888672,
      "x2": 390.3569641113281,
      "y1": 54.10902404785156,
      "y2": 67.87701416015625
    },
    "figType": "Table",
    "imageText": [
      "pert", "系统", "基于LLM的", "代理", "多代理", "协调", "意图驱动", "工作流", "任务",
      "范围", "专注于", "短期", "明确定义的任务", "面向长期", "动态",
    ],
    "name": "I",
    "page": 2,
    "regionBoundary": {
      "x1": 51.839999999999996,
      "x2": 543.12,
      "y1": 77.75999999999999,
      "y2": 217.92
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-TableI-1.png"
  },
  {
    "caption": "图1. 传统AI代理与代理AI",
    "captionBoundary": {
      "x1": 224.30499267578125,
      "x2": 370.9708251953125,
      "y1": 448.1660461425781,
      "y2": 452.968017578125
    },
    "figType": "Figure",
    "imageText": [],
    "name": "1",
    "page": 2,
    "regionBoundary": {
      "x1": 45.839999999999996,
      "x2": 549.12,
      "y1": 230.88,
      "y2": 436.08
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-Figure1-1.png"
  },
  {
    "caption": "表IV 维护行动总结",
    "captionBoundary": {
      "x1": 215.99301147460938,
      "x2": 379.2913513183594,
      "y1": 54.10902404785156,
      "y2": 67.87701416015625
    },
    "figType": "Table",
    "imageText": [
      "#", "发动机", "剩余使用寿命", "范围", "推荐", "行动", "优先级", "成本", "(美元)", "工时", "分配",
      "人员", "计划时间", "15", "82–124", "监控", "低", "0", "0", "[初级机械师]", "7天内"
    ],
    "name": "IV",
    "page": 7,
    "regionBoundary": {
      "x1": 48.96,
      "x2": 549.12,
      "y1": 77.75999999999999,
      "y2": 135.12
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-TableIV-1.png"
  },
  {
    "caption": "表II 意图处理的关键组件",
    "captionBoundary": {
      "x1": 345.09295654296875,
      "x2": 507.22100830078125,
      "y1": 417.8482666015625,
      "y2": 431.6162414550781
    },
    "figType": "Table",
    "imageText": [
      "目标", "指定", "资源", "或", "实体", "意图适用的对象。", "可以", "静态定义", "(显式列表)", "或", "动态定义", "(使用过滤器或标准)",
      "上下文"
    ],
    "name": "II",
    "page": 3,
    "regionBoundary": {
      "x1": 302.88,
      "x2": 549.12,
      "y1": 441.84,
      "y2": 677.04
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-TableII-1.png"
  },
  {
    "caption": "图2. 应用意图驱动和代理AI的工业5.0框架。",
    "captionBoundary": {
      "x1": 159.51600646972656,
      "x2": 435.7596435546875,
      "y1": 288.3310241699219,
      "y2": 293.13299560546875
    },
    "figType": "Figure",
    "imageText": [],
    "name": "2",
    "page": 4,
    "regionBoundary": {
      "x1": 45.839999999999996,
      "x2": 549.12,
      "y1": 49.68,
      "y2": 276
    },
    "renderDpi": 300,
    "renderURL": "http://localhost:5001/resources/4-Figure2-1.png"
  }
]

应用结构

项目/
├── Dockerfile                # 定义FastAPI Web服务的Docker镜像
├── Dockerignore    
├── app/                      # 包含FastAPI Web服务代码
│   ├── __init__.py           # 初始化FastAPI应用
│   ├── app.py                # 定义API端点和MCP服务器
│   ├── service.py            # 包含运行`pdffigures2`的逻辑
│   └── utils.py              # 文件处理的实用函数
├── figure_extractor.py       # 从PDF文件中提取图像和表格的CLI及模块
└── README.md                 

致谢

本项目是Huang-lab/figure-extractor的一个分支。我们感谢原始作者的工作。

许可证

本项目根据Apache许可证2.0发布。