启程租车
124.53M · 2026-02-26
这是「一天一个开源项目」系列的第 32 篇文章。今天介绍的项目是 Edit-Banana(GitHub)。
论文、报告、教材里的流程图、架构图、技术示意图往往是 PNG/JPG 或 PDF 里的「死图」——不能改文字、不能拖形状、不能换模板。Edit-Banana 是北京理工大学数据实验室(BIT-DataLab)开源的通用内容重编辑框架:用自研微调的 SAM 3(Segment Anything Model 3) 做图表元素分割,用多模态大模型(Qwen-VL / GPT-4V 等) 做多轮扫描与 OCR,把静态图/PDF 高保真转成 DrawIO(XML)、SVG、PPTX,每个元素都可单独选中、拖拽、改样式,真正「可编辑」。
为什么值得看?
config.yaml 调优Edit-Banana 的 Slogan 是 「Universal Content Re-Editor: Make the Uneditable, Editable」。它要解决的是:静态格式(图片、PDF)中的图表、示意图、公式无法直接编辑 的问题。
通过「SAM 3 分割 + 多模态大模型多轮扫描 + 高质量 OCR(Azure + VLM 回退 + 公式 LaTeX)」的流水线,把:
从而保留原图的布局逻辑、颜色、层级、箭头样式,并支持后续在 DrawIO 或 PowerPoint 中继续编辑、换模板。
面向的用户:
技术栈:Python(100% 仓库语言)、CUDA、React(前端)、FastAPI(后端)。
Edit-Banana 的核心作用是:把「不可编辑」的静态图表/PDF 转成「可编辑」的 DrawIO(XML)、SVG、PPTX。
转换时尽量做到:
论文/报告插图可编辑化
教材/讲义图表统一格式
设计稿/截图快速成图
PDF 讲义转 PPT
技术文档与培训材料
环境:Python 3.10+、Node.js & npm(前端)、建议带 CUDA 的 GPU。
# 1. 克隆
git clone
cd Edit-Banana
# 2. 创建目录
mkdir -p input output sam3_output
# 3. 下载模型(如 SAM3)
# 从 下载,放到 models/sam3.pt,并在 config 中配置路径
# 4. 后端依赖
pip install -r requirements.txt
# 5. 配置文件与环境变量
cp config/config.yaml.example config/config.yaml
# 创建 .env,配置 AZURE_ENDPOINT、AZURE_API_KEY 等(见 README)
# 6. 前端
cd frontend && npm install && cd ..
Web 方式:
# 后端
python server_pa.py # 默认
# 前端(另开终端)
cd frontend && npm run dev # 默认
浏览器访问前端地址,上传图片即可在页面内看到转换结果(如内嵌 DrawIO 编辑器)。
CLI 方式:
# 单张图
python main.py -i input/test_diagram.png
# 输出 XML 等在 output/ 目录
SAM3 分割
多轮 VLM 扫描
高质量 OCR 与公式
用户与并发
Web 与 CLI
main.py)便于脚本化。配置化
config/config.yaml 可调:SAM3 分数阈值、NMS、迭代次数、路径、主色提取等。| 对比项 | Edit-Banana | 传统截图重绘 | 通用 OCR 工具 |
|---|---|---|---|
| 输出格式 | DrawIO(XML)/SVG/PPTX 可编辑 | 多为位图 | 纯文本/表格 |
| 图表结构 | 保留形状、连线、层级 | 需人工重画 | 不保留版式 |
| 公式 | LaTeX 输出,可编辑 | 难以复用 | 部分支持 |
| 技术栈 | SAM3 + 多模态 VLM + OCR | 手工/简单工具 | 以文本为主 |
| 开源与商用 | Apache-2.0,可二次开发 | 视具体工具 | 视具体产品 |
为什么选 Edit-Banana?
整体是一条顺序 + 并行的流水线:
Input (Image/PDF)
→ SAM3 Segmentation
→ Text Extraction (Azure OCR + VLM crop-guided + LaTeX)
→ Merge spatial + text
→ DrawIO (XML) / SVG / PPTX
根据 README,结构大致为:
Edit-Banana/
├── config/ # 配置(如 config.yaml)
├── flowchart_text/ # OCR 与文本提取(Azure、Mistral、对齐等)
├── modules/ # 通用模块
├── prompts/ # 多模态/LLM 提示词
├── sam3/ # SAM3 模型封装
├── sam3_service/ # SAM3 服务化
├── scripts/ # 工具脚本(如 merge_xml.py 合并与编排)
├── static/ # 静态资源与 Demo 图
├── main.py # CLI 入口(模块化流水线)
├── server_pa.py # FastAPI 后端(Web 服务)
└── requirements.txt
前端在 frontend/(React),通过后端 API 上传文件并获取生成的 XML/PPTX。
README 提到可在 config/config.yaml 中调整:
环境变量(如 .env)需配置 AZURE_ENDPOINT、AZURE_API_KEY 等,具体以仓库说明为准。
| 模块/功能 | 状态 | 说明 |
|---|---|---|
| 核心转换流水线 | 已完成 | 分割 + 重建 + OCR 全流程 |
| 智能箭头连接 | ️ 开发中 | 自动将箭头关联到目标形状 |
| DrawIO 模板适配 | 计划中 | 支持自定义模板导入 |
| 批量导出优化 | 计划中 | 批量导出为 .drawio 等 |
| 本地 VLM 适配 | 计划中 | 支持本地 VLM,不依赖云端 API |
欢迎来我中的个人主页找到更多有用的知识和有趣的产品