dsh-camera:局域网手机拍照选图,手动确认后进当前对话

前言

在 DSH Web 里做视觉相关任务时,常见做法是把手机里的照片先传到电脑、再从输入框选文件,或依赖第三方网盘链接。步骤多,大图还容易在传输或压缩环节损失细节。dsh-camera 是社区维护的 DSH Web 插件:在电脑上打开某个对话后,通过局域网二维码让手机浏览器直接拍照或选图,预览确认后一次性作为该对话的一条 user 消息进入会话,模型可立即处理图片附件。手机无需安装 App、无需登录 DSH,数据默认不经过公网。

这是什么

  • 仓库与维护者:ilovecnxx/dsh-camera,维护者 ilovecnxx;社区目录页见 skillhub.cn/plugins/ilovecnxx/dsh-camera。
  • 分类:联网工具(局域网 HTTP/可选 HTTPS 服务,非云中转)。
  • 包名:@local/dsh-camera;许可 MIT;当前资料中 package 版本为 0.3.1。
  • 适用环境:DSH >=0.2.1-rc.3 且使用 Web profile(dsh web);无第三方运行时依赖,Host 侧为 Node 内置模块加内联浏览器代码。

插件解决的核心问题:把「手机采集 → 进入当前 DSH 对话」缩短为同一 Wi-Fi 内扫码、拍/选、手动发送;多图(及可选视频)合并为一条消息,不自动发送。

架构要点

DSH Web 自身只监听回环地址,无法在局域网直接暴露拍照页。插件因此在 Host 进程内另起 node:http 服务器(默认 0.0.0.0:3579),只提供拍照页与上传接口;电脑端面板与 RPC 仍走原有 loopback Web 服务器,用浏览器 cookie 鉴权。

手机上传时,Host 通过 ctx.sessionController.prompt 以 mode: 'queue' 注入图片块,与 Web 输入框发图走同一条 admission 路径(多模态校验、EXIF 归一化、附件持久化、唤醒 agent 由 DSH 完成)。打开面板时会 camera.arm,将 token 绑定到当前 sessionId,避免误发到其他会话。

核心功能

下面能力均来自项目 README 与功能表,可按需选用。

能力 说明
入口 输入框下方「拍照上传」,生成二维码与链接,绑定当前对话
采集 手机页支持拍照(可连拍)、相册多选;可选录像(系统相机原文件,或 HTTPS 全屏相机内浏览器编码录像)
原图与视频 照片不压缩(HEIC 会转为 JPEG,因 DSH 不支持 HEIC);相册/系统相机视频原样保存
手动发送 内容先进待发送预览,点「发送 N 项」才上传;一次最多项数、大小、频率可配置
安全边界 24 字符 token、默认 2 小时过期、仅局域网、每 token 限流;不代理 DSH 本体
国际化 电脑面板与手机页跟随中英文环境

视频在对话中的形态:DSH 仅图片进入模型视觉输入;视频以文件附件进入对话(界面为文件卡片),模型拿到路径与元数据,不能直接「观看」视频内容。若当前模型不支持图片输入,上传会在手机页被拒绝并提示切换视觉模型。

安装与启用

从 GitHub 安装(README 推荐写法):

# 安装到 web profile
dsh plugin --profile web add 'github:ilovecnxx/dsh-camera'

# 确认插件进入组合
dsh --profile web --dump-config | grep -A2 dsh-camera

安装后,运行中的 dsh web 可通过 profile 热加载(dsh-hmr)重组插件树;若未出现入口,先刷新浏览器,仍无效则重启 dsh web。README 说明:非 required 的插件加载失败不会拖垮 GUI,仅记录诊断。

安装前建议自行查看仓库源码与 MIT 许可证;插件以当前 dsh web 进程权限运行,会在本机开启局域网 HTTP 服务并写入 $DSH_HOME 下的附件与可选 TLS 材料。

典型用法

  1. 在任意对话中点击输入框下方的拍照上传入口(README 中按钮文案含相机图标)。
  2. 面板展示二维码;也可复制链接发到手机。
  3. 手机与电脑连接同一 Wi-Fi,扫码打开局域网页面(HTTP 模式下浏览器提示「不安全」属预期)。
  4. 拍照、录像或从相册选择;在预览中可继续添加或删除,确认后点击「发送 N 项」。成功后电脑对应对话中出现一条 user 消息:照片为图片块,视频为文件附件。
  5. 链接默认 2 小时有效;面板可「换一个链接」作废旧 token,或关闭面板等待过期。

可选:在 cordis.patch.yml 中开启 https: true,配合本机生成的 CA 证书,可在 iPhone Safari 使用页面内全屏相机(连拍、页面内录像、不触发系统闪光灯)。不需要该能力时保持 https: false 即可,HTTP 模式仍可用系统相机拍照。

配置摘录

在 profile 的 cordis.patch.yml 中可按需 patch(字段均有默认值):

- insert:
    - id: dsh-camera
      name: '@local/dsh-camera'
      config:
        port: 3579
        lanIpOverride: ''
        tokenTtlMs: 7200000
        maxUploadBytes: 100663296
        maxImageBytes: 20971520
        maxVideoBytes: 83886080
        maxRecordSeconds: 60
        recordVideoBitsPerSecond: 10000000
        maxFilesPerUpload: 6
        uploadsPerHour: 120
        https: false
        httpsPort: 0

排障时可临时使用环境变量 DSH_CAMERA_PORT、DSH_CAMERA_LAN_IP、DSH_CAMERA_DEBUG=1(Host 日志前缀 dsh-camera)。

常见现象与处理见 README 故障排查表,例如:未检测到局域网 IP 时用 lanIpOverride;防火墙需放行端口(如 ufw allow 3579/tcp);二维码 URL 为 127.0.0.1 时表示 LAN IP 探测失败。

适用场景与注意

适合:本地开发或内网环境下,需要把手机现场照片、截图或短录像快速送入当前 DSH 对话,且希望先预览再发送、照片尽量保持原字节的场景。

注意:

  • 链路仅限局域网;README 明确不提供公网隧道,外网使用需自行评估风险(例如配合其他方案)。
  • 单张照片受 DSH 附件硬限制(默认校验 20 MiB);超大 ProRAW 等需先在相册导出或调整配置上限。
  • 社区插件目录与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库与目录页为准(目录线索中星标为 0)。

结尾

dsh-camera 把局域网手机浏览器变成 DSH Web 对话的采集端:扫码、拍选、手动确认,多图一条消息进会话,减少「先传到电脑再拖进输入框」的摩擦。进一步了解可阅读 GitHub README 与 SkillHub 目录页。

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

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

小夜