首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >QClaw脑洞:到底谁在偷看我的电脑屏幕

QClaw脑洞:到底谁在偷看我的电脑屏幕

原创
作者头像
叫我阿柒啊
发布2026-04-22 17:11:12
发布2026-04-22 17:11:12
3691
举报

QClaw创意:让我看看谁在偷看我的屏幕

前言

以前在家出门的时候,经常走出一段路之后会产生一种错觉:刚刚出来锁门了吗?后来换了智能锁,通过手机APP监控门锁状态,解决了这种担忧。而现在,有时候离开工位的时候,总会有一种忘了锁屏,被人发现我在摸鱼的电脑界面。所以我就突发奇想:我能不能设计一个应用,能够发现是谁偷看了我的屏幕。

PC端人脸检测

微信查看监控图片

需求分析

我想要通过的MacBook摄像头,如果识别到人脸靠近屏幕,就会自动截图保存到本地然后发送给我。所以在整个应用的设计中需要实现以下5个功能:

  1. 实时检测:能持续检测是否有人脸靠近摄像头
  2. 距离判断:不只是检测人脸,还要判断"靠得近"
  3. 自动拍照:触发时自动捕获画面作为证据
  4. 后台运行:不影响正常工作,静默运行
  5. 即时通知:通过某种方式通知我

对于前四个还是挺好实现的,使用OpenCV就可以实现,成熟的人脸检测方案,Haar Cascades 分类器开箱即用,然后使用macOS 原生的摄像头访问框架:AVFoundation就可以实现,然后将识别到的人脸图片保存到本地。但是如何做到即时通知呢?

这要是放在以前确实很复杂,但是如今拥有openclaw的AI时代,显得尤为简单。尤其是支持微信和PC端互联的QClaw,让这个功能的实现看起来更为简单。

QClaw

QClaw 是腾讯电脑管家基于 OpenClaw 开源生态打造的本地化 AI Agent 助手,无需复杂的配置可以直接一键安装。通过微信发送指令,就能让电脑自动完成报表处理、文件传输、文档编辑等工作。产品内置多款优质国产大模型,拥有丰富技能生态与超强上下文记忆能力。

进入QClaw官网下载相应系统版本的安装包,安装即可使用。

安装成功之后打开 QClaw。

在QClaw的首页,我们通过微信扫码登录即可。

点击左下方登录,用微信扫码登录之后,点击弹出框关联微信,这样手机微信就可以操控电脑上的龙虾了。

扫码关联之后,在微信的客服消息中就可以收到 QClaw客服 的消息。

你可以通过对话的形式给QClaw发送指令:

所以说,我的目标是:通过微信给QClaw发送启动监控程序的指令,并可以将识别到的人脸截图,通过QClaw发送到微信上。 我的思路是基于 Python 开发一个人脸识别的程序,然后开发一个 skills 将人脸识别的能力嵌入到 Qclaw 中,这样就可以通过微信调用。

图片发送到微信

在有了上面的整体思路之后,如何将图片发送到手机上,这一块还是让我思考了许久。刚开始我想着QClaw是否可以直接将图片发送到我的微信上,但是效果不太理想。后来我发现,QClaw有免费的云端存储。

于是我思路一转,可以直接让QClaw直接将最新的监控照片发送到云端,然后直接将照片链接发送给我。

应用实现

这里先开发一个人脸识别的程序。在技术选型阶段,我对比了几种方案。其中深度学习模型(MTCNN、RetinaFace)精度高但依赖重;云服务 API(AWS Rekognition、Azure Face)方便但要有网还得花钱。最后选了 OpenCV 自带的 Haar Cascades,通过 pip install opencv-python 安装即可。

1. 人脸检测

核心检测逻辑并不复杂,代码如下:

代码语言:python
复制
class FaceDetector:
    def __init__(self):
        cascade_path = cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
        self.face_cascade = cv2.CascadeClassifier(cascade_path)
        self.cap = None
    
    def start(self):
        self.cap = cv2.VideoCapture(0)
        self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
        return self.cap.isOpened()
    
    def detect_faces(self):
        ret, frame = self.cap.read()
        if not ret:
            return [], None
        
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = self.face_cascade.detectMultiScale(
            gray,
            scaleFactor=1.1,
            minNeighbors=5,
            minSize=(30, 30)
        )
        return faces, frame

这段代码的原理是:把彩色画面转成灰度图,然后用预训练的级联分类器扫描,返回所有人脸的位置和大小。scaleFactorminNeighbors 是两个关键参数,控制检测的灵敏度和误报率,需要针对实际场景微调。

2. 距离估算

检测到人脸只是第一步,更重要的是判断"靠得有多近"。我用了个取巧的办法:看人脸在画面里占多大面积。这个思路基于简单的几何关系:当人脸离摄像头越近,在成像平面上的投影就越大。通过实测,我总结了几个距离值:

  • 正常办公距离(50-60cm):人脸占 8000-12000 像素
  • 有点靠近(30-40cm):人脸占 15000-25000 像素
  • 几乎贴脸(<30cm):人脸占 30000 像素以上

于是设定阈值 15000,超过就触发警报:

代码语言:python
复制
def should_alert(self, faces):
    if not faces:
        return False
    
    max_area = max(w * h for (x, y, w, h) in faces)
    return max_area > self.config["min_face_area"]

3. 人脸标注

触发警报时,系统会自动保存一张照片。但 raw 图没什么说服力,我加了两个增强:

  1. 人脸标注:用绿色方框框出检测到的人脸
