将 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,把家庭成员的清晰照片(最好多角度、无遮挡)传上去,并在照片下方命名(例如Jack、Wife等),作为人脸数据库。
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
💡 落地排坑小贴士
光线补强(夜间场景):由于门外夜晚光线较暗,人脸识别率会大打折扣。可以联动自动化:当 Frigate 在夜间检测到
Motion或Person时,先一秒钟秒开门口走廊的白炽灯/补光灯,然后再由 Double Take 抓拍高亮、清晰的面孔给 CompreFace 识别。Double Take 缓存清理:Double Take 的最新抓拍照片可以通过固定接口
http://<Double-Take-IP>:1111/api/storage/matches/latest.jpg实时获取,你可以把这个 URL 封装成 HA 的 Generic Camera 实体,或者直接像上面一样塞入手机通知里,随时随地在通知栏一眼看清门外是谁。
评论区