Frigateで防犯カメラをローカル録画・AI検知する:ミニPCのIntel iGPUを使うCoralなし構成

Photo: Atypeek Dgn / Pexels
先に結論です。N100 クラスのミニPCなら、Coral(Google の AI アクセラレータ)を買わなくても、内蔵の Intel iGPU で Frigate の人物・車検知を動かせる とされています。やることは 3 つで、検知は OpenVINO を device: GPU で動かす/映像のデコードは VAAPI に任せる/カメラは「検知用の低画質」と「録画用の高画質」の 2 本に分ける です。これで CPU の負担をかなり抑えられます。
Coralなしで足りる理由と、向いている台数
Frigate は、映像の中で動きがあった部分だけを AI モデルに渡して「人」「車」「犬」などを判定する NVR(ネットワークビデオレコーダー)です。以前は Coral を挿すのが定番でしたが、今は Intel の iGPU で動く OpenVINO 検知器が公式に用意されています。
公式ドキュメントの推奨ハードウェアの表では、N100 で既定モデル(MobileNetV2)の推論時間が 約 15ms とされています。検知は 1 カメラあたり毎秒 5 コマが推奨なので、計算上は家庭で使う 2〜4 台程度なら余裕がある水準です。ただし N100 で動かせる検知器は 1 つまでとされているため、台数を大きく増やす予定があるなら上位の CPU を検討してください。
なお、OpenVINO は第 6 世代以降の Intel CPU(iGPU つき)が対象とされています。Celeron J4105 のような古い世代は対象外という回答が開発者から出ているので、中古ミニPCを流用する場合は世代を確認してから進めます。
これから用意するなら、N100 搭載ミニPC(メモリ 16GB) に、録画用として 監視カメラ向け HDD(WD Purple など) を組み合わせるのが扱いやすい構成です。録画は書き込みが 24 時間続くので、システム用 SSD とは分けておくと安心です。
Docker Composeで立てる
services:
frigate:
image: ghcr.io/blakeblackshear/frigate:stable
container_name: frigate
restart: unless-stopped
shm_size: "512mb"
devices:
- /dev/dri/renderD128:/dev/dri/renderD128 # iGPU を渡す
volumes:
- /etc/localtime:/etc/localtime:ro
- ./config:/config
- /mnt/hdd/frigate:/media/frigate # 録画の保存先(HDD)
- type: tmpfs
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "8971:8971" # 管理画面(ログインあり)
- "8554:8554" # RTSP 再配信
- "8555:8555/tcp"
- "8555:8555/udp"
ポイントは 3 つです。
/dev/dri/renderD128を渡す:これがないと iGPU を使えず、デコードも検知も CPU に落ちますshm_sizeを増やす:Docker の既定は 64MB で、公式では 720p 検知のカメラ 2 台で約 210MB が目安とされています。カメラが増えたら上げます。足りないとBus errorで落ちることがあります- 管理画面は 8971 番:ログイン付きの画面です。初回起動時のログに管理者のパスワードが表示されるので、
docker logs frigateで確認します
検知とデコードをiGPUに向ける設定
./config/config.yml に次を書きます。
detectors:
ov:
type: openvino
device: GPU # 書かないと CPU で動く
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
ffmpeg:
hwaccel_args: preset-vaapi
一番多い失敗は device: GPU の書き忘れ です。Frigate は既定では OpenVINO を CPU で動かすとされていて、設定が正しく見えても CPU 使用率が高いままになります。既定モデルはイメージに同梱されているので、別途ダウンロードは不要です。
デコードの preset-vaapi は、第 8〜12 世代の Intel(N100 も含む)で推奨とされています。第 13 世代以降や Arc では preset-intel-qsv-h264 系が推奨で、ログに Failed to download frame: -5 が出るときは VAAPI と QSV を入れ替えて試すのが公式の案内です。
カメラは2ストリームに分けて登録する
検知に高画質の映像を使うと、デコードの負担が一気に増えます。多くのネットワークカメラは高画質と低画質の 2 本を同時に出せるので、低画質を検知(detect)、高画質を録画(record) に割り当てます。
例として、TP-Link の Tapo シリーズは stream1 が高画質、stream2 が低画質とされています。RTSP 用のアカウントは Tapo アプリの中で別に作る必要があります。RTSP 対応のネットワークカメラ(Tapo C210 など)
cameras:
entrance:
ffmpeg:
inputs:
- path: rtsp://user:[email protected]:554/stream1
roles: [record]
- path: rtsp://user:[email protected]:554/stream2
roles: [detect]
detect:
fps: 5
objects:
track: [person, car]
record:
enabled: true
continuous:
days: 3
alerts:
retain:
days: 14
detections:
retain:
days: 14
録画は enabled: true だけでは何も残らない 点に注意してください。常時録画・検知時の録画のどれを何日残すかを書いて初めて保存されます。録画まわりの書き方は版によって変わってきているので、うまく保存されないときは使っている版の公式ドキュメントで確認します。
カメラ側は、Frigate とスマホアプリの両方から高画質を同時に見ると接続が切れる機種があります。映像が途切れるときは、同時に見ている端末の数も疑ってみてください。
まとめ
- N100 クラスの Intel iGPU なら、Coral なしでも家庭の 2〜4 台程度の検知は回る水準とされている
- Compose では
/dev/dri/renderD128を渡し、shm_sizeをカメラ台数に合わせて増やす - 検知は OpenVINO を
device: GPUで、デコードは N100 ならpreset-vaapiで iGPU に向ける - カメラは低画質を detect、高画質を record に分け、録画の保存日数は明示的に書く
運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート


