dsh-tool-camera:让 DSH agent 直接抓取本机摄像头画面

前言

若要让 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 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