向主代码库贡献代码
获取源代码
核心、Web界面、Docker和文档
这个仓库包含了主要的Frigate应用程序及其所有依赖项。
将blakeblackshear/frigate复制(fork)到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。
从这里,按照以下指南进行操作:
Frigate Home Assistant插件
这个仓库包含了Home Assistant插件,用于Home Assistant OS和兼容的安装。它允许你通过Home Assistant的Supervisor标签页运行Frigate。
将blakeblackshear/frigate-hass-addons复制到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。
Frigate Home Assistant集成
这个仓库包含了自定义集成,可以让你的Home Assistant安装自动为Frigate实例创建实体,无论你是将Frigate作为独立的Docker容器运行还是作为Home Assistant插件运行。
将blakeblackshear/frigate-hass-integration复制到你自己的GitHub账户,然后将复制的仓库克隆到你的本地机器。
核心
前提条件
- GNU make
- Docker (包括buildx插件)
- 额外的检测器(Coral、OpenVINO等)是可选的,但建议用于模拟真实世界的性能。
一个Coral设备一次只能被一个进程使用,因此如果将Coral用于开发目的,建议使用额外的Coral设备。
设置
1. 使用Visual Studio Code打开仓库
打开后,你应该会收到在远程容器中打开项目的提示。这将在基础Frigate容器之上构建一个安装了所有开发依赖项的容器。这确保了每个人都使用一致的开发环境,而无需在主机上安装任何依赖项。
2. 修改本地配置文件以进行测试
将文件放在仓库根目录的config/config.yml
中。
这里是一个示例,但请根据你的需求修改:
mqtt:
host: mqtt
cameras:
test:
ffmpeg:
inputs:
- path: /media/frigate/car-stopping.mp4
input_args: -re -stream_loop -1 -fflags +genpts
roles:
- detect
这些输入参数告诉ffmpeg以无限循环方式读取mp4文件。你可以在这里使用任何有效的ffmpeg输入。
3. 收集一些mp4文件用于测试
在仓库根目录创建一个debug
文件夹并放入这些文件。如果你启用了录制功能,录制的文件也会保存在这里。更新上面步骤2中的配置以指向正确的文件。你可以查看仓库中的docker-compose.yml
文件来了解卷的映射方式。
4. 从命令行运行Frigate
VS Code会为你启动Docker Compose文件并打开一个连接到frigate-dev
的终端窗口。
- 根据你的开发硬件,你可能需要修改项目根目录中的
docker-compose.yml
以传递USB Coral或GPU进行硬件加速。 - 运行
python3 -m frigate
启动后端。 - 在VS Code的另一个终端窗口中,切换到
web
目录并运行npm install && npm run dev
启动前端。
5. 清理
关闭VS Code后,可能仍有容器在运行。要关闭所有内容,只需运行docker-compose down -v
来清理所有容器。
测试
FFMPEG硬件加速
以下命令在容器内部使用,以确保硬件加速正常工作。
树莓派(64位)
这应该在top 中显示低于50%的CPU使用率,不使用-c:v h264_v4l2m2m
时约为80%的CPU使用率。
ffmpeg -c:v h264_v4l2m2m -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null
NVIDIA GPU
ffmpeg -c:v h264_cuvid -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null
NVIDIA Jetson
ffmpeg -c:v h264_nvmpi -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null
VAAPI
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null
QSV
ffmpeg -c:v h264_qsv -re -stream_loop -1 -i https://streams.videolan.org/ffmpeg/incoming/720p60.mp4 -f rawvideo -pix_fmt yuv420p pipe: > /dev/null
Web界面
前提条件
- 所有核心前提条件 或 另一个本地可用的运行中的Frigate实例
- Node.js 20
进行更改
1. 设置Frigate实例
Web UI需要一个Frigate实例来交互以获取所有数据。你可以在本地运行一个实例(推荐)或连接到网络上可访问的独立实例。
要运行本地实例,请按照核心开发说明进行操作。
如果你不会对Frigate HTTP API进行任何更改,可以将web开发服务器连接到网络上的任何Frigate实例。跳过这一步,直接转到3a。
2. 安装依赖项
cd web && npm install
3. 运行开发服务器
cd web && npm run dev
3a. 针对非本地实例运行开发服务器
要针对非本地实例运行开发服务器,你需要将vite.config.ts
中的localhost
值替换为非本地后端服务器的IP地址。
4. 进行更改
Web UI使用Vite、Preact和Tailwind CSS构建。
轻量级指南和建议:
- 避免添加更多依赖项。web UI旨在轻量化和快速加载。
- 不要进行大规模的改动。对于任何大型或架构性的想法,请在GitHub上开启讨论。
- 确保
lint
通过。此命令将确保基本符合样式规范,应用尽可能多的自动修复,包括Prettier格式化。
npm run lint
- 添加单元测试并确保它们通过。尽可能地,你应该在进行更改时努力_增加_测试覆盖率。这将有助于确保功能在未来不会意外损坏。
- 如果在运行测试时遇到"TypeError: Cannot read properties of undefined (reading 'context')"之类的错误消息,这可能是由于vitest中的这些问题(https://github.com/vitest-dev/vitest/issues/1910, https://github.com/vitest-dev/vitest/issues/1652),但我还没能解决它们。
npm run test
- 在不同浏览器中测试。Firefox、Chrome和Safari都有使它们成为独特目标的不同特性。
文档
前提条件
- Node.js 20
进行更改
1. 安装
cd docs && npm install
2. 本地开发
npm run start
此命令启动本地开发服务器并打开浏览器窗口。大多数更改无需重启服务器即可实时反映。
文档使用Docusaurus v3构建。请参阅Docusaurus文档以获取有关如何修改Frigate文档的更多信息。
3. 构建(可选)
npm run build
此命令将静态内容生成到build
目录中,可以使用任何静态内容托管服务来提供服务。
官方构建
设置buildx进行多架构构建
docker buildx stop builder && docker buildx rm builder # <---- 如果已存在
docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx create --name builder --driver docker-container --driver-opt network=host --use
docker buildx inspect builder --bootstrap
make push