OpenClaw 实战:让 AI 拥有'眼睛'——摄像头访问完全指南
本文介绍如何在 WSL2 环境下让 OpenClaw AI 助手访问摄像头画面。
探索过程
第一阶段:OpenClaw Node 配对(失败)
在 WSL2 中安装 OpenClaw,尝试控制摄像头。需要在 Windows 上安装 Node.js 和 npm,但遇到网络隔离问题,最终放弃。
1.1 安装 Node.js
下载绿色版 Node.js (v24.14.0),配置环境变量:
$nodePath = "D:\WSL\node-v24.14.0-win-x64"
$env:Path += ";$nodePath"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$nodePath", "User")
问题 1:PowerShell 执行策略限制
错误信息:npm : File ... cannot be loaded because running scripts is disabled on this system.
解决:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
问题 2:npm 需要 Git
错误信息:npm error code ENOENT ... spawn git
解决:手动下载并安装 Git for Windows (v2.47.1)。
问题 3:npm 配置错误
之前尝试配置 npm config set git false 导致后续安装失败。
解决:
npm config delete git
1.2 安装 OpenClaw Node
# 安装 openclaw
npm install -g openclaw
# 安装 node 服务
openclaw node install
# 启动 node
openclaw node restart
# 查看状态
openclaw node status
1.3 配对失败原因分析
问题 1:端口占用 WSL Gateway 已占用 18789 端口,Windows Node 无法绑定。
问题 2:网络隔离 WSL2 运行在 Hyper-V 虚拟机中,与 Windows 主机网络隔离。WSL 的 localhost (127.0.0.1) Windows 访问不到。
错误日志:gateway connect failed: Error: device signature invalid
问题 3:配置验证失败
错误日志:Invalid config at /home/kim/.openclaw/openclaw.json: - plugins.slots.memory: plugin not found: memory-core
尝试修复配置:
openclaw config.set agents.defaults.memorySearch.enabled false
openclaw doctor --fix
最终放弃原因: WSL2 架构限制导致 Windows Node 无法与 WSL Gateway 建立稳定连接。即使通过端口转发能连通,device signature 验证也过不去。
折腾 3 小时以上,决定换方案。
第二阶段:浏览器方案(临时可用)
使用浏览器网站直接调用设备摄像头,通过 OpenClaw Browser Relay 插件实现,但操作繁琐且无法自动化。
功能:
- 实时摄像头预览
- 拍照、录像
- 摄像头参数检测(分辨率、FPS、亮度等)
摄像头信息示例:
- Webcam Name: Integrated Camera
- Resolution: 1280×720
- Frame rate: 15 FPS
优点:
- 无需安装,打开即用
- 支持拍照、录像、实时预览
缺点:
- 需要手动操作浏览器
- 依赖 Chrome 扩展连接
- 无法自动化控制
- 网络依赖
实际测试: 成功拍到摄像头画面,确认摄像头硬件正常,能拍到清晰画面。但浏览器方案无法满足自动化需求。
第三阶段:Python + OpenCV 本地程序(成功)
这是最满意的方案。只要告诉 AI:'看看这是啥',它就能调用摄像头看,然后回答能看到什么。
3.1 安装依赖
pip install opencv-python
OpenCV 是成熟的计算机视觉库,支持摄像头访问、图像处理、目标检测等功能。
3.2 创建摄像头脚本
编写了两个版本的脚本:
版本 1:实时预览版 (webcam.py)
#!/usr/bin/env python3
""" 本地摄像头测试工具 - 复刻 webcamtests.com 核心功能
功能:实时预览、拍照、录像、摄像头信息
"""
import cv2
import os
from datetime import datetime
class WebcamTest:
def __init__(self, camera_id=0):
self.camera_id = camera_id
self.cap = None
self.save_dir = os.path.expanduser("~/Pictures/WebcamTest")
os.makedirs(self.save_dir, exist_ok=True)
def open_camera(self):
"""打开摄像头"""
self.cap = cv2.VideoCapture(self.camera_id)
if not self.cap.isOpened():
print(f"无法打开摄像头 (ID: {self.camera_id})")
return False
width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(self.cap.get(cv2.CAP_PROP_FPS))
print(f"摄像头已打开")
print(f" 分辨率:{width}x{height}")
print(f" FPS: {fps}")
return True
def show_preview(self):
"""实时预览"""
print("实时预览中...")
print(" 按 'q' 退出预览")
print(" 按 'p' 拍照")
print(" 按 'r' 开始/停止录像")
while True:
ret, frame = self.cap.read()
cv2.imshow('Webcam Test', frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('p'):
self.take_photo(frame)
cv2.destroyAllWindows()
版本 2:自动拍照版 (webcam-snap.py)
#!/usr/bin/env python3
""" 本地摄像头测试工具 - 自动拍照版本 """
import cv2
import os
from datetime import datetime
def main():
save_dir = os.path.expanduser("~/Pictures/WebcamTest")
os.makedirs(save_dir, exist_ok=True)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
return
print("摄像头已打开")
print(f" 分辨率:{int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))}x{int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))}")
# 预热摄像头
for i in range(30):
cap.read()
# 拍照
ret, frame = cap.read()
if ret:
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = os.path.join(save_dir, f"photo_{timestamp}.jpg")
cv2.imwrite(filename, frame)
print(f"照片已保存:{filename}")
cap.release()
if __name__ == "__main__":
main()
3.3 运行并拍照
python D:\openclaw-scripts\webcam-snap.py
成功输出:
[图片:摄像头预览效果]
[图片:房间画面]
[图片:拍摄的照片]
技术总结
WSL2 无法直接访问摄像头硬件,需要 Windows 原生程序。
经验教训
- 不要硬磕架构限制
- 利用现有工具
- 理解环境差异
- 自动化优先


