リアルタイムエッジアラート用AI銃器検出ソリューション
このプロジェクトは教育およびデモンストレーション目的のみで提供されています。
実際の環境に展開する場合は、地域の規制に準拠し、実行前に必要な認可を取得してください。
概要
Frigate + Node-RED銃器検出ソリューションは、ライブカメラストリームで銃器を検出し、アラート、レビュー、統合を調整するエッジAIビデオ分析スタックです。AI Boxes、NVIDIA Jetsonシリーズ、reComputer R2000でのプライバシー保護、低遅延展開向けに構築され、最適化された検出エンジン(Frigate)とビジュアル自動化レイヤー(Node‑RED)、オプションのLLM支援レビューを組み合わせています。

完全なAI NVR1体験を提供します:
- ライブRTSP/HTTPストリームから銃器をリアルタイムで検出。
- イベントアラート、ログ記録、通知を自動化。
- プライバシー、低遅延、信頼性を確保するためにローカルで動作。
デバイスがSeeedのバンドルからのものでない場合や、独自のセットアップに合わせてカスタマイズしたい場合は、このガイドに従ってソリューションを展開してください。
| キャンパス安全管理 |
|---|
![]() |
機能
従来のNVRは人間による監視に依存しており、遅く、一貫性がなく、スケールが困難です。このソリューションは、即座の価値を提供する測定可能な成果に焦点を当てることで、これらの課題に対処します。
より高速な応答時間
自動アラートとリアルタイムダッシュボードで即座の状況認識を実現し、手動監視の遅延を回避します。
より少ない誤検出
オプションのLLM支援検証を活用してアラートをインテリジェントにレビューし、誤報を大幅に削減してオペレーターの注意を集中させます。
データ主権とプライバシー
すべての推論とデータ処理はクラウド依存なしにオンプレミスで実行され、完全なデータプライバシーと制御を確保します。
スケーラブルなマルチストリームサポート
JetsonとHailoプラットフォームの強力なハードウェアデコーディングを活用して、パフォーマンス低下なしに複数のカメラストリームを同時に監視します。
システムアーキテクチャ
ソリューションは連携して動作するいくつかの主要モジュールで構成されています:
- Frigateはライブビデオを処理し、MQTTを介して検出イベントを公開します。
- Node-REDはこれらのイベントを購読し、アラートワークフローを調整し、ダッシュボードを更新します。
- リアルタイムダッシュボードはビジュアル監視、イベントレビュー、システム設定を提供します。
- Webhooksは通知とデータエクスポートのためのサードパーティシステムとの統合を可能にします。
展開ガイド
前提条件
- AI Boxes/エッジハードウェア: reComputer J3011/J4012(Jetson Nano/Xavier/Orinシリーズ)。
- ネットワークカメラ: 同じネットワーク上でアクセス可能なRTSP/HTTPストリーム。
- Docker、Node-RED、Frigate設定の基本的な知識。
このページでは、**reComputer J4012(Jetson Orin™ NX 16GB)**をサンプルプラットフォームとして使用します。ただし、他のサポートされているハードウェアでも手順は同様です。
ステップ1:Frigateのインストール
まだインストールされていない場合は、以下のコマンドを実行してcurlをインストールしてください:
sudo apt update && sudo apt install -y curl
⚠️ sudo apt upgradeは実行しないでください。Jetson固有の依存関係が破損する可能性があります。
事前設定されたワンクリックインストールスクリプトを使用して、JetsonデバイスにFrigateを自動的に展開します。
curl -sSL https://raw.githubusercontent.com/Seeed-Studio/frigate-on-jetson/main/install.sh | bash
インストールが完了したら、ブラウザを開いてhttp://<your_jetson_ip>:5000にアクセスし、Frigate Web UIにアクセスしてカメラを設定してください。
動作しない場合は、sudoなしでDockerを実行する権限が不足していないか確認してください。トラブルシューティング手順についてはFAQセクションを参照してください。その後、上記のコマンドを再実行してください。
NodeREDでは、FrigateのMQTTトピックを購読して検出イベントを受信し、アラートワークフローを調整します。利用可能なトピックとペイロードの詳細については、Frigate MQTTドキュメントを参照してください。
ステップ2:Node-REDセットアップ
プログラミングを処理するオーケストレーションレイヤーとしてNodeREDを使用します。
Node-REDインストール
まだNode-REDをインストールしていない場合は、以下の手順に従ってJetsonデバイスにセットアップしてください。
以下のコマンドでNode-REDをコンテナで実行します:
sudo docker run -d --restart=always -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
コンテナが起動したら、ブラウザを開いてhttp://<your_jetson_ip>:1880にアクセスし、Node-REDエディターにアクセスしてください。

