coreldraw-vectorize-mcp
by cjjjqxx
README.md
# coreldraw-vectorize-mcp
把位图(示意图、地质图、图表、流程图、表格、扫描件……)**一次调用**转成**可编辑的 CorelDRAW 矢量文件**的 MCP 服务器。
线条、色块、网格是矢量曲线,文字是可编辑的文本对象;模糊、缩小、JPEG 压缩过的图也能处理。
结果中拿不准的地方会**报告给调用它的 AI**,由 AI 核对修正后一键重建。
*An MCP server that turns raster drawings (diagrams, maps, charts, flowcharts, tables, scans) into editable
CorelDRAW vector files in one call: traced linework and colour regions, re-created editable text, and a
self-check that reports anything uncertain back to the calling AI so it can fix and rebuild.*

<sub>10 张 MCP 开发时从未针对其调参的图:每组左为输入,右为一次调用、无人工修正的结果。</sub>
## 功能
- **一次调用**:`cdr_vectorize(image_path)` 完成超分辨率、OCR、分层描摹、文字重建,输出 `result.cdr` + `result.png`
- **自动判断模式**:彩色(色块/填充/网格分层)或黑白线稿
- **文字变成可编辑文本**:多尺度 OCR 投票;支持斜排、竖排文字;粘连的多个标签自动拆分;中文用新宋体,数字/英文按原图比对选 Times New Roman 或 Arial;按原图笔画粗细模拟加粗
- **适应低质量输入**:Real-ESRGAN 超分;大图自动缩放;扫描件纸张底色校正;JPEG 褪色色块按色相找回
- **细节保真**:网格线识别为矢量折线;PowerTRACE 会丢掉的点状填充、短剖面线直接画成矢量;色块深色描边还原
- **自检并报告问题**(`issues`):图形覆盖率、多余内容、颜色、小元素丢失、描摹失败、文字回读;附差异图(红 = 缺失,蓝 = 多余)
- **核对图**(`review_sheet`):把不确定的文字(L#)和可能漏识别的文字(M#)拼成一张图,AI 看一张图就能核对


## 环境要求
| 项 | 说明 |
|---|---|
| 系统 | Windows(通过 COM 驱动 CorelDRAW) |
| CorelDRAW | 已在 **CorelDRAW Graphics Suite 2022(v24)** 上验证;使用前需先手动打开 CorelDRAW 窗口 |
| Python | 3.11+ |
| Real-ESRGAN | [realesrgan-ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN/releases) Windows 版(需要支持 Vulkan 的显卡) |
## 安装
```bash
git clone https://github.com/cjjjqxx/coreldraw-vectorize-mcp.git
```
```bash
cd coreldraw-vectorize-mcp
```
```bash
python -m venv .venv
```
```bash
.venv\Scripts\pip install -r requirements.txt
```
然后下载 [Real-ESRGAN ncnn-vulkan](https://github.com/xinntao/Real-ESRGAN/releases)(`realesrgan-ncnn-vulkan-*-windows.zip`),解压成:
```
tools/realesrgan/realesrgan-ncnn-vulkan.exe
tools/realesrgan/models/realesrgan-x4plus-anime.*
```
(也可以放在别处,用环境变量 `CDR_TOOLS` 指向包含 `realesrgan/` 的目录。)
## 接入 MCP 客户端
在 Claude Code / Claude Desktop 等客户端的 MCP 配置中加入(路径改成你的):
```json
{
"mcpServers": {
"cdr": {
"type": "stdio",
"command": "C:\\path\\to\\coreldraw-vectorize-mcp\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\coreldraw-vectorize-mcp\\cdr_server.py"]
}
}
}
```
可选环境变量:
| 变量 | 作用 | 默认 |
|---|---|---|
| `CDR_WORK` | 未指定 `work_dir` 时的输出目录 | `~/cdr-vectorize-work` |
| `CDR_TOOLS` | 含 `realesrgan/` 的目录 | 仓库下的 `tools/` |
| `CDR_EXE` | CorelDRAW 可执行文件(仅 `cdr_launch` 使用) | 默认安装路径 |
## 使用
### 推荐流程
1. 打开 CorelDRAW。
2. 调用 `cdr_vectorize(image_path)`。返回 `result.cdr`、`result.png`,以及:
- `needs_review`:是否有需要核对的地方
- `labels_to_check`:不确定的文字(原因 + 其他可能读法)
- `unlabeled_text`:疑似没识别出来的文字区域
- `review_sheet`:一张核对图
- `issues`:图形自检发现的问题(带区域坐标和修复建议),`self_check.diff_png` 为差异图
3. 若 `needs_review` 为 true:AI 查看 `review_sheet` / `diff_png`,修正 `labels`,调用
`cdr_vectorize_build(work_dir, labels=修正后的列表)` 重建——超分和 OCR 结果复用,只重新分层、描摹、放文字。
### 工具列表
| 工具 | 用途 |
|---|---|
| `cdr_vectorize` | 一次调用完成图片 → CDR(推荐) |
| `cdr_vectorize_prepare` / `cdr_vectorize_build` | 分两步:先超分 + OCR,再按(修正后的)标签生成 |
| `cdr_trace_image`、`cdr_reproduce`、`cdr_compare` | 纯 OpenCV 轮廓描摹(不依赖 PowerTRACE)及对比 |
| `cdr_status`、`cdr_launch`、`cdr_new_document`、`cdr_draw_*`、`cdr_add_text`、`cdr_import_image`、`cdr_export_png`、`cdr_save_document` | CorelDRAW 基础自动化 |
## 已知限制
- 中文字体统一用新宋体(按原图自动区分宋体/黑体在常见分辨率下不可靠)。
- 标题中的连续空格会丢失(OCR 结果不含空格)。
- 与坐标刻度线相连的小数字可能偏大;这类情况会作为 `text_mismatch` 报告。
- 字高只有六七个像素的极小文字无法可靠识别,会列入核对清单。
- 仅支持 Windows + CorelDRAW;其他 CorelDRAW 版本未测试。
## 测试
`regress/` 下有两套测试,都直接调用 MCP 的一次调用流程,不做人工修正:
```bash
.venv\Scripts\python regress\vec_regress.py run mytest
```
回归集:2 张参考图 × 原图 / 缩小 / 模糊 / JPEG,按标准答案打分(色块、墨线、网格、文字、丢失元素等);`compare` 子命令对比两次运行,任何指标变差都会标出。
```bash
.venv\Scripts\python regress\holdout_run.py mytest
```
新图集:10 张开发时从未调参的图,用 MCP 自检结果评估。`regress/make_synthetic.py` 可重新生成其中 4 张合成图(需要 matplotlib)。
## 测试图片来源
- `regress/holdout/g_*.png`:由 `make_synthetic.py` 生成。
- `regress/holdout/h_*.png`、`s_*.png`:作者自己的研究配图。
- `regress/refs/tibet_geo.png`、`well_logging.png`:来自公开文献/资料,仅用于测试。如您是版权方并希望移除,请提 issue,会立即删除。
## 许可证
[Apache License 2.0](LICENSE)。Real-ESRGAN 与 CorelDRAW 为第三方软件,不包含在本仓库中,遵循其各自的许可条款。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessUnresponsive