普通摄像头也支持“AI视觉+人脸识别”,NAS打造本地AI监控中心
哈喽小伙伴们好,我是Stark-C~
应该有很多使用NAS的小伙伴都有监控的需求吧?就是将NAS当做摄像头的本地 NVR(网络录像机),借助NAS的大容量硬盘,来实时存储摄像头的录像文件。

🔺极空间NAS私有云在很早的时候就上架了针对用户这个需求的“监控中心”,只需要一个普通的支持ONVIF/RTSP协议摄像头,就能轻松接入进来,不仅可以将摄像头的录像文件实时保存到NAS本地,还可以实时查看和录像回放,这可比花钱买网络摄像头的云服务器要划算的多,并且还更安全
我目前也是一直在用,使用了一个200块钱左右的TP-LINK摄像头就可以了。不过有一说一,极空间目前的“监控中心”功能还很基础,虽说已经满足绝大多数用户,但是对于进阶用户的需求,比如说当前正火的AI和人脸识别它还是不支持的。
既然官方目前没给到,咱们折腾佬也不能干等着呀!所以今天我就来为大家分享一个方案,专门搞定这个事~
提前说明:
1,今天的这个方案同样需要我们的摄像头支持ONVIF/RTSP协议,据我所知绝大多数TP-LINK、海康摄像头都支持这个协议,且都不贵。
2,项目相对来说还是很吃资源的,建议入门级的NAS不要尝试~
关于项目

🔺使用的项目其实是一个老项目--Frigate。这是一个专门为本地部署而生的开源智能监控系统,我们可以简单的把它理解为一个“具备实时AI检测能力的本地 NVR”,它能实时检测人、车、宠物等目标,并与智能家居平台Home Assistant深度联动,实现很多智能场景。Frigate的功能也非常强大,支持 24 小时录像、按事件保存视频、RTSP 重流减少摄像头压力,并提供低延迟的 WebRTC/MSE 实时观看。
项目Github地址:https://github.com/blakeblackshear/frigate

🔺另外这次我们还需要用到另外一个老项目--Double‑Take。它是一个开源的面部识别系统,通过统一的界面和 API,整合了多种先进的人脸识别引擎,能够根据内置的识别模型( 比如说DeepStack、CompreFace、FaceNet 等),自动处理人脸裁剪、比对、匹配、标记等流程,将识别结果提供给下游系统(比如说Home Assistant使用)。
项目Github地址:https://github.com/skrashevich/double-take
项目部署
今天的这个方案会用到4个Docker容器:frigate、 double-take、deepstack、frigate-mqtt。它们的分工如下:
frigate:负责接入摄像头、检测人和物体、保存录像,是整个系统的核心。
double-take:负责所有人脸识别相关的工作。
deepstack:给double-take提供 AI 算力,负责人脸识别推理。
frigate-mqtt:负责消息通信,把检测到的事件实时推送出来。

🔺此次部署依然以极空间NAS为例,打开文件管理器,在Docker目录下新建一个“frigate”的文件夹。

🔺接着点击极空间NAS的“Docker”应用,点击【Compose】 > 【新增项目】。

🔺在“创建项目”页面自定义项目名称,“存储位置”需要手动选择我们前面新建的“bookorbit”文件夹,在方框中输入以下 Docker Compose 配置信息:
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "256mb"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
volumes:
- /etc/localtime:/etc/localtime:ro
- ./frigate/config:/config
- ./frigate/media:/media/frigate
ports:
- "8971:8971" # 冒号前面请勿冲突
- "5555:5000" # frigate打开端口,冒号前面请勿冲突
- "8454:8554" # 冒号前面请勿冲突
- "8555:8555/tcp" # 冒号前面请勿冲突
- "8555:8555/udp" # 冒号前面请勿冲突
networks:
- frigate_net
double-take:
image: skrashevich/double-take:latest
container_name: double-take
restart: unless-stopped
depends_on:
- frigate
- deepstack
ports:
- "3050:3000" # double-take打开端口,冒号前面请勿冲突
volumes:
- ./double-take/config:/.storage/config
environment:
TZ: Asia/Shanghai
MQTT_HOST: frigate-mqtt
MQTT_PORT: 1883 # frigate-mqtt的打开端口
FRIGATE_URL: http://192.168.31.122:5555 # frigate打开链接,别抄我的
DETECTOR: deepstack
DETECTOR_URL: http://192.168.31.122:5051 # deepstack打开链接,别抄我的
MATCH_THRESHOLD: 0.60
SAVE_UNKNOWN: "true"
networks:
- frigate_net
deepstack:
image: deepquestai/deepstack:latest
container_name: deepstack
restart: unless-stopped
ports:
- "5051:5000" # 冒号前面请勿冲突
volumes:
- ./deepstack:/datastore
environment:
VISION-FACE: "True"
TZ: Asia/Shanghai
networks:
- frigate_net
frigate-mqtt:
image: eclipse-mosquitto:2
container_name: frigate-mqtt
restart: unless-stopped
ports:
- "1883:1883" # 冒号前面请勿冲突
volumes:
- ./mqtt/config:/mosquitto/config
- ./mqtt/data:/mosquitto/data
- ./mqtt/log:/mosquitto/log
networks:
- frigate_net
networks:
frigate_net:
driver: bridge
以上代码需要修改的地方就看我给到的中文注释,其它的直接保持默认即可。镜像的拉取需要自行解决网络问题,粘贴到自己的NAS这边之前建议使用AI工具优化一下,以防止格式问题造成的部署失败。

