Install
openclaw skills install @lxx328/node-camera控制 Node 设备的 USB 摄像头,支持单帧截图、流式推送、停止推流和关闭摄像头。使用场景:(1) 需要快速获取 Node 设备的一帧图像时,(2) 需要远程监控 Node 设备周围环境时,(3) 需要进行视觉识别或拍照截图时。
openclaw skills install @lxx328/node-camera本 Skill 用于控制已配对 Android Node 设备的 USB 摄像头,支持高效单帧截图、流式推送 JPEG 帧到云端、停止推流和关闭摄像头。
camera.captureFrame)描述: 高效单帧截图。打开摄像头 → 获取第一帧 → 自动停止推流并关闭摄像头 → 返回图片 URL。适用于只需要一张图片的场景,无需手动管理摄像头生命周期。
参数:
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| width | number | 否 | 设备默认 | 分辨率宽度(像素) |
| height | number | 否 | 设备默认 | 分辨率高度(像素) |
返回:
{
"imageUrl": "http://<设备IP>:18790/images/capture_1234567890.jpg"
}
图片通过 Node 设备内嵌的 HTTP 服务器(端口 18790)提供访问,可直接通过 URL 下载 JPEG 文件。
错误码:
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| CAPTURE_FAILED | 截图失败 | 检查摄像头连接状态 |
| TIMEOUT | 调用超时 | 检查设备网络或重试 |
描述: 打开 USB 摄像头并开始流式推送帧数据到云端。命令立即返回成功状态,帧数据通过 camera.frame 事件异步推送。如果指定的分辨率不支持,会自动降级到最近可用分辨率。
参数:
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| width | number | 否 | 设备默认 | 分辨率宽度(像素) |
| height | number | 否 | 设备默认 | 分辨率高度(像素) |
返回: 命令立即返回:
{
"status": "streaming_started"
}
帧数据通过 camera.frame node event 异步推送,每帧格式为:
{
"imageUrl": "http://<设备IP>:18790/images/frame_1234567890_0.jpg"
}
错误码:
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| -1 | 摄像头已在运行中 | 先调用 camera.stopStreaming 或 camera.close |
| -1 | 摄像头未初始化 | 先在 Node 设备上打开相机主界面 |
| -1 | 摄像头错误 | 重新打开 Node 设备的相机应用 |
描述: 停止摄像头推流,但保持摄像头打开状态。如需完全关闭,请调用 camera.close。
参数: 无
返回:
{
"ok": true,
"message": "预览数据回调已停止"
}
描述: 关闭并释放 USB 摄像头资源。注意:实际摄像头硬件由 Node 主界面生命周期管理,此命令仅停止流式回调。
参数: 无
返回:
{
"ok": true,
"message": "已停止数据回调"
}
使用 OpenClaw gateway node invoke API:
{
"action": "invoke",
"invokeCommand": "camera.captureFrame",
"invokeParamsJson": {
"width": 1280,
"height": 720
}
}
{
"action": "invoke",
"invokeCommand": "camera.open",
"invokeParamsJson": {
"width": 1280,
"height": 720
}
}
{
"action": "invoke",
"invokeCommand": "camera.stopStreaming",
"invokeParamsJson": {}
}
{
"action": "invoke",
"invokeCommand": "camera.close",
"invokeParamsJson": {}
}
1. camera.captureFrame {"width": 1920, "height": 1080}
2. 从返回结果中获取 imageUrl,通过 HTTP GET 下载图片
使用
camera.captureFrame无需手动管理摄像头生命周期,一条命令完成截图。
1. camera.open {"width": 1280, "height": 720}
2. 监听 camera.frame 事件,实时接收并处理每一帧
3. camera.stopStreaming {} (暂停推流)
4. camera.close {} (结束监控,释放资源)
1. camera.captureFrame {"width": 640, "height": 480} (低分辨率提高性能)
2. 通过返回的 imageUrl 下载图片,送入视觉模型进行识别
3. 如需多帧,重复步骤 1
1. camera.open {"width": 640, "height": 480}
2. 监听 camera.frame 事件,将每帧送入视觉模型
3. camera.stopStreaming {} (识别完成后停止推流)
4. camera.close {} (释放资源)
如果收到错误 "摄像头已在运行中,请先调用 stopStreaming 或 closeCamera":
camera.stopStreaming 停止当前推流camera.close 完全关闭后重新打开如果收到错误 "摄像头未初始化,请先打开 AngleCamera 主界面":
如果收到错误 "摄像头错误: xxx,请重新打开 AngleCamera":
如果指定的分辨率不被支持:
此 Skill 需要 Android Node 设备具备以下条件:
camera.close 或 camera.stopStreaming 释放资源camera.captureFrame 比 open→stop→close 更高效稳定http://<设备IP>:18790/images/<filename>.jpgcamera.open 使用 node event 推送帧数据:
{"status":"streaming_started"}camera.frame 事件异步推送到云端{"imageUrl":"http://<设备IP>:18790/images/frame_xxx.jpg"}camera.stopStreaming 或 camera.close 结束推送摄像头内部状态:
Idle: 未初始化,主界面未运行Opening: 正在打开中Opened: 已打开,可预览FallingBack: 分辨率降级中Closed: 已关闭Error: 错误状态