这是一个用于 Bob 的 OCR 插件。它通过 OpenAI Responses API 将截图或图片交给用户指定的视觉模型识别,并把结果按行返回给 Bob。
Bob 目前提供离线文本识别、百度 OCR 试用版,以及火山、腾讯、百度、有道、Google 等带密钥的官方 OCR 服务。
这些服务可以覆盖常规 OCR,但仍有一些共同或分类上的限制:
- 官方服务面向固定 OCR 引擎,暂时不能自由调用和切换各类通用多模态大模型。
- 不同云服务需要分别申请账号、密钥、额度并理解各自的计费与地区规则,配置无法复用。
- 支持的语言、混合语言效果、复杂版面能力和识别策略由具体服务决定,用户通常不能用提示词补充领域词汇、输出格式或阅读顺序等上下文。
- 离线识别具有本地处理的隐私优势,但模型和能力固定;云服务功能更丰富,但图片需要发送给相应服务商。
本插件提供统一的 OpenAI 配置入口:可自行选择支持图片输入的模型、图片细节级别和 OCR 提示词,也可以连接兼容 OpenAI 路径格式的转发地址。
- 使用当前 OpenAI Responses API 的
input_image图片输入。 - 支持 PNG、JPEG、WEBP 和非动画 GIF;插件会根据图片文件头生成正确的 Base64 data URL。
- 模型 ID、API 基础地址、图片细节级别、提示词和超时时间均可配置。
- API 密钥使用 Bob 的安全输入框保存。
- 提示词支持
{{language}}占位符,可读取 Bob 当前选择或检测到的语言代码。 - 支持 Bob 的取消信号、服务验证和标准错误对象。
- 中文版与英文版分别构建;任意一个插件包的设置界面都只包含一种语言。
- macOS 与 Bob,Bob 最低版本
1.8.0 - 一个可用的 OpenAI API 密钥
- 支持图片输入和 Responses API 的 OpenAI 模型
- 开发或构建时需要 Node.js 24;仓库已提供
mise.toml
OpenAI 的最新模型支持情况请以模型列表为准。图片输入、格式限制和 detail 的含义请参考图片与视觉文档。官方文档建议 OCR 等精细视觉任务在模型支持时使用 original;本插件默认使用兼容性更好的 auto,可在设置中切换。
项目没有第三方 npm 依赖。先进入仓库目录,再执行:
# 中文版(默认)
mise exec -- npm run build:zh
# 英文版
mise exec -- npm run build:en
# 同时构建两个版本
mise exec -- npm run build:all产物会写入 release/:
release/
├── bob-openai-ocr-v0.1.1-zh-Hans.bobplugin
└── bob-openai-ocr-v0.1.1-en.bobplugin
构建脚本只会把选定语言的 info.json 和运行时提示文本放入对应插件包,不会在设置界面同时显示中英文。.bobplugin 根目录包含 info.json、入口 main.js、strings.js、modules/ 和 LICENSE;功能代码通过 Bob 原生 require/module.exports 机制组织,符合 Bob 的模块与打包要求。
模块职责如下:
main.js:仅保留 Bob OCR 插件入口函数。modules/ocr.js:编排 OCR 与配置验证请求。modules/config.js:读取、校验配置并构造 API URL 和请求头。modules/response.js:解析 Responses API 输出并转换为 Bob OCR 结果。modules/image.js:识别图片 MIME 类型并生成 data URL。modules/language.js:Bob 语言列表和结果语言选择。modules/errors.js:Bob 标准服务错误转换。modules/constants.js:共享默认值和语言常量。
仓库根目录的 info.json 是可直接检查的中文版默认清单,同时也是构建脚本读取公共元数据的来源;英文构建会替换其中所有面向用户的文字。中文版使用 appcast.json,英文版使用 appcast_en.json,构建脚本会自动把英文插件内的 appcast URL 切换为 appcast_en.json。仓库配置正式下载地址后,再按照 Bob 发布规范分别加入版本、SHA-256、下载 URL 和时间戳。
- 双击所需语言的
.bobplugin文件完成安装。 - 在 Bob 的「设置 → OCR → 服务」中添加
OpenAI 文本识别或OpenAI OCR。 - 填写 OpenAI API 密钥。
- 确认 API 基础地址并选择模型;如选择“自定义模型”,请在下一项填写模型 ID,然后按需调整图片细节、提示词与超时时间。
- 点击 Bob 设置页中的验证按钮检查密钥和网络连接。
| 配置项 | 默认值 | 说明 |
|---|---|---|
| OpenAI API 密钥 | 无 | 必填,使用安全输入框 |
| API 基础地址 | https://api.openai.com/v1 |
可填写以 /v1 结尾的地址或完整 /responses 地址 |
| 模型 | gpt-5.6-luna |
下拉选择 gpt-5.6-luna、gpt-5.6-terra、gpt-5.6-sol 或“自定义模型”;预置项依据当前 OpenAI 模型列表 |
| 自定义模型 | 无 | 仅在模型选择“自定义模型”时生效;必须支持图片输入和 Responses API |
| 图片细节级别 | auto |
可选 auto、original、high、low;并非所有旧模型都支持 original |
| 识别提示词 | 内置 OCR 提示词 | {{language}} 会替换为 Bob 语言代码 |
| 超时时间 | 60 秒 | 可选 30、60、120、180 或 300 秒 |
插件调用 /v1/responses 时会设置 store: false。图片仍会发送到配置的 API 服务;请在处理敏感内容前阅读 OpenAI 的数据政策,并确认所用转发服务是否有不同的数据处理规则。
mise exec -- npm run check
mise exec -- npm test
mise exec -- npm run test:coverage
mise exec -- npm run build:allmise exec -- npm run release:prepare该命令先构建中英文插件,再运行 scripts/appcast.mjs:中文版写入 appcast.json,英文版写入 appcast_en.json。脚本会从 package.json 读取版本,校验其与 info.json 一致,计算插件包 SHA-256,并生成 v<version> GitHub Release 标签下的下载 URL。同一版本重复执行时会替换原记录并保留首次生成的时间戳。
可以用以下命令确认插件包根目录内容和语言隔离:
unzip -l release/bob-openai-ocr-v0.1.1-zh-Hans.bobplugin
unzip -p release/bob-openai-ocr-v0.1.1-en.bobplugin info.json- OpenAI Responses API 返回的是识别文本,本插件不生成每行的可靠坐标,因此没有声明 Bob
supportBoundingBox能力,也不会出现在依赖坐标的原图翻译 OCR 服务列表中。 - 识别质量、速度、可用语言和费用由所选模型、图片细节级别与 OpenAI 账户额度决定。
original仅适用于支持该细节级别的模型;遇到参数错误时可切换为auto或high。- API 返回文本若不符合提示词,插件会尽量移除完整的 Markdown 代码块并按非空行交给 Bob,但不会对识别内容做二次改写。