前言¶
若要让 DeepSeek Harness(DSH)里的 agent 「看见」物理环境,常见做法是打开系统相机应用、把预览窗口摆好、再截屏把图喂给模型。无人值守、远程桌面,或别的窗口盖住预览时,这条链路很容易断。dsh-tool-camera 走另一条路:由 agent 调用工具,经 ffmpeg 从本机摄像头抓一帧,以与内置 read_image 相同的 image 内容块交给模型,无需相机应用在前台,也不做屏幕采集。
下面按定位、能力、安装、用法与注意点说明该插件。
这是什么¶
dsh-tool-camera 是挂在 DeepSeek Harness 上的一类 bundle 插件,仓库与维护组织为 zlmddygggzh-collab/dsh-tool-camera。在社区目录 SkillHub 中归类为模型推理。安装并重启 DSH 后,agent 会多出两个工具:camera_snapshot(抓实时帧并把真实图像交给模型)和 camera_devices(列出摄像头、ffmpeg 是否就绪以及当前采集后端)。包体约 16 KB,不捆绑 ffmpeg。
核心功能¶
camera_snapshot¶
一次调用从指定设备采集若干帧,保留最后一帧(前几帧常为全黑或过曝),保存为附件并以 image 形式返回。可选设备名、帧数、JPEG 质量,以及亮度、gamma、对比度、锐化、autoLevel(动态范围拉伸)等参数。单次调用只产出一张静帧,不是视频流;要连续观察需反复调用。工具声明 isConcurrencySafe: () => false,并发请求会排队,避免多路同时抢设备。
camera_devices¶
用于在抓图前确认本机有哪些摄像头、ffmpeg 是否可用、当前使用的采集后端(Windows 为 DirectShow,macOS 为 AVFoundation,Linux 为 V4L2)。
与「截屏看相机」的差异¶
要点在于:不依赖 Camera 应用、不要求窗口在前台、不走屏幕截图;ffmpeg 直连系统采集后端,像素从设备进入模型可见的渲染路径。
安装与启用¶
安装后必须重启 DSH,工具只在全新加载时出现。bundles 决定哪些包挂载进层栈;只 pnpm add 而不写入 dsh.profile.bundles 时插件不会生效。
方式一:一键脚本(Windows 推荐)¶
无需先下载包,可把 release 的 tgz URL 交给脚本:
pwsh -File install.ps1 -Tgz "https://github.com/zlmddygggzh-collab/dsh-tool-camera/releases/download/v1.0.1/dsh-tool-camera-1.0.1.tgz"
或使用本地已有包:
pwsh -File install.ps1 -Tgz .\dsh-tool-camera-1.0.1.tgz
脚本会定位 profile 目录、解析 pnpm,备份 package.json 与 pnpm-lock.yaml,完成 pnpm add 并在 dsh.profile.bundles 中注册;回滚可重命名生成的 *.bak-camera-<stamp> 备份文件。
方式二:手动两步¶
进入 profile 目录并添加本地 tgz(路径按你手中的包文件为准):
cd ~/.dsh/profiles/desktop
pnpm add /path/to/dsh-tool-camera-1.0.0.tgz
在同一 package.json 的 dsh.profile.bundles 数组中追加包名:
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"dshmarket",
"...",
"dsh-tool-camera"
]
}
}
方式三:npm 已发布包¶
pnpm add dsh-tool-camera
同样需要将 dsh-tool-camera 写入 dsh.profile.bundles。
卸载¶
cd ~/.dsh/profiles/desktop
pnpm remove dsh-tool-camera
并从 dsh.profile.bundles 中移除 dsh-tool-camera。README 说明其 cordis.patch.yml 仅插入自身配置行,卸载相对干净。
典型用法¶
重启后可直接用自然语言让 agent「看一下摄像头」,它会自行调用 camera_snapshot。也可在对话中给出更具体的指令,例如:
Take a snapshot with camera_snapshot, 8 frames
暗光环境若仍得到近乎全黑画面,可尝试:
Take a snapshot with camera_snapshot, autoLevel on, gamma 1.6
工具参数默认值与含义(节选,以 README 为准):
| 参数 | 默认 | 说明 |
|---|---|---|
device |
首个可用设备 | 设备名见 camera_devices |
frames |
5 | 采集帧数,保留最后一帧 |
quality |
3 | JPEG 质量 1–31,数值越低质量越好 |
autoLevel |
false | 是否做 normalize 拉伸动态范围 |
ffmpeg 从哪来¶
插件不包含 ffmpeg。首次真正采集时按顺序解析:ffmpegPath 配置 → 环境变量 DSH_FFMPEG → $DSH_HOME/tools/ffmpeg(Windows 为 ffmpeg.exe)→ PATH 上的 ffmpeg;若仍没有且 autoDownload 为 true,会从 npm 镜像拉取对应平台预编译包到 $DSH_HOME/tools/。支持 win32-x64、win32-ia32、darwin-x64、darwin-arm64、linux-x64、linux-arm64、linux-ia32。离线环境可设 autoDownload: false,自行放入二进制或配置 ffmpegPath。
配置¶
可在 profile 的 cordis.patch.yml 中覆盖插件行,无需改包内文件:
- id: tool-camera
config:
device: ov9734_azurewave_camera
frames: 8
quality: 2
timeoutMs: 30000
autoDownload: true
gamma: 1.5
工具调用参数优先于配置;两者最终走同一套 ffmpeg 滤镜链。常用键包括 timeoutMs(默认 20000)、autoDownload(默认 true)等,完整表见仓库 README。
平台说明与已知限制¶
Windows:设备名多为 DirectShow 风格字符串;若相机应用、微信视频或会议软件占用设备,ffmpeg 可能报 Could not run graph,插件会转成可读提示。
macOS:设备常为索引 0、1……首次需在「系统设置 → 隐私与安全性 → 相机」中允许 DSH 或终端访问摄像头。
Linux:设备路径为 /dev/videoN,当前用户通常需属于 video 组。
其他限制:同一时刻一般只有一个进程能打开摄像头;输出为设备原始朝向,笔记本内置头可能镜像或翻转;README 所列 DSH 发行版兼容性见 package.json 中 dsh.compatibility 字段。
适用场景与注意¶
适合需要 agent 在本地/远程会话中偶尔看一眼物理场景、又不想维护「开相机 + 截屏」脚本的开发者。插件在当前 DSH 进程权限下运行,采集的是本机摄像头而非用户主动选择的文件;安装前宜阅读源码与 MIT 许可证,确认是否符合你的安全与合规要求。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-tool-camera 用 ffmpeg 把摄像头一帧直接接进多模态对话,补足「agent 看现实世界」时绕开前台窗口与截屏的环节。更多信息见 SkillHub 目录页 与 GitHub 仓库。