poly000客栈

Frigate + NVIDIA 显卡笔记本的部署

软件前置

sudo pacman -Syu docker docker-compose nvidia-container-toolkit
sudo systemctl enable --now docker
# 确保 docker0 已经被代理或已设置好连接代理

硬件要求

该方案相比于之前的丐版方案,需要更新的硬件才能解决种种兼容或性能问题。

笔者测试的环境:

-`
                  .o+`
                 `ooo/
                `+oooo:
               `+oooooo:                 poly@mokurin-arch 
               -+oooooo+:                ----------------- 
             `/:-:++oooo+:               OS: Arch Linux x86_64 
            `/++++/+++++++:              Host: Dell G15 5520 
           `/++++++++++++++:             Kernel: 6.15.2-arch1-1 
          `/+++ooooooooooooo/`           Uptime: 22 hours, 2 mins 
         ./ooosssso++osssssso+`          Packages: 2766 (pacman), 8 (flatpak) 
        .oossssso-````/ossssss+`         Shell: zsh 5.9 
       -osssssso.      :ssssssso.        Resolution: 1920x1080 
      :osssssss/        osssso+++.       DE: Plasma 6.3.5 
     /ossssssss/        +ssssooo/-       WM: kwin 
   `/ossssso+/:-        -:/+osssso+-     Theme: Materia [GTK2/3] 
  `+sso+:-`                 `.-/+oso:    Icons: breeze-dark [GTK2/3] 
 `++:.                           `-/+/   Terminal: vscode 
 .`                                 `/   CPU: 12th Gen Intel i7-12700H (20) @ 4.600GHz 
                                         GPU: Intel Alder Lake-P GT2 [Iris Xe Graphics] 
                                         GPU: NVIDIA GeForce RTX 3060 Mobile / Max-Q 
                                         Memory: -- MiB / 15669MiB

使用的文件

  • init.sh
mkdir -p config storage
mkdir -p config/model_cache/jinaai/jina-clip-v1
# btrfs 改善 sqlite 的性能
chattr -R +C config storage
cp --reflink=auto config.yaml config/
cp --reflink=auto yolo_nas_s.onnx config/

# optional, useless semantic search
# cp --reflink=auto *_fp16.onnx config/model_cache/jinaai/jina-clip-v1/

docker-compose up -d
  • yolo_nas_s.onnx

该文件由于禁止分发转换模型,建议使用 colab 运行获取。

  • docker-compose.yml

-tensorrt 只有用N卡加速才需要,AMD / Intel 卡不需要。

services:
  frigate:
    container_name: frigate
    restart: unless-stopped
    stop_grace_period: 30s
    image: ghcr.io/blakeblackshear/frigate:stable-tensorrt
    volumes:
      - ./config:/config
      - ./storage:/media/frigate
      - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "8971:8971"
      - "8554:8554" # RTSP feeds
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]
  • config.yaml

此处以乐橙为例子。大多摄像头可以在 iSpy 的文档找到需要的链接。

顺便一提,乐橙摄像头要求 WIFI 密码必须是字母加数字,否则不可能连接成功。

frigate 在这方面的文档出奇的烂。你需要综合翻阅 完整参考配置 和小节甚至 issues 。

version: 0.15-1
# 关闭 mqtt 消息队列
mqtt:
  enabled: false
# 关闭 TLS 连接(端口不变)
tls:
  enabled: false
# 关闭网页验证
auth:
  # 如果启用,admin密码会在首次启动时输出到日志。
  # 错过了没关系,看 `docker-compose logs` 输出。
  enabled: false 

ffmpeg:
  # 如果遇到 hardware capacity xxxx 问题,
  # 可以通过官方工具设置使用 HAVC 编码传输。
  hwaccel_args: preset-nvidia
  # IMOU 的摄像头rtsp流,udp传输时很容易丢包、重复包、断流。
  input_args: -rtsp_transport tcp


# 保留录制历史,1天的全部视频和30天的警告/识别片段。
record:
  enabled: true
  retain:
    days: 1
    mode: all
  alerts:
    retain:
      days: 30
      mode: motion
  detections:
    retain:
      days: 30
      mode: motion

cameras:
  backyard:
    enabled: true
    ffmpeg:
      inputs:
        - path: 
            # 此处 PASSWORD 和乐橙 app 中设置的一致。
            # CAMIP 即为你的摄像头绑定的 ip 地址。
            rtsp://admin:PASSWORD@CAMIP:554/cam/realmonitor?channel=1&subtype=0
          roles:
            - detect
    detect:
      enabled: true
    # 上下左右。请勿尝试通过 onvif 启用 autotracking ,乐橙这种情况会死机。
    onvif:
      host: CAMIP
      port: 80
      user: admin
      password: PASSWORD


    motion:
      # mask掉乐橙的时间戳区域。
      mask: 0.015,0.041,0.268,0.041,0.267,0.086,0.014,0.089
      threshold: 40 # 减少树叶抖动导致的不必要 detect。
      contour_area: 10
      improve_contrast: true

# 注意:部分旧版显卡可能会遇到 onnxruntime 不支持对应 kernel 版本的问题
# 如果有 Intel CPU 可以考虑 OpenVINO - CPU 运行。
detectors:
  onnx:
    type: onnx

# 此处识别高宽和之前 ipynb 运行时设置一致。
model:
  model_type: yolonas
  width: 320 # <--- should match whatever was set in notebook
  height: 320 # <--- should match whatever was set in notebook
  input_pixel_format: bgr
  input_tensor: nchw
  path: /config/yolo_nas_s.onnx
  labelmap_path: /labelmap/coco-80.txt

如何彻底关闭服务

docker-compose down

如何通过命令行重启服务 (不推荐)

docker-compose stop
sleep 2
docker-compose start
Copyright © 2025 poly000 Views