Frigate NVR
Proxmox で QNAP の NVR の代わりとして導入しました
良い点
- rtsp proxy が含まれている (go2rtc)
- 別に導入すれば良い話だが知らなかったので助かった
- 動画のストリームを一つしか出力できないカメラで特に助かった
- UI が軽い
- PCのパワーがダンチなのでそれはそう
- object detection により録画イベントが厳選された
- ノイズが大幅に減った
困った点
外部トリガーの機能不足 (1)
QNAP ではカメラ側の探知で ftp でアクセスを行い、それをトリガーとして遡って録画できたが、難しい
既存の仕組みの組み合わせで言えば、30秒バッファリングして rtsp ストリームを送り、イベントはリアルタイムにすれば遡って録画はできるが・・・、ダッシュボードなど色々面倒になる
演算コストは必要になるが、高性能な object detection をそのまま使うこととした
外部トリガーの機能不足 (2)
QNAP では特定カメラのモーション探知をソースとして、複数チャネルを録画できたが、これも難しそうだった
色々試したのだが、例えば探知用の仮想ストリームを作ってそれから探知させたりしていたが、ダッシュボードではタイミングにより探知用の軽量ストリームを使用していて破綻した
結果的に、定期的に object detection の対象となったタイムスパンの motion detection フラグを立てるスクリプトを実行し、保持期間を強制的に伸ばした
消費電力の上昇
motion 探知用に複数チャネルを CPU でデコードし、CPU で object detection を回しているため、それなりに負荷がかかる (9700X で 5%〜10%)
Intel の CPU であれば iGPU を利用して効率化が図れるらしいが、AMD ではあまり実績がないようで、試していない
object detection に関しては外部 TPU (Coral, Hailo8) を使えばかなり良くなるような記事を多くみたが、どちらも、かなり過去のプロダクトで、購入するのがもったいなく…
NVidia GPU は消費電力がおそらくすごいので試してすらいない
奇妙なカメラの存在
ストリームを一つしか受け付けなく二つ目で 503 を返したり、複数の解像度のエンドポイントがありつつも、最後のエンドポイントの解像度でしか送れない(最後に接続したエンドポイントの解像度に変更される)、など
これは Frigate の制限だと思うが、record 用の rtsp と detect 用の rtsp を準備して、detect 用は常時デコードすることが前提となっており、detect に使わないカメラでも常時デコード用のストリームを一つ用意する必要がある(record 用と同じでも良いが解像度が高い分コストがかかる)
detect 用に ffmpeg でIフレーム以外捨てたり、解像度を落としたものを record とは別に rtsp で再配信するようにした
総合的に
良かった(こなみ
なんだかんだで計測しながら色々試せたのが楽しかった。
なんだかんだ言って Coral TPU 試したいので、どこかで買うかも