🔺镜像有些大,部署的时候需要有些耐心,多等待一下。部署好之后可以看到frigate-mqtt一直显示重启中,这是正常情况。

🔺我们需要依次打开“frigate--mqtt--config”文件夹,在里面新建一个文本文件。

🔺在文本文件内输入:
listener 1883
allow_anonymous true
完成之后记得保存。

🔺接着将这个文本文件整个重命名为“mosquitto.conf”后“确定”。

🔺再回到Compose这边,可以看到所有的4个容器已经全部运行正常了。
项目体验
double-take设置:

🔺项目虽说都正常跑起来了,但还不能立即使用。我们先来设置double-take,直接通过极空间的远程访问打开它的后台Web页面(当然你也可以直接通过浏览器输入“IP:端口号”的方式)。

🔺然后点开“Config”配置页面,输入以下信息(不要直接抄我的,根据红字修改成你自己的配置):
detectors:
deepstack:
url: http://192.168.31.122:5051
frigate:
url: http://192.168.31.122:5555
mqtt:
host: frigate-mqtt
port: 1883
save:
unknown: true
完成之后记得保存。

🔺如果配置没有问题,可以看到页面显示项目用到的4个Docker容器的连通性都能通过。
frigate配置:
首先当然是打开frigate的Web页面,这里建议大家使用浏览器输入“IP:端口号”的方式,而不是极空间的远程访问。

🔺现在最新frigate的配置比之前可要友好太多了!首先它现在已经原生支持中文显示,另外现在添加摄像头不用再NAS端自己写配置,而是在页面直接根据向导图像化操作即可。

🔺摄像头的添加非常简单,只要是我们的摄像头支持ONVIF/RTSP协议,设置直接输入摄像头的IP地址、用户名和密码即可。

🔺然后frigate会自动连上摄像头。

🔺下一步根据自己的需求选择功能,我反正是全都要~

🔺最后看到摄像头显示没有问题,就直接“保存新摄像头”即可,是不是很简单。

🔺回到主页可以看到这里已经有一个摄像头显示了。

🔺点进去可以看到详情。这里不仅可以看到当前的实时画面,并且实测它的延迟也非常低,几乎是秒级响应。但是目前有两个问题:一个是它的录像功能还不能使用,另一个是double-take那边的人脸识别还没有连通。

🔺解决起来也很简单,我们需要打开“设置--配置编辑器”。

🔺然后复制自己当前的cameras配置,替换掉我给的代码中:
mqtt:
enabled: true
host: frigate-mqtt
port: 1883
record:
enabled: true
go2rtc:
streams:
cam_a71de0d8:
- ffmpeg:rtsp://admin:xxxxxxxxxxxx@192.168.31.184:554/stream1
cameras:
cam_a71de0d8:
enabled: true
friendly_name: 客厅
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/cam_a71de0d8
input_args: preset-rtsp-restream
roles:
- detect
- record
- audio
detect:
width: 1280
height: 720
semantic_search:
enabled: true
model_size: small
face_recognition:
enabled: true
model_size: small
lpr:
enabled: true
classification:
bird:
enabled: true
version: 0.17-0
完成之后记得保存。

🔺还有一个建议大家设置的地方,那就是打开设置中,摄像头设置的“增强功能”,将里面的所有功能全部打开,这里才是frigate的硬核功能。
体验方面:

🔺现在再回到摄像头的详情页面,可以看到它已经能正常录像了。

🔺如果说画面有变动,比如说人或者宠物进入,它画面的左上角还有一个移动监测的标识出现。

🔺我们还能打开“历史”查看监控画面回放。

🔺另外double-take这边也完美的保存了所有识别到的人脸数据,包括每一次出现的截图、匹配结果、识别置信度以及对应的事件记录。

🔺录像的所有文件都自动保存在“frigate/media/recordings”中。
最后
其实这套系统的能力远不止文中介绍的那些。Frigate还能与智能家居平台Home Assistant无缝集成,当检测到一些特定事件的时候,会自动触发各种自动化场景,实现真正意义上的“智能监控联动”。比如说当看到我们回家时会自动开灯,识别到我们的车牌会自动打开车库,或者检测到陌生人在门口会自动发出警报,并为我们推送通知到手机等等。
好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~
