使用基于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格式返回提取的图像和表格。<img src="./doc/mcp.png" alt="mcp_tool_use" style="zoom:67%;" />默认的MCP服务器URL:
http://localhost:5001/mcp
此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) │
└─────────────────┘ └──────────────────┘ └────────────────┘
此项目现在包括一个FastMCP工具,允许通过编程方式调用PDF提取服务。extract_figures_from_pdf工具可用于根据给定的URL从PDF中提取图像。
机器学习数据集创建 从临床试验报告和研究论文中提取视觉数据,以构建医学图像分析和AI模型的训练数据集,使研究人员能够高效地收集图像以训练医疗诊断中的机器学习算法。
临床研究数据挖掘 自动提取并编目医学研究文章中的图像,捕捉关键可视化内容,如治疗效果图表、患者结果图表和实验结果图,以支持系统综述和元分析。
学术文献回顾和教育 快速编制来自学术出版物的综合视觉库,让研究人员和教育者创建教学资源,比较研究方法,并跟踪跨学科的视觉趋势。
克隆仓库:
git clone https://github.com/Huang-lab/figure-extractor.git
cd pdf-extraction
构建Docker镜像:
docker build -t pdf-extraction .
运行Docker容器:
docker run -p 5001:5001 pdf-extraction
打开网络浏览器并导航至http://localhost:5001/docs查看API文档。
使用CLI测试API。例如,要从PDF中提取图像,请运行以下命令:
python figure_extractor.py <您的PDF路径>
/api/extract端点现在同时支持PDF文件上传和PDF URL。
您可以向/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发布。