ノードインストール
開始する前に、Node-REDエディターの "Manage palette" オプションから以下のNode-REDノードをインストールしてください:
node-red-dashboardシンプルなフロントエンドダッシュボードを構築するため。

アプリケーション
キャンパス、交通ハブ、工業団地、公共施設などの環境において、運営者は銃器リスクに対する即座の対応が必要です。このソリューションは以下の用途に設計されています:
キャンパス・教育機関
セキュリティチームへのプロアクティブなアラートを可能にし、ログされたイベントデータとスナップショットによる迅速なインシデント確認を促進します。
公共交通ハブ
駅全体にマルチカメラ監視を展開し、webhookを介してセキュリティオペレーションセンター(SOC)に直接アラートを統合します。
工業団地・物流
疲労や注意散漫のない自動監視により、境界、アクセスポイント、機密エリアを保護します。
以下のサンプルデモでは、ソリューションの展開とカスタマイズのプロセスをガイドします。
デモ1 — 銃器検出アラート
このデモでは、MQTTを介してFrigateからの銃器検出イベントをリッスンし、ダッシュボードとwebhook通知の両方でリアルタイムアラートをトリガーするNode-REDフローの構築方法を示します。
データパイプライン
Frigate(銃器検出)→ MQTT(発行)→ Node-RED(フィルタ/アラート)→ ダッシュボード + Webhook

