侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 136 篇文章
  • 累计创建 31 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

在Ubuntu上安装frigate 6 人脸识别(未测试)

管理员
2026-05-24 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

将 Frigate 升级为带有人脸识别(VIP 门禁/陌生人警报)的顶级安防系统,可以说是开源智能家居的“天花板”玩法。

由于 Frigate 本身只负责“检测到人(Person)”并裁剪出人脸区域,我们需要引入 CompreFace(负责AI人脸比对)和 Double Take(负责在 Frigate 和 CompreFace 之间穿针引线,并把结果推给 HA)来实现这个闭环。

以下是完整的架构实现和保姆级落地指南:

🧱 第一阶段:底层大兵组装(Docker 容器端部署)

既然你已经独立运行了 Frigate 容器,我们只需要在你的 Ubuntu 虚拟机上,把 CompreFace 和 Double Take 的容器服务一并跑起来。

1. 部署 CompreFace (人脸识别 AI 核心引擎)

CompreFace 是目前本地化开源人脸识别中准确率最高、自带 Web 界面的工具。

  • 可以参考官方推荐,直接用它的 docker-compose.yml 整体启动。

  • 启动后,在浏览器访问 http://<Ubuntu_IP>:8000,注册账号并创建一个 Recognition Service(识别服务),你会获得一条关键的 API Key

  • 在界面里点击 Upload,把家庭成员的清晰照片(最好多角度、无遮挡)传上去,并在照片下方命名(例如 JackWife 等),作为人脸数据库。

2. 部署 Double Take (统筹大管家)

Double Take 的作用是盯紧 Frigate。一旦 Frigate 抓拍到人,Double Take 立刻把图片切下来送给 CompreFace 去识别,识别完再把人名(或者 unknown 陌生人)以 MQTT 消息发给 HA。

在你的 Docker Compose 里添加 Double Take 容器:

YAML

services:
  double-take:
    container_name: double-take
    image: jakowenko/double-take:latest
    restart: unless-stopped
    ports:
      - 1111:1111
    volumes:
      - /path/to/double-take/config://.storage/app

启动后,修改 Double Take 的配置文件 config.yml(把 Frigate、MQTT 和 CompreFace 串联起来):

YAML

mqtt:
  host: 192.168.0.9      # 💥 填入你的 HA (Mosquitto) IP
  user: mqtt
  password: mqtt

frigate:
  url: http://192.168.0.x:5000 # 💥 你的 Frigate 容器地址
  cameras:
    - scam_front         # 💥 要开启人脸识别的摄像头名字

detectors:
  compreface:
    url: http://127.0.0.1:8000 # 💥 你的 CompreFace 地址
    key: xxxxxx-xxxx-xxxx-xxxx # 💥 刚刚获取的 API Key

重启 Double Take:docker compose restart double-take

🔌 第二阶段:Home Assistant 端 —— 接收数据桥梁

Double Take 会自动通过 MQTT 在 HA 中生成传感器实体。

去 HA 的 开发者工具 ➔ 状态 里,搜索 double_take,你会找到一个类似这样的核心实体:

  • sensor.double_take_scam_front:它的状态(State)会实时变成识别到的人名(如 Jack),如果是不认识的面孔,它的状态会变成 unknown(陌生人)。

🚀 第三阶段:智能自动化配置(核心业务逻辑)

现在数据全通了,我们在 HA 里写两条井然有序的自动化:一条负责“全家欢迎”,一条负责“陌生人御敌”。

场景 1:家庭成员(VIP)刷脸回家

点击自动化页面右上角 ➔ 选择 以 YAML 格式编辑,直接粘贴以下代码:

YAML

alias: "安防进化:家庭成员刷脸欢迎回家"
description: "检测到特定人脸时解防并语音播报"
trigger:
  - platform: state
    entity_id: sensor.double_take_scam_front
    # 💥 触发条件:状态变成了你录入的家庭成员名字
    to: "Jack" 
condition:
  - condition: state
    entity_id: alarm_control_panel.home_alarm # 💥 门禁/安防当前处于布防状态
    state: "armed_away"
action:
  # 1. 自动解除安防布防
  - service: alarm_control_panel.alarm_disarm
    target:
      entity_id: alarm_control_panel.home_alarm
    data:
      code: "1234" # 你的解防密码
  # 2. 个性化语音播报(以智能音箱播放 TTS 为例)
  - service: tts.google_translate_say
    target:
      entity_id: media_player.living_room_speaker
    data:
      message: "欢迎回家,主人!安防已解除。"
mode: single

场景 2:检测到“陌生人脸”强力御敌

如果门外站着的是陌生人(unknown),且家里此时处于布防(没人在家)或者深夜状态,立刻拉响全屋警报,并把实时画面推送到屏幕上。

YAML

alias: "安防进化:发现陌生人脸极速御敌"
description: "检测到陌生人时拉响警报并推送画面"
trigger:
  - platform: state
    entity_id: sensor.double_take_scam_front
    to: "unknown" # 💥 触发条件:Double Take 返回未知面孔
condition:
  # 门外有人停留,且当前处于警戒布防状态
  - condition: state
    entity_id: alarm_control_panel.home_alarm
    state: "armed_away"
action:
  # 1. 触发全屋警报实体(可联动声光警报器)
  - service: alarm_control_panel.alarm_trigger
    target:
      entity_id: alarm_control_panel.home_alarm
  # 2. 手机端/微信端推送带抓拍图片的通知
  - service: notify.notify
    data:
      title: "🚨 突发安防警告:发现陌生人脸"
      message: "门口摄像头抓拍到未经授权的陌生面孔,已触发全屋警戒!"
      data:
        # 直接调用 Double Take 刚刚生成的陌生人脸裁剪切片作为通知配图
        image: "http://192.168.0.9:1111/api/storage/matches/latest.jpg"
  # 3. 将门口 Frigate 实时监控画面强行投切到电视或带屏智能音箱上
  - service: camera.play_stream
    target:
      entity_id: camera.scam_front
    data:
      media_player: media_player.living_room_tv # 💥 你的客厅电视/小度/触屏音箱实体
mode: single

💡 落地排坑小贴士

  1. 光线补强(夜间场景):由于门外夜晚光线较暗,人脸识别率会大打折扣。可以联动自动化:当 Frigate 在夜间检测到 MotionPerson 时,先一秒钟秒开门口走廊的白炽灯/补光灯,然后再由 Double Take 抓拍高亮、清晰的面孔给 CompreFace 识别。

  2. Double Take 缓存清理:Double Take 的最新抓拍照片可以通过固定接口 http://<Double-Take-IP>:1111/api/storage/matches/latest.jpg 实时获取,你可以把这个 URL 封装成 HA 的 Generic Camera 实体,或者直接像上面一样塞入手机通知里,随时随地在通知栏一眼看清门外是谁。

0

评论区