DeepSeek Harness 插件:让智能体在本地“看”和“听”视频

前言

DSH(DeepSeek Harness)的理念是「一切皆插件」,开发者可以通过插件扩展智能体的能力。智能体需要看视频、听音频的场景越来越多,但主流方案要么依赖云服务上传,要么只能处理文本。插件 ck99998888/dsh-video-reader 解决这个问题,让智能体在本地直接处理视频/音频文件和实时桌面,无需上传、无需联网。

这是什么

ck99998888/dsh-video-reader 是一个 DeepSeek Harness 插件,支持智能体观看、收听和查看视频/音频文件以及实时桌面。所有处理都在本地完成:视频不上传、不联网、不依赖云服务。

插件基于 whisper.cpp + sherpa-onnx + ffmpeg 技术栈,维护者 ck99998888。插件版本 1.8.0,许可证 MIT。

核心功能

插件提供以下工具:

  • video_read:读取视频/音频元数据、关键帧、字幕,生成带说话人标签的多语种转写
  • video_frames:按时间点抓取全宽大图,一次最多 8 张
  • screen_capture:实时捕获桌面,返回每帧的拼版图和单帧路径
  • screen_frames_read:持续读取捕获直到没有未读帧
  • screen_watch:持续采样,仅在画面变化超过阈值时唤醒智能体
  • screen_record:长时捕获为视频(1 小时 30 fps 约 350 MB)
  • video_reader_setup:检查或安装外部工具链,首次使用时自动安装

安装与启用

从 GitHub 克隆仓库:

git clone https://github.com/ck99998888/dsh-video-reader $env:USERPROFILE\dsh-video-reader
pwsh -File $env:USERPROFILE\dsh-video-reader\scripts\setup.ps1

或通过 DSH 插件管理器安装:

dsh plugin --profile web add github:ck99998888/dsh-video-reader

然后安装文件夹为 bundle(插件管理器 → 安装文件夹,或 plugin_manager install_bundle),重启 DSH。Client 端会在页面启动时自动构建。

首次使用 video_read/video_frames/screen_capture 时,插件会自动下载缺失的依赖到 %LOCALAPPDATA%\dsh-video-reader\bin 和 …\models,每个文件通过 lib/deps.js 中的版本和 sha256 校验,校验失败则删除并重试。

典型用法

读取视频元数据和转写

- video_read:
    path: ./demo.mp4
    frames: 12
    start: 1:30
    end: 2:00
    transcript: true
    language: auto
    diarize: true
    subtitles: true

返回结果包含:
- 拼版图片(每格左上角烧入时间码)
- 每帧全尺寸图路径
- 说话人标签转写(如 [S1] 0:00–0:05 大家好,今天我们讨论视频阅读器的测试结果。)
- transcript.srt 完整时间戳字幕

实时捕获桌面

- screen_capture:
    seconds: 5
    fps: 20
    region: full
    frames: 12
    width: 960
    mouse: true

返回拼版图和每帧路径。screen_watch 可用于持续采样,仅在画面变化超过阈值时唤醒智能体。

检查依赖状态

- video_reader_setup:
    action: status
    components: all

返回每个组件的就绪状态、安装位置、版本以及安装耗时/体积。

屏幕捕获设置

Web UI 中「设置 → 视频阅读器」提供图形化配置:
- 允许/禁止抓屏
- 整屏 / 指定窗口 / 自定义区域
- 帧率、默认时长、每帧宽度
- 是否包含鼠标指针
- 「抓一帧预览」按钮确认范围

设置保存后立即生效,也可直接修改 %LOCALAPPDATA%\dsh-video-reader\screen-settings.json。

实现要点

  • 整屏:gdigrab -i desktop
  • 窗口:先枚举窗口坐标再裁剪(不能用 gdigrab -i title=,GDI 读不到 D3D 合成窗口)
  • 区域:使用 -offset_x/-offset_y/-video_size
  • 窗口标题子串匹配(如 Microsoft Edge)

实测帧率(2560×1600 桌面,JPEG 落盘)

目标 fps 实际产出 说明
10 9.1 fps
20 18.8 fps
30 28.5 fps 插件上限,覆盖 24–30fps 视频
40 37.9 fps
60 56.6 fps 受 JPEG 编码/写盘限制

单张全屏截图约 173 ms。总帧数封顶 240(seconds × fps ≤ 240),超了自动降 fps 并在结果中注明。

识别与分离

语种支持

使用 whisper medium-q5_0 模型,支持 99 种语言。本机实测:
- 中文:逐句全对,两名说话人分对
- 英文:全对
- 德文:全对
- 法文:仅一处冠词差异
- 俄/日/韩:模型原生支持(本机未实测)

说话人分离

使用 sherpa-onnx 离线分离:pyannote 分段模型(5.7MB)+ 3D-Speaker 声纹嵌入(27MB)+ 聚类,不联网、CPU 即可。57 秒 4 人素材实测分离正确(S1–S4),速度约为实时 20 倍。

每句转写按时间重叠度归到说话人,连续同人语句合并成一 “turn”,输出附带各说话人发言总时长。

配置

- insert:
    - id: video-reader
      name: '@local/dsh-video-reader'
      config:
        frames: 12
        columns: 4
        frameWidth: 960
        tileWidth: 320
        maxTextChars: 12000
        maxTranscriptSeconds: 900
        languages: auto
        cacheDir: .dsh-video-cache
        diarize: true
        speakers: 0
        diarizationThreshold: 0.5
        autoSetup: true
        autoSetupModels: true
        dependencyMirror: true
        ffmpegPath: ''
        ffprobePath: ''
        whisperPath: ''
        whisperModel: ''
        diarizationPath: ''
        segmentationModel: ''
        embeddingModel: ''

依赖自动安装(1.8 起)

  • 首次使用时自动下载缺失的 ffmpeg / 运行时 / 模型
  • 每个文件按版本和 sha256 校验,失败则删除重试
  • GitHub 域名不通时默认走 gh-proxy.com 镜像(dependencyMirror)
  • 设置页「依赖组件」可查看状态、手动安装、关闭自动安装

体积

组成 大小
ffmpeg + ffprobe(essentials 构建) 201 MB
whisper.cpp + sherpa-onnx 运行时 27 MB
识别模型 medium-q5_0 514 MB
分离模型(分段 + 声纹) 33 MB
代码/资源 < 0.1 MB
合计 约 778 MB

可替换模型:ggml-large-v3-q5_0.bin(1031 MB,俄/日/韩更好)或 ggml-small.bin(465 MB,更小但德/俄/日/韩准确率下降)。

适用场景与注意

适合需要智能体分析视频/音频或监控桌面的场景,如:
- 自动生成视频字幕和摘要
- 说话人分离和多语种转写
- 实时桌面监控与异常检测
- 视频内容检索与理解

注意:插件以当前 DSH 进程权限运行。安装前应检查源码与许可证(MIT)。GitHub 域名不可达时可通过 dependencyMirror 配置镜像。

短结尾

这个插件让智能体在本地完成视频/音频处理和桌面监控,无需上传和云服务。完整的插件目录页和源码仓库见下方链接。

链接

  • GitHub:https://github.com/ck99998888/dsh-video-reader
  • DSH 目录页:https://www.skillhub.cn/plugins/ck99998888/dsh-video-reader
羽毛球分组比赛记分
小程序二维码

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

Xiaoye