展生態(tài)全景:11 個(gè)高價(jià)值插件與它們的 REST API / MQTT 接入方式)
Frigate 第三方擴(kuò)展生態(tài)全景11 個(gè)高價(jià)值插件與它們的 REST API / MQTT 接入方式【免費(fèi)下載鏈接】frigateNVR with realtime local object detection for IP cameras項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fr/frigateFrigate 是開源的家用 NVR網(wǎng)絡(luò)錄像機(jī)其核心價(jià)值之一在于開放——它不僅自身功能豐富還通過一套穩(wěn)定的集成接口REST API 與 MQTT 消息總線允許社區(qū)在其之上構(gòu)建各類擴(kuò)展。本篇文章以倉(cāng)庫(kù)內(nèi) docs/docs/integrations/third_party_extensions.md 文檔為主干逐一梳理 11 個(gè)圍繞 Frigate 構(gòu)建的第三方項(xiàng)目并結(jié)合當(dāng)前倉(cāng)庫(kù)源碼深入講解這些擴(kuò)展所依賴的集成機(jī)制內(nèi)部 API 端口、認(rèn)證模型、事件/審查數(shù)據(jù)結(jié)構(gòu)、MQTT 主題體系。讀完本文你將理解第三方工具如何與 Frigate 通信并能根據(jù)自身場(chǎng)景通知、人臉識(shí)別、自然語(yǔ)言查詢、大屏展示、媒體備份等選型與接入對(duì)應(yīng)擴(kuò)展。注意本文僅作客觀梳理不對(duì)任何擴(kuò)展項(xiàng)目進(jìn)行推薦或評(píng)級(jí)。文中的項(xiàng)目均來自官方文檔收錄的社區(qū)項(xiàng)目清單清單本身不設(shè)上限任何人均可通過向 Frigate 文檔提交 PR 來補(bǔ)充新項(xiàng)目。安裝任何第三方軟件前請(qǐng)務(wù)必自行評(píng)估與審查其安全性。Frigate 為何能擁有第三方擴(kuò)展生態(tài)開放而穩(wěn)定的集成接口官方文檔明確寫道絕大多數(shù)第三方服務(wù)的設(shè)計(jì)目標(biāo)是與 Frigate 在 5000 端口上的免認(rèn)證 API 對(duì)接。這句話背后對(duì)應(yīng)的是 Frigate 當(dāng)前倉(cāng)庫(kù)中一套真實(shí)的網(wǎng)絡(luò)與認(rèn)證架構(gòu)我們先用源碼把它講透。REST API默認(rèn)內(nèi)部端口 5000外部端口 8971Frigate 的監(jiān)聽端口定義在 frigate/config/network.py 的ListenConfig中internal內(nèi)部監(jiān)聽端口默認(rèn)5000external外部監(jiān)聽端口默認(rèn)8971兩者必須不同有validate_distinct_ports校驗(yàn)internal_port/external_port屬性會(huì)把a(bǔ)ddress:port形式的配置解析成純端口號(hào)。配置注釋還特別說明對(duì)絕大多數(shù)用戶而言更推薦直接在 Docker Compose 的 ports 段修改端口映射而非改動(dòng)該配置。因此5000 端口是 Frigate 容器內(nèi)部的默認(rèn) API 端口第三方擴(kuò)展若與 Frigate 運(yùn)行在同一網(wǎng)絡(luò)如同一 docker-compose 項(xiàng)目或同一 Docker 網(wǎng)絡(luò)即可直接訪問。為什么內(nèi)部端口可以免認(rèn)證/auth 端點(diǎn)的特殊處理免認(rèn)證 API并非沒有認(rèn)證而是有一套基于反向代理的信任模型。Frigate 容器內(nèi)由 nginx 充當(dāng)網(wǎng)關(guān)nginx 會(huì)為每個(gè)請(qǐng)求打上x-server-port頭再由/auth端點(diǎn)完成身份注入。在 frigate/api/auth.py 中可以看到核心邏輯# dont require auth if the request is on the internal port # this header is set by Frigates nginx proxy, so it cant be spoofed. if ( int(request.headers.get(x-server-port, default0)) request.app.auth_internal_port ): success_response.headers[remote-user] anonymous success_response.headers[remote-role] admin return success_response也就是說通過內(nèi)部端口默認(rèn) 5000進(jìn)入的請(qǐng)求會(huì)被自動(dòng)標(biāo)記為remote-user: anonymous、remote-role: admin從而繞過登錄而外部端口默認(rèn) 8971的請(qǐng)求則必須走完整認(rèn)證流程。這正是官方文檔所稱unauthenticated api over port 5000的底層實(shí)現(xiàn)——x-server-port頭由 Frigate 自己的 nginx 設(shè)置無法被外部偽造相關(guān)認(rèn)證邊界說明也記錄在 frigate/api/auth.py 的allow_any_authenticated依賴中。所有 API 路由都在 frigate/api/fastapi_app.py 中掛載涵蓋事件event、審查review、媒體media、錄像record、導(dǎo)出export、相機(jī)camera、統(tǒng)計(jì)stats等模塊。第三方擴(kuò)展最常用到的端點(diǎn)包括GET /api/events查詢事件列表支持相機(jī)、標(biāo)簽、區(qū)域、時(shí)間、has_clip、has_snapshot、分?jǐn)?shù)區(qū)間等大量過濾參數(shù)定義見 frigate/api/defs/query/events_query_parameters.py實(shí)現(xiàn)見 frigate/api/event.pyGET /api/events/{event_id}按 ID 獲取單個(gè)事件frigate/api/event.pyGET /api/events/{event_id}/thumbnail.{extension}獲取事件縮略圖較新的include_thumbnails參數(shù)已被標(biāo)記為 deprecated官方在 frigate/api/defs/query/events_query_parameters.py 中明確建議改用該縮略圖端點(diǎn)GET /api/review、GET /api/review/summary查詢審查片段及按時(shí)間線聚合的摘要參數(shù)定義見 frigate/api/defs/query/review_query_parameters.py實(shí)現(xiàn)見 frigate/api/review.py 與 frigate/api/review.pyGET /api/stats、GET /api/version、GET /api/config系統(tǒng)狀態(tài)、版本號(hào)與配置信息frigate/api/app.py、frigate/api/app.py。完整的 OpenAPI 規(guī)范文件位于 docs/static/frigate-api.yaml第三方開發(fā)者可直接以此為準(zhǔn)生成客戶端倉(cāng)庫(kù)內(nèi)更詳盡的中文可讀說明見 docs/docs/integrations/api.md。MQTT事件與狀態(tài)的實(shí)時(shí)總線除 REST API 外Frigate 的 MQTT 總線是擴(kuò)展接入的另一大入口。MQTT 客戶端實(shí)現(xiàn)在 frigate/comms/mqtt.py其publish方法會(huì)自動(dòng)為所有主題加上topic_prefix前綴def publish(self, topic: str, payload: Any, retain: bool False) - None: ... self._mqtt_client.publish( f{self.mqtt_config.topic_prefix}/{topic}, ... )topic_prefix的默認(rèn)值是frigate見 frigate/config/mqtt.py并可在配置中修改。也就是說默認(rèn)情況下所有主題都以frigate/開頭。倉(cāng)庫(kù)內(nèi) docs/docs/integrations/mqtt.md 對(duì)主題體系做了完整說明第三方擴(kuò)展最常訂閱/監(jiān)聽的主題包括frigate/events每個(gè)被跟蹤對(duì)象狀態(tài)變化時(shí)發(fā)布一條消息type為new/update/end包含before與after兩段完整事件快照字段覆蓋label、sub_label、score、box、zones、has_clip、has_snapshot、速度與車牌識(shí)別結(jié)果等frigate/reviews審查片段相關(guān)消息frigate/stats周期性發(fā)布的系統(tǒng)統(tǒng)計(jì)frigate/available可用性主題online/stopped/offline常用于 Home Assistant 的 availability 配置frigate/camera_name/object_name/snapshot對(duì)象快照相關(guān)主題frigate/camera_name/ptz、frigate/camera_name/detect/set、frigate/camera_name/recordings/set等命令/狀態(tài)主題可用于下發(fā) PTZ 控制與開關(guān)檢測(cè)等指令。正是REST API 取數(shù)據(jù) MQTT 收事件 寫回控制指令這一組合讓第三方項(xiàng)目可以在不改動(dòng) Frigate 內(nèi)核的前提下實(shí)現(xiàn)從通知推送到智能查詢的豐富能力。數(shù)據(jù)模型事件、審查、子標(biāo)簽與快照理解擴(kuò)展功能前還需掌握 Frigate 的幾個(gè)核心數(shù)據(jù)概念事件Event一次被跟蹤對(duì)象person、car 等的完整生命周期包含start_time、end_time、label、sub_label、score、zones、has_snapshot、has_clip等字段審查片段Review Segment按時(shí)間段聚合的審查條目/api/review即返回此類數(shù)據(jù)子標(biāo)簽sub_label事件的二級(jí)標(biāo)注典型用途是寫入識(shí)別出的具體是誰(shuí)例如人臉識(shí)別結(jié)果John Smith。事件查詢 API 支持按sub_label過濾實(shí)現(xiàn)中甚至針對(duì)逗號(hào)分隔的多個(gè)子標(biāo)簽做了LOWER與通配匹配處理見 frigate/api/event.py并提供了set_sub_label寫接口見 frigate/api/event.py快照snapshot與片段clip事件觸發(fā)時(shí)保存的靜態(tài)圖與錄像片段has_snapshot/has_clip布爾字段即是其標(biāo)記/api/events/{event_id}/thumbnail.{extension}等端點(diǎn)負(fù)責(zé)取回媒體內(nèi)容。掌握了這套模型再回頭看各個(gè)擴(kuò)展就能清晰理解它們各自掛在 Frigate 的哪個(gè)接口上。家庭自動(dòng)化面板Advanced Camera CardAdvanced Camera Card原名 Frigate Card是Home Assistant 的儀表盤卡片與 Frigate 深度集成。它利用 Frigate 的事件/審查 API 與 MQTT 數(shù)據(jù)在 Home Assistant 的 Lovelace 界面中直接展示攝像頭畫面、事件時(shí)間線、審查片段與對(duì)象檢測(cè)結(jié)果讓家庭自動(dòng)化中樞與NVR在界面上融為一體。對(duì)已在使用 Home Assistant 的用戶來說這是體驗(yàn) Frigate 能力的最直接入口其與 Frigate 的交互方式同樣是走 REST API拉取事件與媒體 MQTT實(shí)時(shí)狀態(tài)具體可參考倉(cāng)庫(kù)內(nèi) docs/docs/integrations/home-assistant.md。自然語(yǔ)言交互cctvQLcctvQL 是一個(gè)面向 Frigate 及其他 CCTV 系統(tǒng)的自然語(yǔ)言查詢層。它的工作方式如下連接 Frigate 的REST API與MQTT broker允許用戶用會(huì)話式問句查詢相機(jī)與事件例如昨晚前門有沒有動(dòng)靜Was there motion at the front door last night?支持實(shí)時(shí)事件流借助 MQTT 的frigate/events等主題、異常檢測(cè)、PTZ 控制、告警規(guī)則額外提供 Home Assistant 自定義組件。從架構(gòu)上看cctvQL 正是REST API 負(fù)責(zé)查歷史、MQTT 負(fù)責(zé)收實(shí)時(shí)這一集成范式的典型代表歷史問題通過/api/events等查詢接口回答實(shí)時(shí)告警與流式事件則依賴 MQTT 推送。人臉識(shí)別訓(xùn)練與自動(dòng)打標(biāo)Double TakeDouble Take 為人臉識(shí)別的圖像處理與訓(xùn)練提供統(tǒng)一的 UI 和 API。它最實(shí)用的能力是識(shí)別出某個(gè)人后自動(dòng)在 Frigate 中為對(duì)應(yīng) person 事件設(shè)置 sub_label。這正是前面提到的sub_label機(jī)制的實(shí)戰(zhàn)場(chǎng)景Double Take 在后臺(tái)完成人臉比對(duì)與身份確認(rèn)后調(diào)用 Frigate 的set_sub_label接口見 frigate/api/event.py把事件標(biāo)記為John Smith用戶隨后就能在 Frigate 的界面與/api/events?sub_labelsJohn%20Smith查詢中按人名檢索事件同時(shí) MQTT 的frigate/events消息中也會(huì)帶出sub_label字段供自動(dòng)化系統(tǒng)消費(fèi)。需要說明的是當(dāng)前倉(cāng)庫(kù)收錄的 Double Take 是原項(xiàng)目作者已停止維護(hù)的一個(gè)修復(fù)了錯(cuò)誤并增加了新特性的 fork選用時(shí)請(qǐng)自行確認(rèn)維護(hù)狀態(tài)與適配版本。通知推送三件套Frigate Notify、Frigate Notify Alert、Frigate telegram通知是第三方擴(kuò)展中數(shù)量最多的一類三個(gè)項(xiàng)目側(cè)重點(diǎn)各不相同F(xiàn)rigate NotifyFrigate Notify 是一個(gè)面向獨(dú)立 Frigate 安裝的通知應(yīng)用把 Frigate 事件推送到你偏好的平臺(tái)。它的定位要點(diǎn)是適用于獨(dú)立standaloneFrigate 安裝不依賴 Home AssistantMQTT 可選但推薦——有 MQTT 時(shí)可訂閱frigate/events等主題實(shí)現(xiàn)實(shí)時(shí)推送無 MQTT 時(shí)則通過 REST API 輪詢。Frigate Notify AlertFrigate Notify Alert 專注于把 Frigate 事件以照片 視頻媒體組的形式發(fā)送到 Telegram。其特性包括支持多個(gè)相機(jī)分組每個(gè)分組各自通知自己的聊天會(huì)話支持可選的區(qū)域zone過濾——只有對(duì)象進(jìn)入指定區(qū)域時(shí)才通知支持在聊天內(nèi)通過按鈕暫停通知一段時(shí)間。它是典型的MQTT 訂閱 媒體 API 拉取組合通過 MQTT 收到事件后再調(diào)用/api/events/{event_id}/thumbnail等端點(diǎn)拉取快照與視頻片段組裝媒體組。官方文檔同樣說明它適配獨(dú)立 Frigate、無需 Home Assistant。Frigate telegramFrigate telegram 的目標(biāo)更為直接把 Frigate 事件發(fā)送到 Telegram每條消息包含文本描述、視頻和縮略圖。它適合想要輕量、只發(fā) Telegram的用戶與 Frigate Notify Alert 相比功能更簡(jiǎn)潔。三個(gè)項(xiàng)目功能有重疊選型時(shí)主要考量推送平臺(tái)范圍Frigate Notify 多平臺(tái) vs 后兩者僅 Telegram、是否需要區(qū)域過濾/暫停按鈕等高級(jí)特性、以及你對(duì)MQTT 可選 / 必須的偏好。媒體同步與備份Frigate Snap-SyncFrigate Snap-Sync 是一個(gè)與 Frigate 協(xié)同工作的媒體同步程序當(dāng) Frigate 生成快照snapshot或?qū)彶槠蝦eview時(shí)官方說明未來可擴(kuò)展更多事件類型它會(huì)響應(yīng)并上傳到一臺(tái)或多臺(tái)你指定的遠(yuǎn)程服務(wù)器適合需要異地備份關(guān)鍵證據(jù)、或在多站點(diǎn)間同步錄像/截圖的中高級(jí)用戶。從 Frigate 側(cè)看snapshot 與 review 分別對(duì)應(yīng)事件模型的has_snapshot字段與/api/review返回的審查條目Snap-Sync 可通過這些接口發(fā)現(xiàn)新生成的媒體文件再執(zhí)行傳輸。遠(yuǎn)程同步的安全傳輸加密、目標(biāo)服務(wù)器鑒權(quán)需用戶自行保障。展示終端kiosk-monitor 與 Periscopekiosk-monitor樹莓派看板看門狗kiosk-monitor 是一個(gè)Raspberry Pi 看門狗程序用于把樹莓派變成永續(xù)運(yùn)行的 Frigate 看板終端以全屏 Chromium打開 Frigate 儀表盤可選在第二塊顯示器上用 VLC 播放一路 RTSP 攝像頭流屏幕凍結(jié)或 URL 不可達(dá)時(shí)自動(dòng)重啟瀏覽器/應(yīng)用附帶一個(gè)Birdseye 感知的 Chromium 助手可根據(jù)顯示器尺寸自動(dòng)調(diào)整網(wǎng)格布局。這里的 Birdseye 對(duì)應(yīng) Frigate 內(nèi)置的鳥瞰視圖功能多相機(jī)網(wǎng)格聚合畫面配置文檔見 docs/docs/configuration/birdseye.mdkiosk-monitor 專門針對(duì)它做了布局適配。Periscope舊手機(jī)變身實(shí)時(shí)查看器Periscope 是一個(gè)輕量級(jí) Android 應(yīng)用把閑置的舊設(shè)備變成 Frigate 的實(shí)時(shí)查看器支持Android 2.2 及以上版本包括 Android TV支持認(rèn)證與 HTTPS可安全訪問遠(yuǎn)程部署的 Frigate。它適合手頭有舊 Android 手機(jī)/電視盒子的用戶低成本獲得一塊專用的監(jiān)控屏。流媒體與生態(tài)橋接Scrypted Frigate BridgeScrypted - Frigate bridge 是 Scrypted智能家居視頻平臺(tái)的插件負(fù)責(zé)在兩個(gè)系統(tǒng)間搭建橋梁將 Frigate 的檢測(cè)結(jié)果、運(yùn)動(dòng)事件、視頻片段接入 Scrypted統(tǒng)一納入 Scrypted 的智能家居視頻體系提供模板可導(dǎo)出/生成 Frigate 側(cè)的rebroadcast轉(zhuǎn)播配置方便在 Frigate 中配置流重播。對(duì)于已經(jīng)把大量攝像頭接入 Scrypted、又想疊加 Frigate 本地檢測(cè)能力的用戶這個(gè)插件是典型的生態(tài)互操作方案。攝像頭配置自動(dòng)發(fā)現(xiàn)StrixStrix 解決的是 Frigate 上手階段最頭疼的問題——我的攝像頭流地址到底是什么。它的能力包括自動(dòng)探測(cè)IP 相機(jī)的可用流 URL對(duì)相機(jī)測(cè)試成千上萬種 URL 模式支持沒有 RTSP 或 ONVIF 協(xié)議的相機(jī)直接生成開箱即用的 Frigate 配置相機(jī)流地址、探測(cè)參數(shù)等官方宣稱覆蓋6.7 萬 相機(jī)型號(hào)、3600 品牌。對(duì)剛接觸 Frigate、被廠商私有協(xié)議和畸形流地址困擾的新用戶這類配置生成器可以大幅縮短部署時(shí)間。11 個(gè)擴(kuò)展一覽擴(kuò)展類別核心集成點(diǎn)適用場(chǎng)景Advanced Camera Card儀表盤Home Assistant 卡片 REST/MQTTHA 用戶直接在 Lovelace 中看監(jiān)控cctvQL查詢/自動(dòng)化REST API MQTT自然語(yǔ)言問昨晚發(fā)生了什么、異常檢測(cè)Double Take人臉識(shí)別REST APIsub_label 打標(biāo)識(shí)別誰(shuí)出現(xiàn)在鏡頭前并自動(dòng)標(biāo)注Frigate Notify通知REST/MQTTMQTT 可選獨(dú)立 Frigate 的多平臺(tái)通知Frigate Notify Alert通知MQTT Telegram 媒體組Telegram 照片視頻組、區(qū)域過濾、暫停按鈕Frigate telegram通知Telegram輕量文本視頻縮略圖推送Frigate Snap-Sync備份同步snapshot / review 事件快照與審查片段上傳到遠(yuǎn)程服務(wù)器kiosk-monitor展示終端Frigate 儀表盤 Birdseye樹莓派看板、異常自動(dòng)恢復(fù)Periscope展示終端Frigate 實(shí)時(shí)流舊 Android 設(shè)備變監(jiān)控屏含 Android TVScrypted Frigate Bridge生態(tài)橋接detections/motion/clip 接入 Scrypted與 Scrypted 視頻體系互操作Strix配置工具攝像頭流探測(cè) 配置生成快速獲得可用的 Frigate 相機(jī)配置接入前的安全與選型提示官方文檔在列出這些項(xiàng)目時(shí)特意給出了兩條重要提醒這里必須原樣強(qiáng)調(diào)本文檔以及本文不對(duì)任何擴(kuò)展進(jìn)行推薦或評(píng)級(jí)。每個(gè)項(xiàng)目的代碼質(zhì)量、維護(hù)活躍度、權(quán)限模型各不相同安裝到系統(tǒng)前請(qǐng)用自己的知識(shí)充分評(píng)估與審查審代碼、看 issue、確認(rèn)是否開源可審計(jì)。擴(kuò)展清單不是窮盡的社區(qū)可以通過向 Frigate 文檔提交 PR 持續(xù)擴(kuò)充——這意味著生態(tài)仍在演進(jìn)也意味著流行不代表安全。在安全層面結(jié)合前文的機(jī)制分析可以給出幾條通用原則內(nèi)部端口 5000 的免認(rèn)證特性只應(yīng)存在于可信網(wǎng)絡(luò)內(nèi)如 docker 內(nèi)網(wǎng)。該信任模型依賴 nginx 設(shè)置的x-server-port頭frigate/api/auth.py若把 5000 端口直接暴露到公網(wǎng)等于把 admin 權(quán)限拱手讓人必須避免需要外部訪問的擴(kuò)展應(yīng)通過外部端口 8971 走完整認(rèn)證JWT/密碼或自行架設(shè)帶鑒權(quán)的反向代理使用 MQTT 時(shí)建議為 Frigate 配置獨(dú)立的 broker 賬號(hào)與topic_prefix并限制訂閱/發(fā)布權(quán)限避免擴(kuò)展程序獲得過大的控制面如frigate/camera/ptz這類控制主題對(duì)自動(dòng)同步、自動(dòng)上傳類擴(kuò)展如 Snap-Sync確認(rèn)傳輸加密與目標(biāo)端權(quán)限隔離后再啟用。小結(jié)Frigate 之所以能長(zhǎng)出這樣一片第三方生態(tài)根源在于其雙重開放接口以 5000 端口內(nèi)部 API 為代表、覆蓋事件/審查/媒體/統(tǒng)計(jì)的完整 REST 面以及以frigate/為前綴、貫穿檢測(cè)、事件、審查、狀態(tài)的 MQTT 總線。11 個(gè)擴(kuò)展分別落在通知、人臉識(shí)別、自然語(yǔ)言查詢、展示終端、媒體備份與生態(tài)橋接等不同象限幾乎覆蓋了家庭 NVR 的全部周邊需求。如果你準(zhǔn)備動(dòng)手接入建議的探索路徑是先用 docs/static/frigate-api.yaml 了解 API 全貌再閱讀 docs/docs/integrations/api.md 與 docs/docs/integrations/mqtt.md 掌握調(diào)用細(xì)節(jié)最后對(duì)照上表挑選符合你場(chǎng)景的擴(kuò)展——并在安裝前完成對(duì)它的獨(dú)立安全審查?!久赓M(fèi)下載鏈接】frigateNVR with realtime local object detection for IP cameras項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fr/frigate創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考