Frigate NVR on Ubuntu — AI物体検知付き防犯カメラ録画サーバー構築

セルフホスト

この記事のポイント

  • Frigate NVR(バージョン 0.17.1)は Docker 1コマンドで Ubuntu 上に立ち上がり、IPカメラの映像をローカルで AI 物体検知しながら録画できます
  • デフォルトの SSD 検知モデルは 91 クラス(COCO ラベルマップ)に対応し、人物・車両・自転車などを自動認識します
  • 設定ファイル(config.yml)で RTSP カメラを追加するだけで、クラウドサービスなしにローカル防犯カメラシステムが完成します
  • 本記事は Ubuntu 24.04 LTS 上の Docker で Frigate を実際に起動し、WebUI の画面を実撮影して確認しています

「防犯カメラを設置したいけど、映像をクラウドに送りたくない」「月額課金なしでAI検知を使いたい」――そんなニーズに応えるのが Frigate NVR(Network Video Recorder)です。

Frigate は、RTSPカメラの映像ストリームをローカルで受け取り、TFLite(TensorFlow Lite)ベースのAIモデルでリアルタイムに物体を検知、イベント録画や通知を自動化するオープンソースのNVRです。映像はすべて自分のサーバーに保管され、外部に送信されません。

本記事では Ubuntu 24.04 LTS 環境に Docker を使って Frigate をインストールし、WebUI を実際に動かした画面をお見せします。RTSP カメラがなくても設定ファイルの作り方は変わらないので、まず環境を作って理解してから実機カメラを接続するという進め方でも問題ありません。

動作確認済み環境

Ubuntu 24.04.4 LTS (Noble Numbat)・Docker Engine 29.1.3・Frigate 0.17.1-416a9b7
※ Coral TPU・NVIDIA GPU なしの純 CPU 構成で検証しています。GPU を積んだ環境ではより高速な検知が可能です。

目次

  1. Frigate NVR とは何ができるのか
  2. Docker のインストール(Ubuntu 24.04)
  3. Frigate のセットアップ
  4. WebUI に初回アクセスする
  5. カメラを追加する(config.yml)
  6. 検知イベントと録画を確認する
  7. よくあるエラーと解決策
  8. まとめ

Frigate NVR とは何ができるのか

Frigate は Home Assistant エコシステムから生まれたセルフホスト型 NVR で、以下の特徴を持ちます。

  • ローカル完結のAI物体検知:TFLite + COCO SSD モデルが映像フレームをリアルタイム解析。person・car・bicycle など 91 クラスを認識できます
  • イベント録画:検知イベントの前後 5 秒を自動保存。常時録画も設定で有効化できます
  • WebUI:ブラウザからカメラ映像・イベント一覧・設定ファイル編集が可能
  • Google Coral / GPU 対応:CPU 検知器のほか、Coral USB アクセラレータや NVIDIA GPU による高速推論が可能
Frigate NVR システム構成フロー(IPカメラ → go2rtc → OpenCV/TFLite → WebUI)
Frigate NVR システム構成フロー(IPカメラ → go2rtc → OpenCV/TFLite → WebUI)

実際に Docker コンテナ内を確認したところ、以下のコンポーネントで動作していることがわかりました。

Frigate 0.17.1 コンポーネントバージョン一覧(実測: docker exec で取得)
Frigate 0.17.1 コンポーネントバージョン一覧(実測: docker exec で取得)

Docker のインストール(Ubuntu 24.04)

Frigate は Docker イメージで配布されているため、まず Docker Engine を Ubuntu に入れます。

手順1:システムを更新してリポジトリ依存を入れる




ubuntu@server: ~
$ sudo apt update && sudo apt upgrade -y
Hit:1 http://jp.archive.ubuntu.com/ubuntu noble InRelease

$ sudo apt install -y ca-certificates curl
Reading package lists… Done
The following NEW packages will be installed:
ca-certificates curl
curl 8.5.0-2ubuntu10.9 がインストールされます(Ubuntu 24.04 実測)

手順2:Docker の公式 GPG キーを追加してリポジトリを登録する




ubuntu@server: ~
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
$ echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo “$VERSION_CODENAME”) stable” \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

手順3:Docker Engine をインストールする




ubuntu@server: ~
$ sudo apt update
$ sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
Reading package lists… Done

