docker 部署 frigate 组建本地监控系统

发布于 2024-05-04  338 次阅读


前言

部署这个最主要的动力是想装监控,但又不想让数据上云。毕竟隐私还是掌握在自己手里比较好一点!

如果你也是比较在意隐私安全的,部署前先考虑下面几点:

  • 不使用摄像头自带的 APP 意味着部分功能损失,比如双向语音、摄像头云台、消息通知等
  • 建议选择使用 POE 供电的摄像头(只需要一根网线就行,方便布线)
    • 需要 POE 网线
    • 需要 POE 交换机或录像机
  • 强烈建议有一块 TPU,比如 Google Coral Accelerator

可能错误的建议:如果不想损失 APP 的功能,可以只用 APP 监看,用 frigate 录像。但是经过 APP 是否会上云就不得而知了,尤其是那些需要登录才能使用的~

温馨提醒:强烈建议配备一块 Google Coral Accelerator 或者有一块显卡,否则 CPU 使用率会爆升(J4125 能从 30% 占到 90% 多几乎满了)!这也是官方所建议的!

选监控摄像头

摄像头最好隔离网络,即只能本地访问!

一般只要支持 onvif 协议就行!在这里对几个买过的品牌做下分析(均为主观意见):

萤石:不推荐。

不支持 onvif 协议,且传输都用自有协议加密(为了推广萤石云嘛)~只能用摄像头,是真正意义上的摄像头!!!没有云台,没有语音。。。也就是只能固定一个视角,并且还要是初始化之后的视角,否则摄像头一重启,视角就变了,没有任何地方可以拉回来。。。而且不稳定,一天至少会自己断掉重启一次,导致 frigate 有近 20 分钟录像录不上,当然,这可能是个例!

TP-LINK:可以。

支持 onvif 协议,至少云台有保证了!不过我买的这个缩放似乎用了 2 个摄像头组成的取巧办法,应该是通过软件调节的,在 frigate 中不支持!稳定性可以,在 frigate 日志中重来没出现过这个摄像头的错误!

大华:没用过但我对它最为期待。

frigate 也推荐的摄像头(当然 TP-LINK 也在列,国外好像叫 Tapo),好像支持云台,缩放(有功能的话),没用过就不评价了!

海康威视:没用过但我应该不会买。

原因无他,因为萤石是我买的第一个摄像头。。。

docker compose 部署

可以参考官方文档来部署,或者以下是我威联通 NAS 上的配置,供参考:

version: '3'

services:
  frigate:
    restart: unless-stopped
    container_name: frigate
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: 256m # 给 256M 共享内存
    volumes:
      - /share/Container/dockerdata/frigate/config:/config:rw # 配置文件
      - /share/MEDIA2/frigate_storage:/media/frigate:rw # 录像数据存储
      - type: tmpfs # 添加 1G 内存用做数据缓冲
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5500:5000"
#      - "8554:8554" # RTSP feeds
#      - "8555:8555/tcp" # WebRTC over tcp
#      - "8555:8555/udp" # WebRTC over udp
    environment:
      - TZ=Asia/Shanghai
      - FRIGATE_RTSP_PASSWORD=pwd123 # 可接 HA 等使用
      - LIBVA_DRIVER_NAME=i965 # Intel 系列 CPU 使用
    privileged: true
    devices:
      - /dev/bus/usb:/dev/bus/usb # 由于我有 TPU 且是 USB 口的,这里接入 USB 设备
      - /dev/dri/renderD128:/dev/dri/renderD128 # 录制视频时使用硬解,节省 CPU 占用
    networks:
      - mynet

networks:
  mynet:
    external: true

frigate 配置添加(初次)

到此,先别急着启动起来,在上面 /share/Container/dockerdata/frigate/config 配置文件目录下新建 config.yml 文件,添加一下摄像头配置:

mqtt:
  enabled: false

cameras:
  your_camera:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:554/rtsp # 摄像头的 rtsp 流
          roles:
            - detect
后面可以直接在 web 界面中的 config 里修改配置!当然,如果改坏了导致容器启动不起来,还得去目录下“重置”下配置!

RTSP 流格式

以下为一些摄像头的 RTSP 流,供参考:

萤石:

// 例如: rtsp://admin:LAUWEN@192.168.31.108:554/h264/ch1/main/av_stream
rtsp://admin:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

参数说明:

  • username: 用户名,默认为:admin。
  • password: 密码,默认为摄像头底座贴纸上的验证码。
  • ip: 为设备IP,例如:192.168.31.108。
  • port: 端口号,默认:554,若为默认可不填写。
  • codec:有h264、MPEG-4、mpeg4这几种。
  • channel: 通道号,起始为1。例如通道1,则为ch1。
  • subtype: 码流类型,主码流为main,辅码流为sub。

TP-LINK:

主码流为:rtsp://username:password@ip:port/stream1

子码流为:rtsp://username:password@ip:port/stream2

其中:

(1) username:用户名,如admin;

(2) password:密码,如123456;

(3) ip:设备IP,如192.168.1.60;

(4) port:RTSP端口,默认为554,若为默认可不填;

(5) stream:码流类型,主码流为stream1,子码流为stream2。

举例说明:

摄像机的IP地址为192.168.1.60,用户名是admin,密码是123456,摄像机的RTSP端口为554。那么该摄像机

主码流的RTSP取流地址为:rtsp://admin:123456@192.168.1.60:554/stream1

子码流的RTSP取流地址为:rtsp://admin:123456@192.168.1.60:554/stream2

运行

Container Station 中的应用程序直接创建就可以了,不出意外的话,通过 5500 端口,就能看到 frigate 的 web 界面啦~

配置都是在 config 菜单中通过 json 格式来进行配置的,可以参考官方文档来进行,这里也给出一下我 NAS 上的配置,供参考:

mqtt:
  enabled: false

ffmpeg:
  hwaccel_args: preset-vaapi

# 有 coral 的开启,否则删除下面的 detectors(默认通过 CPU 识别)
detectors:
  coral:
    type: edgetpu
    device: usb

# 录制配置
record:
  enabled: true
  retain: # 全部录像保留3天
    days: 3
    mode: all
  events:
    pre_capture: 1 # 检测录像前提前 1 秒
    post_capture: 3 # 检测录像后延后 3 秒
    retain: # 检测录像保留 10 天
      default: 10

# 检测快照保留 30 天
snapshots:
  enabled: true
  retain:
    default: 30

# 默认检测物体:人
objects:
  track:
  - person
#  - car

# 摄像头配置
cameras:
  tp-link_camera:
    onvif:
      host: 192.168.12.232
      port: 2020
      user: admin
      password: 123456
        
    ffmpeg:
      inputs:
      - path: rtsp://admin:123456@192.168.12.232:554/stream1
        roles:
        - detect
        - record
    detect:
      width: 1280
      height: 720
      fps: 5

  ezviz_camera:
    ffmpeg:
      inputs:
      - path: rtsp://admin:OCIKEA@192.168.12.231:554/h265/ch1/main/av_stream
        roles:
        - detect
        - record
    detect:
      width: 1280
      height: 720
      fps: 5

感谢

官方文档里面的配置已经很详细了,直接参考官方的即可:

https://docs.frigate.video