资讯动态

Edit Banana 全场景内容重构器:基于 SAM 3 与多模态大模型的高保真「图片 → 可编辑 DrawIO」实践指南

发布时间:2026/10/15 2:23:52 来源:尧图企业网站定制
人工智能AI 应用计算机视觉图像处理OCR【免费下载链接】Edit-BananaEdit Banana: 一个将静态内容转换为可编辑形态的框架项目地址https://gitcode.com/BIT-DataLab/Edit-Banana点击查看免费下载本文是一份围绕开源仓库 BIT-DataLab/Edit-Banana 的中文技术指南。Edit Banana 定位为全场景内容重构器核心目标是把流程图、架构图、原理图、公式等静态图片高保真地重构成可在 draw.io 中自由拖拽、改样式、改文字的可编辑 XML 资产。读完本文你将掌握该项目的完整管道原理SAM 3 分割 OCR 文本提取 多层级 XML 合并、本地环境搭建、CLI 与 Web API 两种使用方式以及config/config.yaml中每一类参数的调优含义。一、项目定位与效果展示1.1 一句话理解项目打破静态格式的边界。让原本固定的内容摇身一变为可灵活编辑的数字化资产。依托 SAM 3 与多模态大模型技术我们提供高保真重构能力完美还原图表的精细细节与逻辑脉络。传统上图片中的图表信息是死的要么重新照着画要么借助付费软件逐点描摹。Edit Banana 的做法是让机器自动完成读图 — 拆解 — 重建三步最终输出可编辑的 DrawIOXML文件所有元素均可独立选中、拖拽、修改样式与文字。1.2 四个典型场景的 1:1 对比项目在static/demo/目录下提供了 4 组原始静态图 ↔ 可编辑重构结果的高清对照见 README_CN.md场景输入静态、不可编辑输出DrawIO 可编辑基础流程图static/demo/original_1.jpgstatic/demo/recon_1.png多层级架构图static/demo/original_2.pngstatic/demo/recon_2.png技术原理图static/demo/original_3.jpgstatic/demo/recon_3.png科学公式static/demo/original_4.jpgstatic/demo/recon_4.png转换亮点原文要点务必核对到你的输出上保留原始图表的排版逻辑、色彩搭配和元素层级关系1:1 完美还原形状的边框/填充以及箭头的样式如虚线/粗细精确的文本识别支持直接进行后续文字编辑和格式调整所有元素均可独立选中支持替换原生 DrawIO 模板以及布局优化。这些能力在源码中均有对应实现层级关系由 modules/xml_merger.py 的LayerLevel排序保证边框/填充由 modules/basic_shape_processor.py 的取色算法保证文字编辑能力来自 modules/text/xml_generator.py 生成的fontSize/fontStyle/fontColor等样式。二、核心特性与源码落点2.1 高级图像分割微调的 SAM 3使用微调的SAM 3Segment Anything Model 3实现图表元素的精准分割。项目并不是直接调用 SAM 3 的交互式分割而是通过文本提示text prompt分组驱动 SAM 3 的掩码解码器Mask Decoder工作。从源码 modules/sam3_info_extractor.py 可以看到定义了四组提示词分组PromptGroup枚举分组枚举值典型提示词来自prompts/*.py用途imagePromptGroup.IMAGEicon / picture / logo / chart / diagram见 prompts/image.py需要转 base64 的图片类元素arrowPromptGroup.ARROWarrow / line / connector见 prompts/arrow.py箭头与连接线shapePromptGroup.BASIC_SHAPErectangle / rounded rectangle / diamond / ellipse / circle / triangle / hexagon见 prompts/shape.py可矢量化的基本图形backgroundPromptGroup.BACKGROUNDpanel / container / filled region / background见 prompts/background.py背景 / 容器类大面积色块每组提示词都有独立的score_threshold置信度阈值、min_area最小面积与priority跨组去重优先级这些参数不是硬编码在代码里而是从config/config.yaml的prompt_groups段加载ConfigLoader见 modules/sam3_info_extractor.py。2.2 固定多轮 VLM 扫描由**多模态大语言模型Multimodal LLMs**引导的内容提取流程。config.yaml中的multimodal段预留了 API 模式与本地模式local_base_url、local_model等的配置位支持通过 API 或本地 Ollama 风格的端点接入 VLM。这也是路线图中本地脱机 LLM 适配的前置基础。2.3 三层文本识别策略源码层面文本能力集中在modules/text/目录由 modules/text/restorer.py 的TextRestorer统一编排本地 OCR默认 Tesseract文本定位完全离线运行安装简单。实现见 modules/text/ocr/local_ocr.py默认语言engchi_sim输出每个文本块的四边形坐标、置信度与估算字号。Pix2Text 公式识别数学公式区域识别并转换为LaTeX格式。实现见 modules/text/ocr/pix2text.pyrecognize_region()会裁剪指定区域送入recognize_formula公式块最终写入 draw.io XML 时会被转换成 MathJax 格式\(公式\)并开启math1见 modules/text/xml_generator.py。裁剪引导策略Crop-GuidedTextRestorer会先判断哪些文本块值得精修含?、(?)、短英文串等特征的块见_should_refine_block再把邻近的块合并成多边形、裁剪出高清截图送给 Pix2Text识别成功且与原文本语义不同才替换避免误改。2.4 用户系统Web 服务侧README 中介绍了面向在线平台的用户体系新用户注册赠10 个免费额度、按量付费防滥用、多用户并发支持。并发层面依赖两个关键机制全局锁机制Global Lock保证 GPU 访问的线程安全LRU 缓存在请求之间持久化图像特征Embeddings避免重复编码。对应到开源仓库可见 modules/sam3_info_extractor.py 中SAM3Model内置了一个OrderedDict实现的图像状态缓存_max_cache_size 3配合threading.Lock同一图像的 SAM 3 预处理状态state可被多个提示词复用这正是LRU 持久化特征的本地实现。三、架构流程从图片到 DrawIO 的八步管道3.1 官方架构描述README 原文输入图片格式 (PNG/JPG/BMP/TIFF/WebP)。分割 (SAM3)使用微调的 SAM3 掩码解码器 (Mask Decoder)。文本提取 (并行)本地 OCR (Tesseract) 检测文字边界框文字/公式区域的高清截图被发送至 Pix2Text 进行 LaTeX 提取。DrawIO XML 生成将 SAM3 提取的空间位置数据与 OCR 文本结果进行融合合并。3.2 源码级拆解Pipeline 的完整步骤CLI 入口 main.py 中的Pipeline.process_image()实际执行了更细的 8 步步骤输出物责任模块[0] PreprocessProcessingContext记录原始图路径、upscale 标记管道自身[1] Text extraction (OCR)text_only.drawio 上下文中的text_xmlTextRestorermodules/text/restorer.py[2] Segmentation (SAM3)元素列表 sam3_extraction.png可视化 sam3_metadata.jsonSam3InfoExtractormodules/sam3_info_extractor.py[3] Shape/icon processing元素被填充xml_fragmentIconPictureProcessor、BasicShapeProcessor[4] XML fragments为尚无 XML 的元素兜底生成片段图片转 base64、形状映射样式管道自身main.py[5] Metric evaluation可选--refine覆盖率评分 /100、问题区域列表MetricEvaluatormodules/metric_evaluator.py[6] Refinement可选对评分 90 且存在漏检区域时补充检测新元素RefinementProcessor[7] Merge XML最终output/图像名/图像名_merged.drawio.xmlXMLMergermodules/xml_merger.py其中 SAM3 分割阶段默认按BACKGROUND → BASIC_SHAPE → IMAGE → ARROW的顺序分组推理见 modules/sam3_info_extractor.py随后执行跨组去重按优先级 IoU和被大图完全包含的小元素过滤containment 85% 时移除避免大图内的小箭头/小图形被重复提取。3.3 XML 合并的层级Z 轴规则DrawIO 的 Z 轴规则是先写入的在底层后写入的在顶层。XMLMerger的排序策略modules/xml_merger.py按layer_level升序底层先写同层级内按面积降序大的在下避免遮挡。完整层级定义见 modules/data_types.py 的LayerLevel枚举层级数值代表元素BACKGROUND0section_panel、title_bar 等大面积容器BASIC_SHAPE1rectangle、ellipse、diamond 等基本图形IMAGE2icon、picture 等图片含 base64ARROW3箭头 / 连接线TEXT4文字最上层OTHER5其他这样合并出的 XML 是标准的mxfilediagrammxGraphModelroot结构直接拖入 draw.io 即可继续编辑。四、项目结构导读Edit-Banana/ ├── config/ # 配置文件 (将 config.yaml.example 复制为 config.yaml) ├── flowchart_text/ # OCR与文本提取模块 (独立入口) │ ├── src/ │ └── main.py # 纯OCR功能入口点 ├── input/ # [手动创建] 输入图像存放目录 ├── models/ # [手动创建] 模型权重 (SAM3) 及可选的 BPE 词表 ├── output/ # [手动创建] 结果输出目录 ├── sam3/ # SAM3 库 (见安装说明从 facebookresearch/sam3 安装) ├── sam3_service/ # SAM3 HTTP 服务引擎 (可选用于多进程部署) ├── scripts/ # 环境部署及实用脚本 │ ├── setup_sam3.sh # 安装 SAM3 库并将 BPE 复制到 models/ │ ├── setup_rmbg.py # 从 ModelScope 下载 RMBG 模型 │ └── merge_xml.py # XML 合并工具 ├── main.py # 命令行入口 (模块化管道) ├── server_pa.py # FastAPI 后端服务端 └── requirements.txt # Python 依赖清单各目录职责与 README 一致。其中sam3_service/是可选的独立部署形态当单进程 GPU 内存不足时可把 SAM3 推理拆成独立 HTTP 服务run_all_service.py、run_servers.sh通过 sam3_service/client.py 的Sam3ServicePool做端点轮询负载均衡实现多进程部署。flowchart_text/则是可独立运行的纯 OCR 入口。五、安装与设置三个阶段的完整实战以下内容严格对应 README_CN.md 的安装与设置章节并补充了 docs/SETUP_SAM3.md 与脚本中的实操细节。阶段 1环境与基础设置前置要求Python 3.10及支持 CUDA 的 GPU强烈推荐安装支持 CUDA 的 PyTorch以 CUDA 11.8 为例pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118注意docs/SETUP_SAM3.md中提示 SAM3 官方要求为 Python 3.12、PyTorch 2.7、CUDA 12.6可以先在当前环境尝试若报错再按官方要求升级或使用其 conda 环境。克隆仓库并初始化目录git clone https://gitcode.com/BIT-DataLab/Edit-Banana.git cd Edit-Banana mkdir -p input output sam3_output阶段 2模型与核心依赖1. 基础依赖pip install -r requirements.txtrequirements.txt包含管道与可选 Web 后端的核心依赖pyyaml、opencv-python-headless、numpy、Pillow、scikit-image、requests、fastapi、uvicorn、pytesseractPaddleOCR / Pix2Text / onnxruntime 等属于可选能力按需安装。2. SAM3 库与 BPE 词表推荐直接运行项目自带的安装脚本scripts/setup_sam3.sh它会自动克隆facebookresearch/sam3、执行pip install -e并把bpe_simple_vocab_16e6.txt.gz复制到models/bash scripts/setup_sam3.sh若无法直连 GitHub可用镜像脚本支持环境变量覆盖克隆地址SAM3_CLONE_URLhttps://gitclone.com/github.com/facebookresearch/sam3.git bash scripts/setup_sam3.sh安装后验证python -c from sam3.model_builder import build_sam3_image_model; print(OK)更完整的验证docs/SETUP_SAM3.mdpython -c from sam3.model_builder import build_sam3_image_model; from sam3.model.sam3_image_processor import Sam3Processor; print(OK)3. SAM3 模型权重sam3.pt从 ModelScope 或 Hugging Face 下载sam3.pt并放置到models/sam3_ms/目录。关键约束本项目通过torch.load加载检查点必须使用.pt文件不加载 safetensors若源仓库只提供model.safetensors需要自行转换或从其他渠道获取.pt详见 docs/SETUP_SAM3.md。ModelScope 命令行下载推荐无需申请访问cd /path/to/Edit-Banana pip install modelscope mkdir -p models python -c from modelscope import snapshot_download path snapshot_download(facebook/sam3, local_dirmodels/sam3_ms, local_files_onlyFalse) print(Downloaded to, path) 4. 本地 OCRTesseractsudo apt install tesseract-ocr tesseract-ocr-chi-sim进阶可选功能按需启用PaddleOCR中英文混排效果更好注意版本坑必须使用paddlepaddle3.2.2以避免 3.3.0 版本的 BugCPU oneDNN 问题否则会回退到 Tesseractpip install paddlepaddle3.2.2 paddleocr公式识别 Pix2Textpip install pix2text onnxruntime-gpu首次使用会自动下载约 1GB 模型文件需要网络连接GPU 加速依赖 onnxruntime-gpu。去背景 RMBGpip install onnxruntime modelscope python scripts/setup_rmbg.pyRMBG-2.0 模型用于 icon 类元素的透明背景抠图模型默认放在models/rmbg/model.onnx属于可选能力缺失时IconPictureProcessor会退化为不抠图模式见 modules/icon_picture_processor.py。阶段 3配置与故障排查完成配置cp config/config.yaml.example config/config.yaml编辑config.yaml确保sam3.checkpoint_path和sam3.bpe_path与models/下的实际文件路径一致支持绝对路径或相对项目根的路径。首次运行前检查清单配置文件已复制且config.yaml中的模型路径已设置SAM3 权重 (sam3.pt) 和 BPE 词表已放置到models/下通过scripts/setup_sam3.sh提取了 SAM3 库成功安装 Tesseract 或 PaddleOCR常见问题速查原文保留 补充说明报错信息原因与解决no kernel image is available...GPU 架构与当前 PyTorch 不匹配。升级 PyTorch或在config.yaml设置sam3.device: cpuModel file not found at ...rmbg/...RMBG 模块可选若需要请通过scripts/setup_rmbg.py下载启用不需要可忽略PaddleOCR inference failed...请使用paddlepaddle3.2.2版本或回退到 Tesseract 识别import sam3失败需在pip install -e sam3_src且sam3_src为官方完整克隆的环境中运行HF 下载慢/失败改用 ModelScope见上文命令行下载六、使用方法CLI、批量与 Web API6.1 命令行接口CLI支持常见图像格式PNG、JPG、BMP、TIFF、WebP。处理单张图片python main.py -i input/test_diagram.png最终生成的 XML 文件保存在output/目录下。批量处理时把所有图片放入input/不加-i直接运行python main.py除 README 记录的用法外main.py 的 argparse 还提供以下参数实战中非常有用参数说明-o, --output自定义输出目录默认./output--refine开启质量评估与精炼二次处理见第八章--no-text跳过 OCR 文本步骤--groups image arrow shape background只处理指定提示词分组默认全部分组--show-prompts打印当前提示词分组配置后退出另有编排脚本 scripts/merge_xml.py 提供同等能力的入口-i必填支持-o与--no-text。6.2 本地运行测试完整流程一次性设置git clone https://gitcode.com/BIT-DataLab/Edit-Banana.git cd Edit-Banana python3 -m venv .venv source .venv/bin/activate # Linux/macOS; 若是 Windows: .venv\Scripts\activate pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 或者使用纯 CPU 版本 pip install -r requirements.txt sudo apt install tesseract-ocr tesseract-ocr-chi-sim # OCR (或根据系统安装对应软件)安装 SAM3 库并下载模型权重与 BPE 词表见第五章然后mkdir -p input output cp config/config.yaml.example config/config.yaml # 编辑 config/config.yaml: 将 sam3.checkpoint_path 与 sam3.bpe_path 修改为对应的 models/ 路径CLI 测试# 在 input/ 中放入图表图片如 input/test.png python main.py -i input/test.png # 输出文件及中间结果将存放在 output/图像文件名/ 文件夹下包括 DrawIO XML 文件每个图像的输出目录中会包含text_only.drawio、sam3_extraction.pngSAM3 可视化按分组着色、sam3_metadata.json以及最终合并的图像名_merged.drawio.xml便于排查每一步的中间结果。6.3 可选测试 Web 服务 API仓库内置 FastAPI 后端server_pa.pypython server_pa.py # 服务运行在 http://localhost:8000在另一个终端验证curl -X POST http://localhost:8000/convert -F fileinput/test.png或者打开 http://localhost:8000/docs 使用交互式 Swagger 文档直接体验带文件上传的/convert接口。服务还提供GET /health健康检查与GET /服务信息。/convert会校验扩展名仅允许 PNG/JPG/JPEG/BMP/TIFF/WebP并要求config/config.yaml已就绪否则返回 503。七、配置详解config/config.yaml全参数说明README 只概括了三大配置块sam3 / paths / dominant_color而 config/config.yaml.example 提供了更完整的参数面。结合源码逐段说明如下。7.1sam3段模型路径与分割阈值sam3: checkpoint_path: models/sam3_ms/sam3.pt bpe_path: models/bpe_simple_vocab_16e6.txt.gz # device: cuda | cpu | leave empty for auto (cuda if available) # Set cpu if GPU does not match current PyTorch # device: cpu score_threshold: 0.5 epsilon_factor: 0.02 min_area: 100checkpoint_path/bpe_path模型权重与 BPE 词表路径必须指向models/下真实文件device留空自动选择有 CUDA 用 cuda否则 cpuGPU 架构不匹配时手动设cpuscore_thresholdSAM 3 掩码置信度阈值低于该值的候选掩码被丢弃见SAM3Model.predict中if score_val score_threshold: continueepsilon_factor多边形轮廓简化系数epsilon epsilon_factor × arcLength影响cv2.approxPolyDP的轮廓逼近程度min_area元素最小面积像素用于过滤过小的噪声掩码。7.2prompt_groups段分组阈值与优先级prompt_groups: image: name: image score_threshold: 0.5 min_area: 100 priority: 2 arrow: name: arrow score_threshold: 0.45 min_area: 50 priority: 4 shape: name: shape score_threshold: 0.5 min_area: 200 priority: 3 background: name: background score_threshold: 0.25 min_area: 500 priority: 1源码 modules/sam3_info_extractor.py 说明提示词本体来自prompts/*.py不可在 YAML 中改但每组的分割阈值、最小面积、去重优先级均可在 YAML 中覆盖score_threshold/min_area传给SAM3Model.predict控制该组元素的召回与噪声priority跨组去重时保留优先级高的组见_deduplicate_cross_groups排序键为(_group_priority, score)降序。例如 background 的 priority1 最低意味着当背景块与其他元素重叠时具体元素arrow/shape/image优先保留arrow 的 priority4 最高箭头检测结果最不易被丢弃。一个值得注意的默认差异background 的score_threshold只有 0.25、min_area高达 500说明设计上用低阈值换取对大面积背景色块的高召回再用大面积约束滤掉小噪声。7.3ocr段文本引擎选择ocr: engine: tesseract # tesseract | paddleocr对应 modules/text/restorer.py 的layout_ocr属性默认 Tesseract设为paddleocr时优先使用PaddleOCRAdapter中英文混排更佳一旦初始化或推理失败会自动回退到 Tesseract 并给出警告。7.4multimodal段VLM 配置位multimodal: mode: api api_key: YOUR_API_KEY_HERE base_url: YOUR_BASE_URL_HERE model: your-vlm-model-name local_base_url: http://localhost:11434/v1 local_api_key: ollama local_model: local-model-name force_vlm_ocr: false max_tokens: 4000 timeout: 60 ca_cert_path: false proxy: 此段为多模态大模型引导的文本/OCR 增强预留配置支持远程 API 与本地 Ollama 兼容端点local_base_url指向http://localhost:11434/v1即 Ollama 默认地址。7.5rmbg、paths、pipeline_mode# RMBG background removal (optional). Put model at models/rmbg/model.onnx; use scripts/setup_rmbg.py to download from ModelScope # rmbg: # model_path: models/rmbg/model.onnx # Paths (optional) paths: {} # pipeline_mode: full # optional: full | fastrmbg.model_pathRMBG-2.0 ONNX 模型路径由IconPictureProcessor读取main.py注释掉即不启用paths可设置input_dir/output_dir覆盖默认的./input/./outputmain.py 在缺失配置时也会回退到这两个默认值pipeline_modefull | fast的管道模式注释项当前默认执行完整流程。README 中提到的dominant_color颜色特征提取灵敏度在本仓库对应BasicShapeProcessor的取色逻辑默认用 K-Means 聚类取主色作为填充色、取边界最暗 25% 像素均值作为描边色见 modules/basic_shape_processor.py。八、进阶质量评估与精炼--refinepython main.py -i input/test.png --refine会启用第 5、6 步见 main.pyMetricEvaluator 覆盖率评分以内容覆盖率为唯一核心指标score 已检测元素 bbox 覆盖的前景像素 / 全图前景像素 × 100满分 100 分modules/metric_evaluator.py。背景纯白、浅灰大面积区域不参与计算所以浅色背景不会拉低分数。双通道问题区域检测细粒度通道不做形态学操作抓小图、图标、人脸等小目标 粗粒度通道7×7 闭操作合并相邻内容抓版块、大图配合小框优先 NMS避免把多个小目标误合并。判定与精炼当overall_score 90.0且存在bad_regions时RefinementProcessor会对漏检区域进行二次处理、补充新元素阈值REFINEMENT_THRESHOLD 90.0定义于 main.py。评分含义100 分完美覆盖90 分仅 10% 漏检很好70 分30% 漏检需要 refinement低于 70 分大量漏检refinement 必要。九、开发路线图、贡献与许可证9.1 开发路线图项目自述非承诺功能模块状态描述核心转换工作流✅ 已完成实现了包含图像分割、重构推理与 OCR 的完整管道智能箭头连接⚠️ 开发中将箭头与关联形状进行智能自动连接吸附DrawIO 模板适配 计划中支持自定义 DrawIO 模板导入批量导出优化 计划中支持批量将结果直接导出为 DrawIO 文件格式 (.drawio)本地脱机 LLM 适配 计划中支持本地部署小视觉语言模型 (VLM)不再强依赖外部 API9.2 贡献指南项目欢迎各类贡献Fork 仓库 → 创建特性分支git checkout -b feature/xxx→ 提交更改git commit -m feat: add xxx→ 推送git push origin feature/xxx→ 开启 Pull Request。Bug 反馈与功能建议请走 Issues / Discussions。9.3 许可证本项目基于 Apache License 2.0 开源允许在保留版权声明的前提下进行商业使用与二次开发。结语从静态图片到可编辑 DrawIOEdit Banana 给出了一条可本地复现的完整链路SAM 3 文本提示分组分割负责拆三层 OCRTesseract/PaddleOCR Pix2Text 裁剪引导负责认XMLMerger的多层级排序负责拼。无论是作为独立 CLI 工具、FastAPI 服务还是嵌入sam3_service做多进程部署其模块化架构都便于按需裁剪与二次开发。建议先跑通第五章的安装清单再用第六章的单图/批量命令验证效果最后通过第七、八章的参数调优把特定类型图表的还原精度调到最优。赞分享人工智能AI 应用计算机视觉图像处理OCR【免费下载链接】Edit-BananaEdit Banana: 一个将静态内容转换为可编辑形态的框架项目地址https://gitcode.com/BIT-DataLab/Edit-Banana点击查看免费下载相关推荐Edit Banana 实战指南用 SAM 3 与多模态大模型把静态图表一键重构为可编辑 DrawIOEdit Banana 实战指南用 SAM 3 与多模态大模型把静态图表一键重构为可编辑 DrawIO Edit Banana Edit Banana是一人工智能AI 应用计算机视觉图像处理OCR5步走完10分钟OpCore Simplify 一键生成 OpenCore EFI 完全指南5步走完10分钟OpCore Simplify 一键生成 OpenCore EFI 完全指南 OpCore Simplify 是一个开源免费的 OpenCor开发工具CLI让静态图表秒变可编辑Edit Banana 图片转 DrawIO 完全指南让静态图表秒变可编辑Edit Banana 图片转 DrawIO 完全指南 Edit Banana 是一个开源的内容重构框架核心能力是 图片转 Dra人工智能AI 应用计算机视觉图像处理OCR上一篇POCO跨平台系统调用兼容性测试平台矩阵下一篇PureScript代码审查指南提升代码质量的关键检查点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