DDDFXYqiming/dsh-pseudo-vision
Local OCR, color-statistics, pixel-scan, and metadata bridge for text-only DeepSeek Harness models; no external vision API.
项目介绍Project Overview
dsh-pseudo-vision 是 DSH 插件,为纯文本 provider 增加本地伪视觉:在调度时把图片转成 OCR 文字、颜色统计、像素扫描和元信息,再交回原模型。适合让纯文本模型读取截图、界面或含数字的图片;默认仅接管 deepseek-official,其他 provider 需白名单。注意它依赖 OCR 与统计,复杂照片和空间关系理解有限,且首次运行会下载语言包。
dsh-pseudo-vision is a DSH plugin that adds local pseudo-vision to text-only providers. During dispatch, it converts images into OCR text, color statistics, pixel scans, and metadata, then delegates the request back to the original model. Use it for screenshots, UI images, or images containing numbers. By default it only patches deepseek-official; other providers require a whitelist. It relies on OCR and statistics, so complex photos and spatial relationships remain limited, and language data is downloaded on first run.
请帮我了解并安装插件:【dsh-pseudo-vision】【https://github.com/DDDFXYqiming/dsh-pseudo-vision】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:DDDFXYqiming/dsh-pseudo-vision
把 DDDFXYqiming/dsh-pseudo-vision 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
简体中文 | English
dsh-pseudo-vision
给 DeepSeek Harness 的 text-only provider 装上"工具层视觉":把图片在 LLM dispatch 路径上自动拆解成 OCR 文字 + 颜色统计 + 像素扫描 + 元信息,让任意纯文本模型也能"看图"。全程本机执行,无外部视觉 API。
实机验证通过(opencode-go/go1 + read_image → 纯文本模型完整描述 PowerShell 截图,数字复核通道把 OCR 误读 127.6.6.1:3080 纠正为 http://127.0.0.1:3080)。
它在做什么
- 通过
cordis.patch.yml接管deepseek-official路由,原始 provider 路由不变 - 按
bridgeProviders白名单(或bridgeOtherProviders)为其他 text-only provider 生成兄弟路由dsh-pseudo-vision/<provider>,在模型选择器中显示为· Pseudo Vision - 兄弟路由的
resolveModel/listModels强制声明inputModalities: ["text", "image"],通过 DSH 图片 admission 门 - LLM dispatch 时:原生视觉模型透传;text-only 模型读附件 → 本地 4 工具转文本 → 替换 image block + 注入
<pseudo-vision-context>→ 委派回原 provider
提供的工具
| 工具 | 作用 | 实现 |
|---|---|---|
vision_ocr |
提取图中所有文字(带归一化坐标),含数字复核通道(IP/URL/端口/长数字的 0↔6/9/8 字形重识别 + 标点保持融合) |
tesseract.js(chi_sim + eng) |
vision_color_stats |
9 桶(白/黑/灰/红/绿/蓝/黄/青/品红/其他)像素占比 + 平均亮度 | sharp + 直方图 |
vision_pixel_scan |
行+列多色桶扫描;背景桶 ≥90% 抑制,[0.15, 0.90) 区间部分带 surfaced;每桶最多 5 行 + 5 列 |
sharp raw pixel |
vision_meta |
尺寸、格式、色彩空间、四角/中心采样 | sharp metadata |
数字复核通道(v0.5.1):首遍 OCR 后用 ASCII 白名单 + PSM 7 单行模式对 IP/URL/端口/长数字重识别,标点位置保留首遍骨架(避免
127-0.0.1这类破坏),同长度 + 置信提升 ≥5 才接受,证据块[数字复核 N 处]全程留痕。通用像素扫描(v0.5.0):与颜色统计共享 512px 降采样,行/列双向输出
focusY/focusX供低置信度 OCR 复核扩大 padding。
安装
# GitHub 安装(需网络,推荐)
dsh plugin --profile web add github:DDDFXYqiming/dsh-pseudo-vision
# Windows schannel/pnpm 拦截时改用本地路径
git clone https://github.com/DDDFXYqiming/dsh-pseudo-vision.git
cd dsh-pseudo-vision && pnpm install && pnpm build
dsh plugin --profile web add <本机绝对路径>
使用
装上即生效,无需额外配置。deepseek-official 路由继续自动支持图片。其他 provider 默认不生成兄弟路由(避免模型选择器重复条目),需要在某 text-only provider 上收图时显式白名单:
- id: dsh-pseudo-vision
config:
bridgeProviders: ["kimi-for-coding"] # 只给这个 provider 生成兄弟路由
ocrBudget: auto # 也可 small | normal | large | mega
ocrNoResize: false # true:跳过预算缩放/放大
一次性桥接除 excludeProviders 外的所有 provider(谨慎:每个模型在选择器多一份条目):
bridgeOtherProviders: true
模型选择器出现 dsh-pseudo-vision/<provider>(· Pseudo Vision)兄弟路由;text-only 模型走本地伪视觉转换,原生视觉模型保持原生透传。
配置
- id: dsh-pseudo-vision
config:
bridgeProviders: [] # 白名单 provider 列表(空 = 仅 deepseek-official)
bridgeOtherProviders: false # true = 桥接除 excludeProviders 外所有
excludeProviders: [] # bridgeOtherProviders 时的排除列表
ocrBudget: auto # auto | small | normal | large | mega
ocrNoResize: false # true:跳过 OCR 预算缩放
langs: chi_sim+eng # tesseract 语言包
maxImages: 5 # 单请求最多转换张数
bypassCache: false # true:强制重算
cacheDir: '' # 缓存目录(默认 <home>/.dsh/cache/pseudo-vision/)
auto 适合默认使用;密集表格/细小字体选 large/mega;想限制本地 CPU/内存选 small。ocrNoResize: true 跳过预算缩放但仍执行灰度/对比度/锐化/白边增强;颜色统计/像素扫描/元信息始终基于原图。
效果示例
opencode-go/go1(纯文本) + read_image + PowerShell 截图,模型收到的伪视觉证据:
[dsh-pseudo-vision] sha256=b290f3d7e212 budget=normal 原图:image/png 187415B 预处理:灰度+反色 1196×636 238744B
[OCR chi_sim+eng] 12 行
· "dsh web: http://127.0.0.1:3080" x=0.128 y=0.230
· "dsh web: opening the default browser; pass —-no-open to disable" x=0.251 y=0.262
· …
[数字复核 2 处]
· y=0.230 "http://127.6.6.1:3080" → "http://127.0.0.1:3080"(置信度 34→66)
· y=0.413 "http://127.9.6.1:3689" → "http://127.0.0.1:3080"(置信度 38→85)
[颜色统计] 总像素 760896 · 平均亮度 57.5/255 · grey 94.3% · white 4.9%
[像素扫描] 476×512 背景豁免:grey 27 条命中(行 14 / 列 13)
· 行 y=0.0% white 99.8% · 列 x=0.2% white 71.4% · …
[元信息] 尺寸 1184×608 png sRGB
· [TL] #282c34 (深灰) · [C] #282c34 (深灰) · …
模型基于以上结构化证据"脑补"出整图内容——[数字复核] 块记录了原 OCR 误读与纠正前后,证据完全可审计。
兼容版本
| dsh 版本 | 状态 |
|---|---|
| 0.1.1-rc.2 | ✅ 唯一目标版本(v0.5.3+:dev/peer 依赖对齐;两个 bridge adapter 均实现 prepareCall) |
| 0.1.0-rc.7 / 0.1.0-rc.8 | ❌ 不再支持(依赖已随 v0.5.3 升级) |
v0.5.3 修复:dsh 0.1.1-rc.2 宿主对所有 LlmAdapter 无条件调用 prepareCall,v0.5.2 只给 PseudoVisionBridgeAdapter 实现了该方法,dsh-pseudo-vision/<provider> sibling 路由会抛 registration.adapter.prepareCall is not a function;v0.5.3 为 ProviderVisionBridgeAdapter 补齐同名实现并统一依赖到 0.1.1-rc.2。
权限
- 读取工作区图片附件
- 写入临时缓存到
~/.dsh/profiles/<profile>/.dsh-pseudo-vision/cache/(键含 sha256、budget、langs/resize 开关、OCR 管线参数版本、扫描版本) - 进程内 tesseract.js OCR + sharp(首次运行从 tesseract CDN 下载语言包,之后离线)
- 接管
deepseek-officialprovider(禁用官方 llm-deepseek,由插件重新注册) - 按
bridgeProviders白名单 /bridgeOtherProviders为指定 provider 注册兄弟路由,通过ctx.llm.registerAdapter委托原 provider。默认不注册任何其他 provider 的兄弟路由
不会:上传图片到外部 API / 修改 dsh 核心代码 / 覆盖原始 provider adapter(原路由按原逻辑运行)。
已知边界
- 复杂空间关系、真实照片:描述精度有限,伪视觉证据不等同于真实多模态理解
- OCR 仍可能认错字(除数字关键 token 已由复核通道兜底);剩余文字误读仍需留意
- 颜色统计只给占比,无法还原布局/图标细节
- 大图:OCR 按
ocrBudget预算处理;超长截图(高 > 3000px)会先切块 - 低置信度复核最多 3 个区域,提升小字可读性但不等同于图像超分辨率
- 明确不做:embedding/外部 Vision API(违背"无模型"红线)/ 主动切换兄弟路由(需手动选避免污染原始会话模型选择)/ npm 发布(仍走
dsh plugin add)
详细更新历史见 CHANGELOG.md。关联项目:dsh-vision-skill(同一作者,已弃用);架构参考 oil-oil/dsh-vision(外部 API 路线)。
License
MIT
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/colleague-skill
nocobase/nocobase
Tencent/WeKnora