代码语言:python
复制
for (x, y, w, h) in faces:
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
  1. 时间戳:在图片角落标注触发时间
代码语言:python
复制
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cv2.putText(frame, timestamp, (10, 30), 
            cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

这样得到一张具有标注和核时间戳的人脸图片了。

4. 守护进程

daemon.py:守护进程,解决后台运行和摄像头权限问题

代码语言:python
复制
def main():
    # 写入 PID 文件,方便外部管理和查重
    with open(".face-alert.pid", "w") as f:
        f.write(str(os.getpid()))
    
    # 注册信号处理,支持优雅退出
    signal.signal(signal.SIGTERM, signal_handler)
    signal.signal(signal.SIGINT, signal_handler)
    
    # 初始化(在主线程中,满足 macOS 要求)
    skill = FaceAlertSkill()
    if not skill.detector.start():
        sys.exit(1)
    
    # 监控主循环
    skill.is_monitoring = True
    while skill.is_monitoring:
        faces, frame = skill.detector.detect_faces()
        if skill.should_alert(faces) and frame is not None:
            skill.trigger_alert(faces, frame)
        time.sleep(0.5)

然后启动程序,进行人脸识别的测试。

可以对人脸进行实时检测:

然后对识别到的人脸图片保存到 screenshots 目录。

封装Skill

完成核心代码开发之后,就要将这个人脸检测代码封装成skills,这里我走了一个捷径,直接使用codebuddy帮我生成。在skill的生成提示词中,我们要做以下限定:

  1. MacBook中的Terminal已经授予摄像头权限
  1. 监控图片要上传到云端

生成skill

SKILL.md 文件定义了触发条件和行为逻辑,所以我们让CodeBuddy读取项目,然后在根目录下生成 SKILL.md。

文件内容如下:

代码语言:bash
复制
name: face-alert
description: "人脸监控警报系统 - 实时检测人脸,自动捕获照片并上传云端,支持启动、停止、状态查询和警报检查。"
version: "1.0.0"
user-invocable: true

# Face Alert Skill

> 实时监控人脸,自动捕获并上传照片

## ⚠️ 注意事项

- **摄像头权限**:首次使用需在 Terminal 授权,后续可直接语音控制
- **图片上传**:检测到人脸后返回本地路径,QClaw 自动上传云端

## 📋 快速使用

### 首次授权

`cd ~/.qclaw/skills/FishGuard && python3 main.py --action start --daemon`

- macOS 弹窗允许 Terminal 访问摄像头
- 启动成功后,后台运行中,后续直接语音控制即可

### 已授权用户

直接对 QClaw 说:

- `"启动人脸监控"` - 启动监控  
- `"有没有检测到人脸?"` - 获取最新照片  
- `"查看监控状态"` - 查看状态  
- `"停止人脸监控"` - 停止监控

## 命令行操作

# 启动监控(后台)
python3 main.py --action start --daemon [--threshold 15000]

# 停止监控
python3 main.py --action stop

# 查看状态
python3 main.py --action status

# 获取最新照片
python3 main.py --action get_latest_photo

- 返回 JSON,QClaw 自动上传云端

## 📂 安装依赖

cd ~/.qclaw/skills/FishGuard
pip3 install -r requirements.txt

## 🎯 触发命令

用户可用以下方式触发技能:

- `/face-alert`  
- `"启动人脸监控"` / `"人脸监控"` / `"启动监控"`  
- `"停止人脸监控"` / `"查看监控状态"` / `"有没有检测到人脸"`

添加skill

将整个项目(包括代码和SKILL.md)上传到github。

在 QClaw 的设置中,找到技能管理,通过 github导入 的方式写入添加人脸监控这个skill。github地址(https://github.com/guanshilong/FishGuard

)

QClaw会自动拉去github的分支,导入之后再技能管理列表就可以看到 face-alert 这个skill。

这样,我们就可以通过QClaw来调用skill实现监控。

微信指令与skill调用

1. 启动人脸监控

在微信中,找到Qclaw管家,发送启动人脸监控的指令。

QClaw在接收到指令之后,就会调用我们的face alert的skill。

并自动在Terminal中启动进程。

监控图片发送

我们进入保存人脸截图的目录,可以看到已经监控到了我的很多人脸图片。

我们给QClaw发送获取监控照片的指令:

QClaw就会根据SKILL.md中指定的目录,获取最新的照片,然后自动上传到QClaw云端文件中,并通过微信返回文件的url。

在微信中,通过点击url,可以直接跳转到QClaw管家小程序中,直接查看照片。

关闭监控

我们可以通过发送关闭人脸监控

QClaw就会kill掉监控进程。

这样通过QClaw完成了人脸监控程序,从手机微信到电脑的互通闭环。

结语

这个源于日常突发的小创意,终于形成了完整的闭环。在QClaw出现之前,要想实现微信和PC端互通,还是挺困难的。而现在,我可以自己开发代码,然后封装成skill,就能被QClaw完美识别调用。而且还可以通过微信发送指令,解决了交互难题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • QClaw创意:让我看看谁在偷看我的屏幕
    • 前言
    • 需求分析
    • QClaw
      • 图片发送到微信
    • 应用实现
      • 1. 人脸检测
      • 2. 距离估算
      • 3. 人脸标注
      • 4. 守护进程
    • 封装Skill
      • 生成skill
      • 添加skill
    • 微信指令与skill调用
      • 1. 启动人脸监控
      • 监控图片发送
      • 关闭监控
    • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档