maxwell-feng/dsh-tesseract-ocr ↗★ 0
tesseract-ocr
dsh plugin: recognize attached images locally with Tesseract OCR and send only the recognized text to the model — image bytes never leave the machine. Works on Linux, macOS and Windows (wherever the tesseract CLI is installed).
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:maxwell-feng/dsh-tesseract-ocr说明文档
阅读完整 README ↗tesseract-ocr
一个 DeepSeek Harness(dsh)插件:让纯文本模型也能"看"附件图片——图片在本机用 Tesseract OCR 识别,只有识别出的文字会发给模型 API。图片字节永远不会离开你的电脑。
主要目标平台 Ubuntu(已测试);只要装了 tesseract CLI 就能用(Linux / macOS / Windows)。
- 不需要改任何模型配置——不用在
settings.yaml里给模型加input: [text, image]。 - 对 dsh 里的任何 provider/模型通用;OCR 只作用于文本模型。
- 真正的视觉模型(本身声明支持图片)默认原样透传图片,不受影响。
- 默认安全(fail-closed):插件没加载时,模型保持纯文本,图片附件会被拒绝——不存在静默泄漏。
不要与
windows-ocr插件同时启用:两者会对同一张图各跑一次 OCR。每台机器二选一。
为什么是插件而不是 skill
dsh 的 skill 只是注入模型上下文的 Markdown 指令:不能执行代码、不能钩住请求管线、更拦不住图片被序列化上传。这个功能恰好需要这些,所以它是一个 cordis 插件,钩住 llm 服务的两个公开接缝(与 windows-ocr 同一设计):
- 能力声明(shim)——包装
ctx.llm.resolveModelInfo(以及listModels)。宿主在三处用inputModalities.includes("image")拦截图片:发送准入、切换模型、read_image工具。shim 让回答变成"支持",文本模型即可收图。 - 请求改写——包装
registration.adapter.stream(ctx.llm.stream和prepareCall().stream两条路径的唯一汇聚点)。适配器序列化请求前,所有image内容块已被替换成 OCR 文本块,适配器的图片检查永远不会触发,附件字节不会为出站请求被读取,也永远不会生成image_url。
你附加图片
→ 准入层问 ctx.llm.resolveModelInfo(shim 返回含 "image" ✓)
→ 图片存入本地附件库(会话日志、UI 预览)
→ agent 组装请求 → adapter.stream(被包装)
→ 本地读取图片字节(ctx.attachments.readImage)→ tesseract CLI
→ 图片块替换为 …识别文字…
→ 适配器序列化纯文本请求 → 发给服务商
环境要求(Ubuntu)
sudo apt update
sudo apt install -y tesseract-ocr tesseract-ocr-chi-sim # chi-sim = 简体中文;需要其他语言再加
tesseract --version # 验证安装
tesseract --list-langs # 查看已装语言
语言包:tesseract-ocr-eng(基础包一般自带)、tesseract-ocr-chi-sim(简体)、tesseract-ocr-chi-tra(繁体)、tesseract-ocr-jpn 等。language 配置用 + 连接多个语言,如 eng+chi_sim。