找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 1|回覆: 0

    Frigate 實戰:硬體需求、設定檔、以及怎麼減少誤報

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    Frigate 是本地影像辨識的主流方案。
    但它也是最容易設定錯、最吃資源的服務之一。

    這篇講實際的數字和設定。



    硬體需求:實際數字

    沒有 TPU 的情況


    • 一路 640×480 @ 5fps 的物件偵測,大概吃掉一個現代 CPU 核心
    • 三台攝影機 → 三個核心,CPU 會長時間高負載
    • 不建議,會很熱而且影響其他服務


    有 Google Coral TPU 的情況


    • TPU 負責推論,CPU 只負責解碼影像
    • 一顆 USB Coral 可以撐十幾路(依解析度和 fps)
    • CPU 使用率大幅下降


    用 Intel 內顯(QSV)做硬體解碼


    • 解碼交給 GPU,CPU 再省一大截
    • 需要 Intel 第六代以上的 CPU
    • 群暉的部分機型支援


    我的建議配置


    • 1-2 台攝影機 → 一般 x86 CPU(四核以上)就能撐,不用 TPU
    • 3 台以上一定要 TPU
    • NVR 主機用 N100 / N305 之類的低功耗 CPU —— 有內顯可以硬解,很省電


    記憶體:Frigate 本身不太吃,但要注意 /tmp/cache

    Frigate 用記憶體當快取存錄影片段,預設 1GB。
    攝影機多的話要調大:
    1. services:
    2.   frigate:
    3.     shm_size: "512mb"        # 共享記憶體,攝影機多要調大
    4.     tmpfs:
    5.       - /tmp/cache:size=2g   # 錄影快取
    複製代碼

    shm_size 不夠的話症狀是攝影機一直斷線重連
    而且日誌會出現 Unable to write to /dev/shm

    計算公式(官方建議)
    1. shm_size = (解析度寬 × 高 × 1.5 × 9 + 270480) / 1048576 MB
    2. 每台攝影機算一次,加總起來,最少 128MB
    複製代碼

    完整的 docker-compose
    1. services:
    2.   frigate:
    3.     image: ghcr.io/blakeblackshear/frigate:stable
    4.     container_name: frigate
    5.     restart: unless-stopped
    6.     privileged: true          # Coral TPU 需要
    7.     shm_size: "512mb"
    8.     devices:
    9.       - /dev/bus/usb:/dev/bus/usb        # USB Coral
    10.       - /dev/dri/renderD128:/dev/dri/renderD128   # Intel 硬解
    11.     volumes:
    12.       - /etc/localtime:/etc/localtime:ro
    13.       - /volume1/docker/frigate/config:/config
    14.       - /volume1/docker/frigate/media:/media/frigate
    15.       - type: tmpfs
    16.         target: /tmp/cache
    17.         tmpfs:
    18.           size: 2000000000
    19.     ports:
    20.       - "5000:5000"
    21.       - "8554:8554"     # RTSP 重新串流
    22.       - "8555:8555/tcp" # WebRTC
    23.       - "8555:8555/udp"
    24.     environment:
    25.       - FRIGATE_RTSP_PASSWORD_FILE=/run/secrets/rtsp_pw
    26.       - TZ=Asia/Taipei
    27.     secrets:
    28.       - rtsp_pw
    29. secrets:
    30.   rtsp_pw:
    31.     file: ./secrets/rtsp_pw.txt
    複製代碼



    設定檔:最重要的觀念是「雙串流」

    多數 IP 攝影機有兩條 RTSP 串流:


    • 主串流:2K/4K 高畫質 → 用來錄影
    • 子串流:640×480 左右 → 用來偵測


    用主串流做偵測是最常見的錯誤
    CPU 會爆掉而且完全沒有好處(偵測不需要高解析度)。
    1. mqtt:
    2.   host: 192.168.1.20
    3.   port: 1883
    4.   user: frigate
    5.   password: "{FRIGATE_MQTT_PASSWORD}"
    6. detectors:
    7.   coral:
    8.     type: edgetpu
    9.     device: usb
    10. ffmpeg:
    11.   hwaccel_args: preset-vaapi     # Intel 硬體解碼
    12. # 全域預設,個別攝影機可以覆蓋
    13. detect:
    14.   width: 640
    15.   height: 480
    16.   fps: 5
    17. record:
    18.   enabled: true
    19.   retain:
    20.     days: 3
    21.     mode: motion          # 只留有動靜的片段
    22.   alerts:
    23.     retain:
    24.       days: 30
    25.   detections:
    26.     retain:
    27.       days: 14
    28. snapshots:
    29.   enabled: true
    30.   bounding_box: true
    31.   retain:
    32.     default: 14
    33. objects:
    34.   track:
    35.     - person
    36.     - car
    37.     - dog
    38.     - cat
    39. cameras:
    40.   front_door:
    41.     ffmpeg:
    42.       inputs:
    43.         - path: rtsp://user:pass@192.168.30.11:554/Streaming/Channels/101
    44.           roles: [record]
    45.         - path: rtsp://user:pass@192.168.30.11:554/Streaming/Channels/102
    46.           roles: [detect]
    47.     detect:
    48.       width: 640
    49.       height: 360
    50.       fps: 5
    51.     # 只偵測這些區域(重點!)
    52.     motion:
    53.       mask:
    54.         - 0,0,0.25,0,0.25,0.15,0,0.15     # 遮掉時間戳
    55.       threshold: 25
    56.       contour_area: 30
    57.     zones:
    58.       車道:
    59.         coordinates: 0.1,0.9,0.5,0.6,0.9,0.7,0.9,1,0.1,1
    60.         objects:
    61.           - person
    62.           - car
    63.       門口:
    64.         coordinates: 0.3,0.4,0.7,0.4,0.7,0.8,0.3,0.8
    65.         objects:
    66.           - person
    67.     objects:
    68.       filters:
    69.         person:
    70.           min_area: 3000
    71.           max_area: 100000
    72.           threshold: 0.75
    73.         car:
    74.           min_area: 15000
    75.           threshold: 0.7
    76.     review:
    77.       alerts:
    78.         required_zones:
    79.           - 門口
    複製代碼



    減少誤報的六個方法(按效果排序)

    1. 設定 motion mask(動作遮罩)

    這是效果最大的一個。

    遮掉會一直變動但你不在意的區域:


    • 時間戳記(一直在變)
    • 馬路(車子一直經過)
    • 會晃的樹
    • 鄰居的窗戶
    • 天空(雲會動)


    怎麼畫:Frigate 的網頁介面 → 那台攝影機 → Debug → Mask & Zone creator
    用滑鼠畫,然後複製產生的座標貼進設定檔。

    2. 設定 zones(區域)並用 required_zones

    motion mask 是「不看這裡」,zone 是「只有這裡的物件才算數」。
    1.     review:
    2.       alerts:
    3.         required_zones:
    4.           - 門口
    複製代碼

    有人從畫面邊緣走過不會觸發,走進門口才會。

    3. 調整 min_area

    物件太小的話多半是誤判(或者太遠不重要)。
    1.         person:
    2.           min_area: 3000      # 像素面積
    複製代碼

    怎麼決定數字:在 Debug 畫面看實際偵測到的框,
    Frigate 會顯示面積。取一個「你在意的最小人物」的面積再打八折。

    4. 調整 threshold(信心度門檻)
    1.         person:
    2.           threshold: 0.75     # 0-1,越高越嚴格
    複製代碼


    • 太低 → 影子、衣架、盆栽都被當成人
    • 太高 → 真的有人也抓不到
    • 0.7-0.8 是常見的甜蜜點


    5. 用 object mask 遮掉固定的誤判

    有些地方會固定產生誤判(例如某個雕像一直被當成人)。
    1.     objects:
    2.       filters:
    3.         person:
    4.           mask:
    5.             - 0.6,0.3,0.75,0.3,0.75,0.5,0.6,0.5
    複製代碼

    6. 改善夜間畫面

    夜間誤報通常比白天多很多,原因:


    • 紅外線畫面是黑白的,對比低
    • 飛蟲貼近鏡頭會變成一大塊白影
    • 雨滴反光


    對策


    • 裝一盞燈 —— 有彩色畫面的話辨識率會好很多
    • 攝影機不要裝在有蟲的地方(燈下面、水邊)
    • 夜間提高 threshold(Frigate 目前不能分時段設,但可以在 HA 端過濾)


    接進 HA

    Frigate 有官方的 HA 整合(透過 HACS 安裝)。

    裝了之後會有:


    • camera 實體 —— 即時畫面
    • binary_sensor —— 每個 zone 和物件類型的偵測狀態
    • sensor —— 偵測次數統計
    • switch —— 開關偵測、錄影、快照


    實用的自動化
    1. alias: 有人在門口
    2. triggers:
    3.   - trigger: mqtt
    4.     topic: frigate/events
    5. actions:
    6.   - condition: template
    7.     value_template: >
    8.       {{ trigger.payload_json['type'] == 'new'
    9.          and trigger.payload_json['after']['label'] == 'person'
    10.          and '門口' in trigger.payload_json['after']['entered_zones'] }}
    11.   - variables:
    12.       id: "{{ trigger.payload_json['after']['id'] }}"
    13.   - action: notify.mobile_app_charles
    14.     data:
    15.       title: 門口有人
    16.       message: >
    17.         {{ trigger.payload_json['after']['camera'] }}
    18.         偵測到人(信心度
    19.         {{ (trigger.payload_json['after']['top_score'] * 100) | round(0) }}%)
    20.       data:
    21.         image: "/api/frigate/notifications/{{ id }}/snapshot.jpg"
    22.         tag: "frigate-{{ id }}"
    23.         actions:
    24.           - action: URI
    25.             title: 看即時畫面
    26.             uri: /lovelace/cameras
    27. mode: parallel
    28. max: 10
    複製代碼

    通知帶圖片是 Frigate 最有價值的功能之一 ——
    你不用打開 App 就知道是誰。

    儲存空間規劃

    粗估:


    • 1080p @ 15fps,H.264 → 大約 1.5-2 GB / 天 / 台(連續錄影)
    • mode: motion 只錄有動靜的 → 可以省 60-80%
    • mode: active_objects → 省更多,但可能漏掉東西


    三台攝影機、保留 7 天、motion 模式 → 大約 100-150 GB。

    用機械硬碟就好(錄影是連續寫入,SSD 會加速耗損)。

    ---

    最後一個建議:不要一開始就追求完美。

    我的順序是:


    • 先讓一台攝影機能看、能錄
    • 跑一週,看誤報有多少
    • 根據實際誤報調 mask 和 zone
    • 滿意了再加第二台


    一口氣設三台然後一起調,你會分不清是哪個設定造成什麼影響。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 11:32 , Processed in 0.078756 second(s), 24 queries .

    快速回覆 返回頂部 返回列表