Frigate 是一套完全跑在自己硬體上的 NVR:它只用 OpenCV 做低成本的動作偵測,只有在畫面有動靜時才把區域裁切、縮放後交給 AI 辨識人、車、動物,所以 4 台 1080p 攝影機用一台 Intel N100 迷你電腦就能跑。影片、快照、事件全存在自己的硬碟,沒有月費、沒有雲端。
為什麼不直接用攝影機廠商的雲端
| 痛點 | 廠商雲端 NVR | 傳統 NVR | Frigate |
|---|---|---|---|
| 月費 | 每台每月訂閱,越加越貴 | 無,但要買主機 | 無 |
| 通知準確度 | 樹影、下雨、光線變化都會通知 | 純動作偵測,誤報多 | AI 只認人/車/動物,可依物件決定通不通知 |
| 資料在哪 | 廠商伺服器 | 自己硬碟 | 自己硬碟(含資料庫、快照、影像) |
| 跨品牌 | 只能同一家 | 通常綁品牌 | 只要 RTSP 就能接 |
| 自動化 | 封閉 App | 幾乎沒有 | MQTT 全事件 + Home Assistant |
| 事後找人 | 只能手動拖時間軸 | 手動拖 | 依物件、區域、車牌,甚至自然語言搜尋 |
最後一項是 0.18 之後最大的差別:你可以直接問「昨晚門口那台白色廂型車」,不用再從晚上十點拖到凌晨兩點。
一表看懂
| 項目 | 內容 |
|---|---|
| 專案 | blakeblackshear/frigate |
| 最新版本 | v0.18.2(2026-10-15 發布) |
| GitHub 星數 | 36,749(2026-10-19 以 GitHub API 查詢) |
| Fork/開啟中 issue | 3,726/94 |
| 授權 | MIT(可商用,但沒有保固) |
| 技術底層 | Python + FastAPI + OpenCV + TensorFlow/ONNX,影像用 FFmpeg,串流用 go2rtc |
| 網頁介面 | 內建,8971 埠(需登入);5000 埠為內部無驗證 API |
| 部署方式 | Docker Compose(官方推薦)或 Home Assistant App |
| 物件偵測 | 可換偵測器,支援 OpenVINO、EdgeTPU、Hailo、TensorRT、ROCm、RKNN、ONNX、Apple Silicon 等 |
它到底怎麼運作(比你想的省很多)
| 步驟 | 做什麼 | 為什麼這樣設計 |
|---|---|---|
| 1. 解碼 | 用 FFmpeg 接 RTSP,背景解碼串流 | 解碼交給硬體(VAAPI/QSV/NVDEC)就不吃 CPU |
| 2. 動作偵測 | OpenCV 比對像素變化,標出「有動靜的區域」 | 成本極低,絕大多數時間畫面是靜止的 |
| 3. 裁切與縮放 | 只把動靜區域裁出來、縮到 320×320 | 不把整張 4K 丟進模型,省下 90% 以上算力 |
| 4. 物件辨識 | 送進偵測器判斷是人、車、狗還是腳踏車 | 320×320 模型 + 裁切放大,反而對遠處小目標更準 |
| 5. 追蹤與事件 | 跨影格追蹤 bounding box,符合條件就錄影/快照並發 MQTT | 預設 5 fps 就足以穩定追蹤 |
看懂第 3 步,你就懂為什麼「把 detect 串流設成 4K」是純浪費:模型最後看到的還是 320×320 的裁切圖,你只是讓 CPU 多解一張大圖。
安裝:Docker Compose(推薦)
先建立目錄,config/config.yml 放設定,storage/ 放錄影:
mkdir -p ~/frigate/config ~/frigate/storage
docker-compose.yml(官方範例,移除你沒有的硬體 device):
services:
frigate:
container_name: frigate
restart: unless-stopped
stop_grace_period: 30s
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "512mb" # 依攝影機數量與解析度調整,見下方說明
devices:
- /dev/bus/usb:/dev/bus/usb # USB Coral
- /dev/dri/renderD128:/dev/dri/renderD128 # Intel/AMD iGPU(OpenVINO 或 VAAPI 解碼)
# - /dev/apex_0:/dev/apex_0 # PCIe/M.2 Coral
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config:/config
- ./storage:/media/frigate
- type: tmpfs # 錄影暫存放 RAM,保護 SSD
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971" # 需登入的網頁與 API
- "8554:8554" # RTSP 再串流
- "8555:8555/tcp" # WebRTC
- "8555:8555/udp"
environment:
FRIGATE_RTSP_PASSWORD: "your_camera_password"
四個埠各有用途,別亂開:8971 是有驗證的 UI/API(給反向代理用);5000 是內部無驗證 API,只給同網路的服務用,盡量不要對外;8554 是 RTSP 再串流(多個客戶端拉同一台攝影機時,只對攝影機建一條連線);8555 是 WebRTC 低延遲預覽。
shm_size 為什麼一定要調
Docker 預設共享記憶體只有 64MB,Frigate 用它存解碼後的原始影格。官方數字:2 台 720p 約需 210MB,容器還另外用掉最多 50MB 放 log 與 nginx 快取。所以 shm_size 留 64MB 的結果就是啟動後直接 Bus error 掛掉。4 台以上建議 512MB 起跳。用 Home Assistant App 的話不用設,Supervisor 會自動給總記憶體的一半。
config.yml:最小可跑版本
mqtt:
enabled: true
host: 192.168.1.50 # Mosquitto broker
user: mqtt
password: your_mqtt_password
detectors:
ov: # Intel iGPU/NPU 用 OpenVINO,零成本
type: openvino
device: GPU
model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt
cameras:
front_door:
ffmpeg:
hwaccel_args: preset-vaapi # Intel 用 VAAPI;NVIDIA 用 preset-nvidia
inputs:
- path: rtsp://admin:pass@192.168.1.100:554/stream2 # 子串流:偵測
roles: [detect]
- path: rtsp://admin:pass@192.168.1.100:554/stream1 # 主串流:錄影
roles: [record]
detect:
enabled: true
width: 1280 # 必須等於 detect 子串流的真實解析度
height: 720
fps: 5 # 5 就夠,調高只是燒 CPU
record:
enabled: true
continuous:
days: 3 # 全時錄影只留 3 天
motion:
days: 7 # 有動靜的留 7 天
alerts:
retain:
days: 30
mode: motion # 只有「告警級」物件(人、車)才留 30 天
detections:
retain:
days: 30
mode: motion
snapshots:
enabled: true
retain:
default: 30
⚠️ 0.18 的 record 設定格式和舊教學不一樣。 網路上一堆文章還停在 record: retain: { days: 7, mode: motion },那是舊語法;0.18 改成 continuous / motion / alerts / detections 四段,升級時 Frigate 會嘗試自動遷移,但照舊文抄會直接報錯。
偵測器怎麼選(這決定你要不要花錢)
| 偵測器 | 適用硬體 | 成本 | 優點 | 缺點 |
|---|---|---|---|---|
openvino | Intel 第 6 代以後的 iGPU/NPU | 0 元(硬體內建) | 不用買任何東西,4 台 1080p 夠用 | 需要較新的 Intel 平台;老 CPU 只有 AVX 會很慢 |
edgetpu | Google Coral USB/M.2 | 約 80–130 美元(約 NT$2,500–4,100) | 推論極快、功耗極低,幾乎不吃 CPU | 常缺貨;樹莓派供電不足會不穩,要接有電源的 USB hub |
hailo8 / hailo8l | Hailo-8/8L(Raspberry Pi 5 AI Kit 等) | 依模組而定 | 官方原生支援,Pi 5 上好選擇 | Pi OS Bookworm 要手動處理舊驅動 |
tensorrt | NVIDIA GPU(含 Jetson) | 依顯卡 | 速度最快,可跑較大模型 | 要轉模型、映像檔要用 -tensorrt 標籤 |
rocm | AMD GPU | 依顯卡 | 免 Blackwell 世代也能跑 | 映像檔需用 -rocm,設定較多 |
rknpu | Rockchip 單板(RK35xx/RK36xx) | 依板子 | 便宜的 ARM 加速路線 | 映像檔要用 -rk,只支援特定晶片 |
cpu | 任何 x86 | 0 元 | 一定能跑 | 官方明說不建議:延遲高、CPU 吃滿 |
選型結論很簡單:Intel 平台直接用 OpenVINO,不要花錢;樹莓派或省電小主機再考慮 Coral/Hailo;要跑大模型或 Frigate+ 自訂模型才需要 NVIDIA。
儲存空間怎麼算(最多人算錯的地方)
錄影是直接抄攝影機串流、不重新編碼,所以容量完全由位元率決定。每 1 Mbps 連續錄影一天約 10.8 GB。
| 畫質與編碼 | 位元率 | 每台每天 | 1TB 可存 |
|---|---|---|---|
| 1080p H.264 | 2 Mbps | 約 22 GB | 約 46 天 |
| 1080p H.264 | 4 Mbps | 約 43 GB | 約 23 天 |
| 4K H.265 | 6 Mbps | 約 65 GB | 約 15 天 |
| 4K H.265 | 8 Mbps | 約 86 GB | 約 12 天 |
| 4K H.264 | 10–12 Mbps | 約 108–130 GB | 約 8–9 天 |
四台 1080p、只留「有動靜」的片段,配上 2TB 硬碟可以撐很久;但如果你開全天連續錄影,4 台 4K 一天就吃掉 300GB 以上。先算容量再開 continuous,是自架 NVR 唯一不會後悔的順序。
0.18 新增了什麼(這次改版很大)
| 功能 | 說明 |
|---|---|
| Settings UI 全設定化 | 幾乎所有設定都能在網頁上改,含驗證與「需重啟」提示,可存檔即生效(不用再改 YAML 重啟) |
| Profiles | 為同一台攝影機定義多組設定(白天/夜間/在家/外出),可即時切換,也能用 MQTT frigate/profile/set 切 |
| 人臉辨識 | 針對人物建立訓練集後辨識「是誰」,可與通知、自動化連動 |
| 車牌辨識(LPR) | 讀車牌號碼,適合車道與社區出入口 |
| 語意搜尋 | 用圖片或自然語言描述找歷史事件(以 Jina AI 模型在本機算 embedding) |
| GenAI 描述與摘要 | 接本地 Ollama/llama.cpp 或 OpenAI/Gemini,對事件產生文字描述與審查摘要 |
| GenAI Chat | 在 UI 裡用自然語言問「昨天下午有人在後院嗎」,背後是會呼叫 Frigate 工具的 LLM agent |
| Motion Search/Debug Replay | 框選區域找動作時段;可把錄好的影片當成假攝影機重跑偵測,用來調參數 |
| 匯出與 Cases | 匯出可歸檔成「案件」,支援多攝影機快速匯出與自訂 ffmpeg 參數 |
GenAI 與語意搜尋的硬體門檻
- 語意搜尋:至少 8GB RAM、CPU 需支援 AVX+AVX2;官方建議 16GB RAM 以上並搭配 GPU。樹莓派這種等級「不會動或跑不穩」。
- GenAI 描述:需要視覺模型(官方推薦
qwen3-vl系列),用 CPU 跑推論時間長到不實用,官方直接寫「不建議」。 - 支援的 provider:
llamacpp、ollama、openai、azure_openai、gemini;角色分chat/descriptions/embeddings/transcribe,可以拆給不同 provider。
也就是說:樹莓派能跑偵測,但跑不動 0.18 最亮眼的那幾個 AI 功能。 想全開請準備有 GPU 的 x86 主機。
七個實測踩過的坑
| 坑 | 症狀 | 解法 |
|---|---|---|
shm_size 太小 | 啟動即 Bus error | 依官方公式調到 256MB 以上,4 台起跳 512MB |
| detect 串流設 4K | CPU 吃滿、準確度沒提升 | detect 用 720p 子串流就好,模型只看 320×320 |
fps 調到 10 以上 | CPU/GPU 暴增,追蹤沒變好 | 維持 5,這是設計上足夠的值 |
| 沒開 hwaccel | 解碼全靠 CPU,畫面卡 | Intel 用 preset-vaapi、NVIDIA 用 preset-nvidia,並掛 /dev/dri |
| 主/子串流長寬比不同 | 預覽與播放畫面變形 | 兩條串流用同一個長寬比(例如都 16:9) |
| 用 H.265 錄影 | 部分瀏覽器播不出來 | 只有 Chrome 108+、Edge、Safari 支援 H.265;其他瀏覽器要 H.264 |
/tmp/cache 沒掛 tmpfs | SSD 寫入量暴增、壽命縮短 | 照上面的 compose 掛 1GB tmpfs |
另外兩個小細節:RTSP 密碼若含特殊符號,早期版本會解析失敗,能改就改用底線;攝影機的 RTSP 帳密通常和手機 App 的帳號不同,別拿 App 密碼去試。
升級到 0.18 前的四個破壞性變更
如果你已經在跑 0.17,這幾點一定要知道(官方列為 breaking changes):
- 快照不再存標註版 JPEG。 現在只存乾淨的 WebP(
<camera>-<id>-clean.webp),clean_copy選項被移除;需要帶框的圖要改用/api/events/<id>/snapshot.jpg端點。snapshots.quality預設從 70 改成 60。 - zones 與 masks 格式變了,多了
enabled與friendly_name。自動遷移失敗就得手改。 - FFmpeg 升到 8,go2rtc 若做硬體轉碼需要小幅改設定;FFmpeg 5 在 0.19 會移除。
- Intel GPU 使用率統計改讀 kernel DRM 計數器,需要 host kernel 6.5 以上,不再需要
CAP_PERFMON或 privileged。
升級前請備份 config.yml 與 frigate.db,這是官方自己寫在最前面的建議。
接上 Home Assistant:整合與手機推播
- 先讓 HA 有 MQTT broker(Mosquitto App),Frigate 的
mqtt:指向同一個 broker。 - 用 HACS 安裝 Frigate 整合,重啟後在「設定 → 裝置與服務 → 新增整合」填入
http://<frigate-ip>:8971。 - 整合會自動生出
camera(串流與最新快照)、binary_sensor(各區域物件佔用)、sensor(FPS、CPU、物件統計)、switch(錄影/偵測/快照開關)。 - 儀表板可再用 HACS 裝
frigate-hass-card,直接嵌即時畫面與事件歷史。 - 推播建議走整合提供的安全端點,不必把 Frigate 直接曝露到外網:
https://<HA_URL>/api/frigate/notifications/<event-id>/snapshot.jpg
https://<HA_URL>/api/frigate/notifications/<event-id>/clip.mp4 # Android
https://<HA_URL>/api/frigate/notifications/<event-id>/master.m3u8 # iOS
自動化最省事的做法是匯入社群的「Frigate Notifications」藍圖,把觸發設在 binary_sensor.front_door_person_occupancy,通知的 data.image 指向上面的 snapshot 端點,這樣手機推送就會帶圖。
誰適合、誰不需要
適合:家裡有 2 台以上 IP 攝影機、已經在用 Home Assistant、在意影片不離開自家網路、想用「有人出現才通知」取代「有動靜就通知」。
不需要:只有一台攝影機而且廠商 App 已經夠用;不想維護 Docker 與硬碟;需要專業監控系統的集中管理、多站點與保固服務。
站內延伸閱讀
- Home Assistant 完整教學 2026:9 萬星開源智慧家庭中樞
- Proxmox VE 9 完整教學 2026:自架虛擬化平台(把 Frigate 放進 LXC/VM 並直通 GPU 的做法)
- Jellyfin 完整教學 2026:57K 星開源媒體伺服器(同樣吃硬體轉碼與儲存規劃的自架媒體服務)
資料來源與查證方式
- Frigate 官方文件:安裝、設定、偵測器、錄影、語意搜尋、人臉辨識、GenAI(
docs.frigate.video,2026-10-19 讀取) - GitHub
blakeblackshear/frigate:v0.18.0/v0.18.2 release notes、README、GitHub API 星數與授權 - NotebookLM 快速研究(10 個來源)交叉比對安裝與硬體需求
已知限制:本文未實機部署;硬體建議(如「N100 可跑 4 台 1080p」)來自官方文件與社群經驗,實際效能取決於解碼負載與是否啟用 enrichment。Coral 價格為美金行情換算(匯率約 31.5),實際售價與供貨依通路而定。人臉辨識、車牌辨識與 GenAI 的準確率高度依賴訓練資料與光線條件,官方也明確要求用自家攝影機畫面訓練才會有實用效果。