Node-REDフローセットアップ
提供されたフロー設定ファイル(gist flow.json)を使用して、サンプルフローをNode-REDエディタに直接インポートできます。
注意: フロー内のIPアドレスとwebhook URLを、お使いのFrigateインスタンスと通知エンドポイントに合わせて更新してください。
ダッシュボードエントリパスは/frigateとして設定されています。
ダッシュボードには以下でアクセスできます:http://<your_jetson_ip>:1880/dashboard/frigate
例:http://192.168.101.100:1880/dashboard/frigate
フロー概要
- MQTTリスナー – 指定されたトピック(例:frigate/reviews)を購読して検出イベントを受信します。
- イベントフィルタ – "gun"とラベル付けされたイベントのみを通します。
- アラートビルダー – サムネイル、タイムスタンプ、カウンターを含む詳細なアラートメッセージを構築します。
- ダッシュボード更新 – 最新の画像、イベント履歴、検出カウンターでダッシュボードを更新します。
- Webhook通知 – Telegramボット、Slack、カスタムAPIなどの外部エンドポイントにHTTP POSTリクエストを送信します。
結果
このフローを設定すると、Node-REDはFrigateの銃器検出イベントに自動的に応答し、ダッシュボードを更新して即座にwebhook通知を送信します。
検出パラメータの設定手順については、Frigate設定セクションに進んでください。
デフォルトFrigate設定
http://<your_jetson_ip>:5000/configでFrigate設定ページに素早くナビゲートして、現在のセットアップを確認できます。
Frigateはconfig.ymlというYAMLファイルを使用して実行方法を定義します。
このファイルは、カメラストリームの場所、使用するAIモデル、MQTT経由で検出結果を送信する方法をFrigateに指示します。
これを調整することで、オブジェクトの検出、記録、表示方法を制御できます。
ストレージ場所
デフォルトでは、Frigateはビデオ録画とスナップショットをJetsonデバイスの/media/frigateに保存します。
例:
seeed@desktop:/$ docker exec -it frigate /bin/sh
root@274103ae951b:/opt/frigate# cd /media/frigate/
root@274103ae951b:/media/frigate# ls
clips exports handgun.mp4 machinegun.mov recordings
ビデオを長期間保持する予定がある場合は、Jetsonの内部ストレージが満杯になるのを防ぐため、このディレクトリを外部SSDまたはネットワークドライブにマウントしてください。
カメラ設定
Frigateでは、各カメラをcameras:セクションで定義する必要があります。
各カメラブロックは、ビデオストリームの取得元と、検出モデルによる分析前のデコード方法を記述します。
cameras:
handgun:
enabled: true
ffmpeg:
hwaccel_args: preset-jetson-h264
inputs:
- path: /media/frigate/handgun.mp4
input_args: -stream_loop -1 -re
roles:
- detect
machinegun:
enabled: true
ffmpeg:
hwaccel_args: preset-jetson-h264
inputs:
- path: /media/frigate/machinegun.mov
input_args: -stream_loop -1 -re
roles:
- detect
説明:
enabled:このカメラを有効または無効にします。ffmpeg:FrigateがFFmpegを使用してビデオストリームを読み取りデコードする方法を定義します。- FFmpegは、ファイル、RTSPカメラ、その他のソースからビデオを変換・ストリーミングするメディアフレームワークです。
hwaccel_args:ハードウェアアクセラレーション(例:JetsonでのH.264デコード)を有効にします。inputs:1つ以上のビデオ入力をリストします。path:実際のビデオソース。- この例では、
/media/frigate/handgun.mp4のようなローカルデモファイルです。 - 実際の展開では、
path: rtsp://user:[email protected]:554/stream1のようなライブカメラストリームに置き換えることができます。
- この例では、
input_args:追加のFFmpegパラメータ。-stream_loop -1はデモビデオを無限にループします。-reは再生がリアルタイム速度に合うことを保証します。
roles:この入力の使用方法を定義します。detectはストリームがオブジェクト検出に使用されることを意味します。- その他の可能な役割には、録画用の
recordやストリーミング用のrtmpがあります。
各カメラは複数の入力を持つことができます — 例えば、検出用に1つ、高品質録画用に別の1つなど。 Frigateは、定義されたすべてのソースに対してFFmpegを通じてデコードとフレーム抽出を自動的に管理します。
AIモデルと検出設定
カメラを定義した後、次のステップはFrigateにどのAIモデルを使用し、各ビデオフレームをどのように処理するかを指示することです。 このセクションでは、検出器タイプ、モデルファイルパス、フレームサイズ、オブジェクト追跡、閾値などの検出動作を定義します。
detectors:
tensorrt:
type: tensorrt
device: 0
model:
path: /config/model_cache/tensorrt/yolov4-tiny-288_gun_v3.trt
width: 288
height: 288
labelmap_path: /config/guns.txt
input_tensor: nchw
input_pixel_format: rgb
説明:
detectors:Frigateが推論に使用するAIバックエンドを定義します。type:tensorrtはFrigateにNVIDIA TensorRTアクセラレーション(Jetson用に最適化)を使用するよう指示します。device:GPU インデックスを指定します。ほとんどのJetsonデバイスでは0を使用します。
model:AIモデルファイルを指し、その入力形式を記述します。path:.trt(TensorRTエンジン)ファイルへのパス。width/ height:モデルの入力解像度(モデルが期待するものと一致する必要があります)。labelmap_path:クラスインデックスをラベルにマップするファイル、例:guns.txt → "gun"を含む。input_tensor:テンソルレイアウトを定義;nchw = バッチ、チャンネル、高さ、幅。input_pixel_format:ピクセル形式を指定、通常はrgb。
TensorRTモデルは、高速GPU推論用に最適化された訓練済みネットワークのコンパイル版です。 新しいモデルを訓練する場合は、このファイルを独自のモデルに置き換えることができます — 幅、高さ、ラベルが一致することを確認してください。
オブジェクト追跡設定
Frigateは特定のタイプのオブジェクトを検出・追跡できます。 このプロジェクトでは銃器のみを追跡し、システムを効率的で集中的に保ちます。
objects:
track:
- gun
filters:
gun:
threshold: 0.3
説明:
track: 検出・追跡するオブジェクトのリスト。- ここでは "gun" のみですが、モデルがサポートしている場合は他のラベル(例:person、car など)を追加できます。
filters: 各オブジェクトタイプの検出信頼度を微調整します。threshold: 最小信頼度値(0.0–1.0)。- 低い値(0.3 など)はより敏感ですが、誤検出を含む可能性があります。
- 高い値(0.5 など)は検出をより厳格にします。
誤検出が多すぎる場合は、閾値を 0.5 以上に上げてみてください。 見逃されがちな小さなオブジェクトについては、少し下げることもできますが、精度とノイズのバランスを取ってください。
録画設定
Frigate がオブジェクトを検出すると、さらなる分析やアラート表示のためにビデオを録画し、スナップショットを保存できます。 これらの設定は、録画の保存期間と、キャプチャされた画像に表示される情報を制御します。
record:
enabled: true
retain:
days: 3
mode: all
説明:
enabled: ビデオ録画を有効にします。retain: 録画ファイルの保存期間と保存される映像のタイプを制御します。days: 自動削除前に録画を保持する日数。mode:all– 連続録画(テスト用に便利)。motion– モーションが検出された時のみ録画。events– 追跡されたオブジェクト(例:銃)が現れた時のみ録画。
実際のデプロイメントでは、mode: events または mode: motion を使用して、有用な録画を保持しながらストレージ容量を節約してください。
スナップショット設定
snapshots:
enabled: true
clean_copy: true
timestamp: true
bounding_box: true
crop: false
retain:
default: 14
quality: 95
説明:
enabled: 検出イベント発生時のスナップショット保存を有効にします。clean_copy: 検出ボックスなしの追加バージョンを保存します。timestamp: スナップショットに時刻と日付のオーバーレイを追加します。bounding_box: 検出されたオブジェクトの周りにボックスを描画します。crop: true の場合、検出エリアのクロップ部分のみを保存します。retain.default: スナップショットを保持する日数。quality: 画像品質を設定(1–100)。高い値 = より良い詳細だがファイルサイズが大きくなります。
スナップショットは、ビデオクリップよりもはるかに小さく、webhook や MQTT 経由で送信しやすいため、アラートやダッシュボードに最適です。
Birdseye ビュー
Frigate は Birdseye ビューもサポートしており、複数のカメラフィードを一緒に表示して素早く概要を確認できます。
birdseye:
enabled: true
mode: objects
説明:
enabled: Birdseye 複合ビューを有効にします。mode:objects– 現在オブジェクトが検出されているカメラのみを表示。continuous– 常にすべてのカメラフィードを表示。
MQTT 設定
Frigate は MQTT を通じて検出イベントを通信し、Node-RED、Home Assistant、またはカスタムダッシュボードなどの他のサービスが、オブジェクトが検出されるたびにリアルタイム更新を受信できるようにします。 また、システムパフォーマンスの監視と検出問題のデバッグに役立つログオプションも提供します。
mqtt:
enabled: true
host: 172.17.0.1
port: 1883
説明:
enabled: MQTT 通信を有効にします。host: MQTT ブローカーの IP アドレス。- Jetson で Docker を使用する場合、
172.17.0.1は通常ホストマシンを指します。 - 別のデバイスで実行している場合は、実際の MQTT サーバー IP に置き換えてください。
- Jetson で Docker を使用する場合、
port: デフォルトの MQTT ポート、通常は 1883。
より高度な MQTT 設定については、Frigate MQTT ドキュメントを参照してください。
MQTT を有効にすることで、Frigate はリアルタイムイベントネットワークの一部となり、銃検出アラートを Node-RED や Home Assistant に直接送信し、ダッシュボード、通知、またはカスタムワークフローをトリガーできます。
パフォーマンス & サイジング
| ハードウェアプラットフォーム | モデル | FPS(合計) | 安定ストリーム(≥15 FPS) | 備考 |
|---|---|---|---|---|
| reComputer R2000 (Raspberry Pi + Hailo-8) | YOLOv11-s | 30 | 2 | コンパクト AI NVR;効率的な低電力エッジデバイス |
| reComputer J3011 (Jetson Orin Nano 8 GB) | YOLOv4-tiny-288 | 90 | 6 | エントリーレベル Jetson;ウォームアップ後に FPS が安定 |
| reComputer J4012 (Jetson Orin NX 16 GB) | YOLOv4-tiny-288 | 120 | 8 | NVDEC 同時実行制限に到達;計算余力は残存 |
リソース & 次のステップ
- ソリューションバンドル: Frigate + Node-RED Gun Detection on Jetson
- Frigate ドキュメント: https://docs.frigate.video/
- GitHub リポジトリ: Seeed-Studio / frigate-on-jetson
- Node-RED ダッシュボードアドオン: @flowfuse/node-red-dashboard
FAQ
1. Jetson デバイスに Docker をインストールできません。どうすればよいですか?
デフォルトの Docker インストールスクリプトで問題が発生した場合は、以下の代替スクリプトを使用できます:
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
詳細については、https://linuxmirrors.cn をご覧ください。
2. Jetpack バージョンを確認するには?
Jetson デバイスで以下のコマンドを実行してください:
dpkg -l | grep nvidia-jetpack
出力にインストールされている Jetpack バージョンが表示されます。
3. Jetpack バージョンを更新するには?
特定の製品 wiki の手順に従ってください。
4. Docker 実行時の "Permission Denied" エラー
Docker デーモンにアクセスする権限がありません。 以下を実行してください:
sudo usermod -aG docker $USER
newgrp docker
ログアウトして再度ログインすることで、新しいグループ権限も適用されます。
その後、確認してください:
docker ps
Footnotes
-
AI NVRは高度な機械学習モデルを活用してリアルタイムの洞察と自動化機能を提供しますが、従来のNVRは主にビデオ映像の録画と保存に焦点を当てています。 ` ↩