$ docker –version
Docker version 29.1.3, build …
$ sudo usermod -aG docker $USER
(再ログイン後、sudo なしで docker コマンドが使えるようになります)

注意

sudo usermod -aG docker $USER を実行した後は、一度ログアウトして再接続しないと反映されません。VPS の場合は SSH を切断して再接続してください。

Frigate のセットアップ

Docker が動いたら、Frigate 用のディレクトリと設定ファイルを作ります。

手順1:ディレクトリを作成する




ubuntu@server: ~
$ mkdir -p ~/frigate/{config,storage}
$ cd ~/frigate
$ ls
config storage

手順2:最小構成の config.yml を作成する

Frigate は起動時に /config/config.yml を必ず読みます。まずはカメラなし・MQTT なしの最小構成で動作を確認しましょう。




ubuntu@server: ~/frigate
$ cat > config/config.yml << ‘EOF’
mqtt:
enabled: false

cameras: {}
EOF
$ cat config/config.yml
mqtt:
enabled: false

cameras: {}

手順3:docker-compose.yml を作成する

Frigate は --shm-size(共有メモリ)が必要で、カメラ 1 台あたり約 114 MiB を使います。まず 64 MiB で起動確認します。




ubuntu@server: ~/frigate
$ cat > docker-compose.yml << ‘EOF’
version: “3.9”
services:
frigate:
container_name: frigate
privileged: true
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: “128mb”
volumes:
– ./config:/config
– ./storage:/media/frigate
– /etc/localtime:/etc/localtime:ro
ports:
– “5000:5000”
environment:
FRIGATE_RTSP_PASSWORD: “yourpassword”
EOF

手順4:Frigate を起動する




ubuntu@server: ~/frigate
$ docker compose up -d
[+] Running 1/1
✔ Container frigate Started
$ docker compose logs -f
frigate | [INFO] Starting NGINX…
frigate | [INFO] No TLS certificate found. Generating a self signed certificate…
frigate | [INFO] Preparing Frigate…
(30〜60秒ほどで「Frigate is running」と表示されます)

起動確認はバージョン API で行えます。




ubuntu@server: ~/frigate
$ curl -s http://localhost:5000/api/version
0.17.1-416a9b7

WebUI に初回アクセスする

ブラウザで http://<サーバーIP>:5000 にアクセスします。Frigate 0.17.1 から認証が有効化されているため、初回ログイン画面が表示されます。

Frigate WebUI ダッシュボード(ghcr.io/blakeblackshear/frigate:stable、Playwright実撮影)
Frigate WebUI ダッシュボード(ghcr.io/blakeblackshear/frigate:stable、Playwright実撮影)

ログイン後はカメラ一覧(Cameras)が表示されます。最小構成ではカメラが 0 台のため空ですが、WebUI 自体は正常に動作しています。

Frigate カメラ一覧画面(カメラ未設定の状態、Playwright実撮影)
Frigate カメラ一覧画面(カメラ未設定の状態、Playwright実撮影)

注意:初期パスワードの設定

初回ログイン時は admin アカウントのパスワードを自分で設定します。コンテナログ(docker compose logs frigate)に初期認証情報が表示されますので確認してください。

カメラを追加する(config.yml)

RTSPカメラを追加するには config/config.yml を編集します。Frigate の WebUI から直接 YAML を編集することもできます。

Frigate 設定エディタ画面(YAML を WebUI 上で直接編集できる、Playwright実撮影)
Frigate 設定エディタ画面(YAML を WebUI 上で直接編集できる、Playwright実撮影)

①カメラを config.yml に追加する

以下は玄関カメラ(front_door)を追加する例です。rtsp:// の URL は実際のカメラの RTSP ストリームアドレスに置き換えてください。




ubuntu@server: ~/frigate
$ nano config/config.yml
mqtt:
  enabled: false

cameras:
  front_door:          # カメラの識別名(任意)
    ffmpeg:
      inputs:
        - path: rtsp://192.168.1.100:554/stream
          roles:
            - detect    # 物体検知用ストリーム
            - record    # 録画用ストリーム
    detect:
      enabled: true
      width: 1280
      height: 720
      fps: 5           # 検知フレームレート(5fps で十分)
    record:
      enabled: true
      retain:
        days: 7        # イベント録画を 7 日保持
    snapshots:
      enabled: true    # 検知時にスナップショットを保存

設定を保存したらコンテナを再起動します。




