安装
Frigate 是一个 Docker 容器,可以在任何 Docker 主机上运行,包括作为 HassOS Addon 插件运行。请注意,Home Assistant 插件与集成不同,要将 Frigate 集成到 Home Assistant 中,需要进行集成。
依赖关系
MQTT 代理(可选) - MQTT 代理对于 Frigate 来说是可选的,但对于 Home Assistant 集成是必需的。如果使用 Home Assistant,Frigate 和 Home Assistant 必须连接到同一个 MQTT 代理。
硬件准备
操作系统
在基于 debian 的裸机发行版上安装 docker 时,Frigate 运行效果最佳。为了获得理想的性能,Frigate 需要访问 Coral 和 GPU 设备的底层硬件。不建议在 Proxmox、ESXi、Virtualbox 等之上的虚拟机中运行 Frigate。虚拟化层通常会为与 Coral 设备的通信引入大量开销,但并非在所有情况下都是如此。
Windows 并未得到正式支持,但一些用户已成功使其在 WSL 或 Virtualbox 下运行。将 GPU/Coral 设备正确传递到 Frigate 可能很困难或不可能。
存储
Frigate 使用以下位置在容器中进行读/写操作。 Docker 卷映射可用于将它们映射到主机上的任何位置。
/config
: 用于存储 Frigate 配置文件和 sqlite 数据库。Frigate 运行时,您还会在数据库文件旁边看到一些文件。/media/frigate/clips
: 用于抓拍存储。将来,它可能会从clips
重命名为snapshots
。此处的文件结构无法修改,也不适合手动浏览或管理。/media/frigate/recordings
: 用于录像片段的内部系统存储。此处的文件结构无法修改,也不适合手动浏览或管理。/media/frigate/exports
: 存储已通过 WebUI 或 API 导出的录像。/tmp/cache
: 录像片段的缓存位置。初始录像先写入此处,然后进行检查并转换为 mp4 并移至 recordings 文件夹。通过clip.mp4
端点生成的片段也在这里连接和处理。为此,建议使用tmpfs
挂载。/dev/shm
: 共享内存中原始解码帧的内部缓存。不建议修改该目录或使用 docker 进行映射。最小大小受下面的shm-size
计算的影响。
常见的 docker compose 存储配置
写入本地磁盘或外部 USB 驱动器:
version: "3.9"
services:
frigate:
...
volumes:
- /path/to/your/config:/config
- /path/to/your/storage:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
...
使用 Snapcraft 版本的 Docker 用户不能使用 $HOME 文件夹之外的存储位置。
计算所需的 shm-size
Frigate 在运行过程中利用共享内存来存储帧。Docker 提供的默认 shm-size
是 64MB。
默认 shm 大小 64MB 对于2个摄像机以 720p 进行检测的设置来说是合适的。如果 Frigate 退出并显示“Bus error”消息,则可能是因为您有太多高分辨率摄像机,并且需要使用 --shm-size
(或 docker-compose中的service.shm_size
)指定更大的 shm-size。
容器还将日志存储在 shm 中,最多可能需要30MB,因此请务必在数学计算中考虑到这一点。
您可以使用指定的分辨率,通过以下公式计算每个摄像机所需的shm-size:
# 替换 <width> and <height>
$ python -c 'print("{:.2f}MB".format((<width> * <height> * 1.5 * 9 + 270480) / 1048576))'
# 1280x720 示例
$ python -c 'print("{:.2f}MB".format((1280 * 720 * 1.5 * 9 + 270480) / 1048576))'
12.12MB
# 8路 1280x720 摄像机检测, 含日志
$ python -c 'print("{:.2f}MB".format(((1280 * 720 * 1.5 * 9 + 270480) / 1048576) * 8 + 30))'
126.99MB
无法为 Home Assistant 插件的每个容器设置 shm-size。然而,这可能不是必需的,因为默认情况下 Home Assistant Supervisor 分配 /dev/shm
的大小是总内存的一半。如果您的机器有 8GB 内存,Frigate 很可能无需任何额外配置即可访问高达 4GB 的内存。
Raspberry Pi 3/4
默认情况下 Raspberry Pi 会限制 GPU 的可用内存量。为了使用 ffmpeg 硬件加速,您必须按照官方文档中的描述,通过将 gpu_mem
设置为 config.txt
中的最大推荐值来增加可用内存。
此外,USB Coral 会消耗大量电量。如果使用任何其他 USB 设备(例如 SSD),您将遇到不稳定的情况,因为 Pi 无法为 USB 设备提供足够的电力。您需要购买一个自带电源的外部 USB 集线器。
Docker
推荐的安装方法是使用 compose 在 Docker 中运行:
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # this may not be necessary for all setups
restart: unless-stopped
image: frigate:latest
shm_size: "64mb" # update for your cameras based on calculation above
devices:
- /dev/bus/usb:/dev/bus/usb # Passes the USB Coral, needs to be modified for other versions
- /dev/apex_0:/dev/apex_0 # Passes a PCIe Coral, follow driver instructions here https://coral.ai/docs/m2/get-started/#2a-on-linux
- /dev/video11:/dev/video11 # For Raspberry Pi 4B
- /dev/dri/renderD128:/dev/dri/renderD128 # For intel hwaccel, needs to be updated for your hardware
volumes:
- /etc/localtime:/etc/localtime:ro
- /path/to/your/config:/config
- /path/to/your/storage:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "8554:8554" # RTSP feeds
- "8555:8555/tcp" # WebRTC over tcp
- "8555:8555/udp" # WebRTC over udp
environment:
FRIGATE_RTSP_PASSWORD: "password"
如果您无法使用 docker compose,您可以使用类似以下内容来运行容器:
docker run -d \
--name frigate \
--restart=unless-stopped \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--device /dev/bus/usb:/dev/bus/usb \
--device /dev/dri/renderD128 \
--shm-size=64m \
-v /path/to/your/storage:/media/frigate \
-v /path/to/your/config:/config \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='password' \
-p 5000:5000 \
-p 8554:8554 \
-p 8555:8555/tcp \
-p 8555:8555/udp \
frigate:latest
当前稳定版的 docker 镜像标签是:
latest
- 为 amd64 构建的标准 Frigate 镜像latest-tensorrt
- 专为运行 nvidia GPU 的 amd64 设备构建的 Frigate 镜像