ubuntu@server: ~/frigate
$ docker compose restart frigate
[+] Restarting 1/1
✔ Container frigate Started

②検知対象のオブジェクトを変更する

デフォルトでは person(人物)のみを追跡します。API で確認すると以下のようになっています。




ubuntu@server: ~/frigate
$ curl -s http://localhost:5000/api/config | python3 -c “import json,sys; c=json.load(sys.stdin); print(‘track:’, c[‘objects’][‘track’])”
track: [‘person’]

車両や犬なども検知したい場合は config.ymlobjects セクションに追加します。

objects:
  track:
    - person
    - car
    - dog
    - bicycle
Frigate AI検知モデル・リソース情報(91クラス SSD モデル、実測)
Frigate AI検知モデル・リソース情報(91クラス SSD モデル、実測)

検知イベントと録画を確認する

カメラが接続され物体が検知されると、WebUI の「Events」画面にイベントが積み上がっていきます。クリップ映像・スナップショット画像もここから確認できます。

Frigate イベント一覧画面(検知イベントのサムネイルとタイムスタンプが並ぶ、Playwright実撮影)
Frigate イベント一覧画面(検知イベントのサムネイルとタイムスタンプが並ぶ、Playwright実撮影)

起動直後のリソース使用量は 約 524 MiB(CPU 使用率 0.6%)でした。カメラを追加するとメモリ使用量は増えますが、1〜2 台程度なら 1 GB RAM のサーバーでも動作します。

Birdseye(全カメラ統合ビュー)について

  • Frigate には複数カメラの映像を 1 画面に合成する Birdseye 機能があります
  • デフォルトは mode: objects(検知イベントがあるカメラのみ表示)
  • http://<IP>:5000/birdseye でアクセスできます
  • 解像度は 1280×720、MPEG-1 ストリームで WebUI に配信されます

よくあるエラーと解決策

①「/dev/shm: No space left on device」が出る

共有メモリが不足しています。docker-compose.ymlshm_size を増やしてください。カメラ 1 台あたり最低 114 MiB 必要です。

shm_size: "256mb"   # カメラ 2 台なら 256mb 以上に

②カメラ映像が「Failed to connect」になる

RTSP の URL が間違っているか、ファイアウォールがポートを塞いでいます。まず ffmpeg で直接接続テストをします。




ubuntu@server: ~
$ docker run –rm linuxserver/ffmpeg \
-rtsp_transport tcp -i rtsp://192.168.1.100:554/stream \
-frames:v 1 /tmp/test.jpg

frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 …
(エラーなく frame が取れれば URL は正しい)

③「Address already in use: 5000」が出てコンテナが起動しない

ポート 5000 が別のプロセスに使われています。空きポートに変更します。

ports:
  - "5001:5000"   # ホスト側を 5001 に変更

④WebUI にアクセスできない(VPS の場合)

UFW ファイアウォールがポートを塞いでいる可能性があります。




ubuntu@server: ~
$ sudo ufw allow 5000/tcp
Rule added
$ sudo ufw status
Status: active
5000/tcp ALLOW Anywhere

セキュリティの注意

Frigate の WebUI をインターネットに直接公開するのは推奨しません。自宅ネットワーク内(LAN)でのみ使うか、Tailscale や WireGuard などの VPN 越しにアクセスする構成が安全です。

まとめ

今回は Ubuntu 24.04 LTS + Docker で Frigate NVR 0.17.1 を構築し、WebUI を実際に動かして確認しました。

  • Frigate は Docker 1コマンドで起動でき、config.yml でカメラを追加するだけで AI 防犯カメラシステムが完成します
  • デフォルトの CPU 検知器でも 91 クラスの物体を認識でき、推論速度は約 10 ms/フレームです
  • 起動直後のメモリ使用量は約 524 MiB。1 GB RAM の VPS でも動作します
  • 映像データはすべてローカルに保存され、クラウドに送信されません
  • Google Coral や NVIDIA GPU を追加するとリアルタイム検知性能が大きく向上します

VPS でサーバーを動かしたい方は、Vultr の東京リージョンを使うと国内から遅延なくアクセスできます。まず 1 GB RAM の最安プランで試してみてください。

Frigate と合わせて Home Assistant を連携させると、検知イベントをトリガーにスマートホームの自動化(照明点灯・スマートフォン通知など)が可能になります。興味のある方はも参考にしてみてください。

コメント

タイトルとURLをコピーしました