
チュートリアル
Twelve LabsとNVIDIA VSSを使用した、職場の安全コンプライアンス・アプリケーションの構築

ネイサン・チェ
このチュートリアルでは、微調整されたYOLOモデルを使用してライブのCCTV(防犯カメラ)映像をセグメント化する「職場安全コンプライアンス・アプリケーション」の構築方法を詳しく説明します。Twelve LabsのMarengoおよびPegasusを搭載したNVIDIA VSSを活用してOSHA(労働安全衛生局)のコンプライアンス・レポートや効率改善のための推奨事項を生成し、さらにリアルタイムの職場安全に関する問い合わせに対応するAIチャットボットを統合します。
このチュートリアルでは、微調整されたYOLOモデルを使用してライブのCCTV(防犯カメラ)映像をセグメント化する「職場安全コンプライアンス・アプリケーション」の構築方法を詳しく説明します。Twelve LabsのMarengoおよびPegasusを搭載したNVIDIA VSSを活用してOSHA(労働安全衛生局)のコンプライアンス・レポートや効率改善のための推奨事項を生成し、さらにリアルタイムの職場安全に関する問い合わせに対応するAIチャットボットを統合します。

この記事の内容
No headings found on page
ニュースレターに登録する
ニュースレターに登録する
ビデオ理解に関する最新の技術進歩、チュートリアル、業界の動向をお届けします
ビデオ理解に関する最新の技術進歩、チュートリアル、業界の動向をお届けします
AIを活用してビデオを検索、分析、探索します。
2025/10/31
15分
記事へのリンクをコピー
このチュートリアルでは、工場や建設現場などの様々な職場にある既存の監視カメラ(CCTV)を監視する、ビデオインテリジェンスプラットフォームを構築する方法を学びます。これにより、従業員の危険な行動や機械の不具合、労働安全衛生(OSHA)基準違反、そして業務効率の課題をニアリアルタイムで検出できるようになります。さらに、最新の TwelveLabs と NVIDIA VSS のインテグレーションについても学び、NVIDIA ハードウェアおよびソリューション向けに構築された膨大なビデオデータを効率的に分析・要約する方法を解説します。
はじめに
現場の監視カメラが完全に自律化し、24時間365日の稼働を通じてセキュリティリスクだけでなく、労働安全衛生基準の違反、業務効率の課題、リスク評価に関する詳細なレポートを自動生成するようになったとしたらどうでしょうか? 📃

まるで魔法のように聞こえるかもしれませんが、これは先日の NVIDIA GTC DC 2025 カンファレンス のために、TwelveLabs のビデオインテリジェンスモデルがコンピュータによる非構造化データの理解をどのように変えるかを実証するために構築したものです。さらに素晴らしいことに、当社のモデルは NVIDIA Video Search and Summarization (VSS) などの既存の NVIDIA フレームワークやハードウェアと直接連携できます。
この記事では、ステップバイステップのガイドに沿ってアプリケーションをデプロイするだけでなく、リアルタイムのビデオインテリジェンスプラットフォームを実現する高度な技術アーキテクチャについても学びます。具体的には、ライブ配信映像を以下のような構成に変えるプラットフォームを構築します。
OSHA 準拠レポート: 具体的な規制や罰金情報などの参照情報を伴うレポートを自動生成します。
「ムダ」削減の提案: リーンマネジメントをサポートし、職場の生産性を最適化するために設計されています。
対話型チャットボット: 管理者が作業環境に関する詳細な質問を送信すると、ウェブ調達の情報や推奨アクションを含むフィードバックを瞬時に受け取れます。
動的なイベントタイムライン: どのようなインシデントがいつ発生したかを効率的に特定できます。
コンテキスト重視の AI アクション: 非効率な動作、コンプライアンス上の懸念、そして見過ごされがちな些細なインシデントを際立たせるため、ビデオのタイムスタンプや座標に合わせて配置された AI 生成ボタンです。
※ 注意: ここで紹介するコンセプトやテクノロジーは、一般的な職場に留まらず広く応用可能です。お客様の業界で TwelveLabs がどのように貢献できるか詳しく知りたい方は、本ブログの「職場を超えた活用事例(Beyond The Workplace)」セクションをぜひご覧ください。
デモアプリの紹介
コード作成を始める前に、今回構築するシステムを体験いただくため、以下のデモ動画や実際にデプロイされたアプリケーションを確認してみましょう。

ご自身でテストしてください: NVIDIA VSS + Twelve Labs 製造業オートメーション!
GitHub: nathanchess/twelvelabs-nvidia-vss-sample
それでは、さっそく進めていきましょう! 😊
学習目標
このチュートリアルでは、以下を学習します:
個人用保護具(PPE)を分類するため、15,000枚以上の画像を用いて、YOLO(You Only Look Once)物体検出アルゴリズムで独自のコンピュータビジョンモデルをファインチューニングします。
実際の監視カメラをシミュレートするために、FFmpeg を使用して MP4 ファイルをライブの RTSP(Real Time Streaming Protocol)ストリームに変換します。
TwelveLabs を NVIDIA VSS および AWS に直接接続、統合する方法を学びます。
思考の連鎖(Chain-of-thought)などの高度なプロンプトエンジニアリング技術を理解します。
ビデオの分割アップロードやライブストリーム処理を行う非同期 API 運用のための Docker コンテナをビルド・実行します。
前提条件
Python 3.8+: Download Python | Python.org
TwelveLabs API キー: Authentication | TwelveLabs
TwelveLabs インデックス: Python SDK | TwelveLabs
AWS アクセスキー: Credentials - Boto3 1.40.12 ドキュメント
Docker のインストール: Install | Docker Docs
Python、API、および JavaScript に関する中級程度の理解。
ローカル環境のセットアップ
1 - お手元のローカル環境にリポジトリを複製します。
>> git2 - NVIDIA VSS フレームワーク(TwelveLabs 統合対応版)をローカルに複製します。
>> git3 - AWS コンソールに移動し、「nvidia-vss-source」という名前の新しい S3 バケットを作成します。
詳細なチュートリアルはこちら: Amazon Simple Storage Service で汎用バケットを作成する
このバケットが、擬似的な監視カメラ映像のストレージとして機能します!
4 - frontend フォルダと rtsp-stream-worker フォルダの中にある環境変数を設定します。
TWELVE_LABS_API_KEY=... NEXT_PUBLIC_TWELVELABS_MARENGO_INDEX_ID=... NEXT_PUBLIC_TWELVELABS_PEGASUS_INDEX_ID=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_RTSP_STREAM_WORKER_URL="http://localhost:8000" NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
TWELVE_LABS_API_KEY=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
5 - rtsp-stream-worker と NVIDIA VSS の両方の Docker コンテナをビルド・起動します。
RTSP Stream Worker のガイド: twelvelabs-nvidia-vss-sample/rtsp-stream-worker at main · nathanchess/twelvelabs-nvidia-vss-sample
NVIDIA VSS のガイド: nvidia-vss/src/vss-engine/src/models/twelve_labs at main · james-le-twelve-labs/nvidia-vss
6 - npm (Node Package Manager) を使ってフロントエンドの開発アプリケーションを起動します。
コマンドラインから GitHub リポジトリ内の frontend フォルダに移動し、以下を入力します:
>> npm |
その後、localhost:3000 に移動してサイトにアクセスします。
※ npm がインストールされているかあらかじめご確認ください: Node.js と npm のダウロードとインストール | npm Docs
CV(コンピュータビジョン)パイプラインの構築
では、無限に配信されているライブのストリーミング映像に対して、どのようにしてニアリアルタイムの処理を実現したのでしょうか?
💡学習のポイント: ライブストリームの処理は、帯域幅の制限や接続の不安定さといった難しさがあるだけでなく、コストもかかります!
簡単な数値を使って試算してみましょう。TwelveLabs のマルチモーダルモデル「Marengo」を例にします。丸1日(24時間)の動画コンテンツをインデックスに処理する場合、いくらコストがかかるでしょうか? Marengo: ($0.042/分 + $0.0015/分) * 1440分 = $60.48
防犯や監視目的のカメラが何台もある施設など、1日にカメラ1台あたり$60.48ものランニングコストは、非常に大きな負担になり現実的ではありません。 ※ コスト計算の詳細は TwelveLabs 料金計算ツールを使って簡単に行えます: https://www.twelvelabs.io/pricing-calculator |
では、このコスト面の課題をどう回避すればよいでしょうか?答えは、動画の分割(チャンキング)と前処理にあります!もちろん用途や要件によって制限は異なると思いますが、今回は例として、個人用保護具(PPE:安全ベストやヘルメット)検出のために YOLO モデルをファインチューニングしました。結果は以下の通りです:

上の画像では、様々な背景、角度、光の条件下でモデルが正しくヘルメットなどを特定しているのが分かります。15,000枚以上の豊富なデータセットを準備し、角度や色などにバリエーションを持たせるためのデータ拡張(Augmentation)を行った結果、一般的な PPE アイテム(ベスト、ヘルメット、手袋、靴など)の識別において90%以上の精度を達成できました。

💡学習のポイント: 本記事の趣旨からは少し外れますが、トレーニングスクリプトを表示して最初から独自にモデルを構築してみたい場合には、リポジトリの /cv_model にある README ファイルをぜひ参照してください: https://github.com/nathanchess/twelvelabs-nvidia-vss-sample/tree/main/cv_model
この判定ロジックを動画の切り出しやコスト削減の判断に使う仕組みは以下の通りです:
/rtsp-stream-worker/main.py(357行目〜391行目)
def analyze_video(self, video_source: str): people_count, ppe_count = 0, 0 results = self.model.predict(frame, conf=0.25, iou=0.45, max_det=1000) processed_frame = self._draw_boxes(frame, results) for box in results[0].boxes: class_id = int(box.cls[0]) class_name = self.model.model.names[class_id] if class_name == "Person": people_count += 1 else: ppe_count += 1 # Write frame to output video video_writer.write(processed_frame) video_capture.release() video_writer.release() return new_video_source else: raise FileNotFoundError(f"Video file not found: {video_source}")
上記のコードブロックでは、現場で見つかった「人物」と「保護服などを着用している人の数」を集計しています。このカウント状況を利用して、現場のニーズに最適化したカスタムの切り出し(チャンキング)アルゴリズムを適用できます。具体的には、着用漏れが検知されたような異常な区間(注視すべき部分の動画)のみを TwelveLabs のマルチモーダル解析サーバーに送ることで、丸1日ぶんの映像のアップロードを、実質的にわずか数分ないし数十秒程度の非常に低レベルな処理負荷に留めることができます。
環境の違いに応じた以下のような運用例が考えられます:
食品メーカーの製造現場: 全てのスタッフがビニール手袋を装着していることを必須とする。
医療従事施設: 特定のエリアに出入りする人物にマスクと手袋の装着を徹底させる。
建築、建設現場: ヘルメットや安全ベストなどの一式装着を検証する。
このカスタマイズ性により、分析精度を高い水準に維持したまま、コスト効率の優れた独自の監視プラットフォームを運用できるようになります。
※ 注記: これを一から構築する作業は難しく思えるかもしれませんが、後述の「NVIDIA VSS との連携」セクションでは、NVIDIA VSS フレームワークに内蔵された動画切り出し機能を活用するための手順を紹介します。
RTSP(Real-Time Streaming Protocol)を用いた擬似カメラ配信の作成
これで、動画前処理や利用料金の抑制に繋がる切り出しアルゴリズムの仕組みは整いました。それでは、シミュレーションするための肝心の動画ストリームに関してはどのように準備すればよいでしょう?
少し調べるだけでも、実際の工場や職場のオープンな防犯ストリーミング映像を見つけるのは困難であることに気づくはずです。そこで、Python を使って自分たちで模擬配信を行う仕組みを準備します。
💡学習のポイント: 擬似的なIPカメラの配信環境を作るためには何が必要でしょうか?
実現場で用いられる本格的なネットワークカメラを安全にシミュレーションするためには、取得、エンコード、映像配信(ブロードキャスト)のそれぞれのフェーズを担当する役割が必要です。今回の検証システムは主に以下の4つのパートで設計されています。
|
各要素が全体の構成の中でどのように連携しているか、下の技術アーキテクチャ図で確認してみましょう:

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
このバックエンドサービスはモノリシック構成(全体で1つのシステム)として設計されており、今回はすべての動作環境を1枚の AWS Deep Learning AMI EC2 インスタンス上で稼働させています。各要素技術についてシンプルに説明します。
AWS S3 バケット: 擬似監視用の元データ(動画ファイル)を一時的に保存しておく保管庫です。S3 上に MP4 ファイルを格納しておきます。
FFmpeg: 仮想配信用カメラの心臓部にあたるコマンドラインベースの超強力ツールです。主に以下のタスクを担います:
S3 から対象の .mp4 ファイルを取得します。
その動画に対してストリーミングのループ指定
-stream_loop -1を追加し、流し続けます。最も重要な仕事として、動画をリアルタイムで RTSP (Real-Time Streaming Protocol) にトランスコード(形式変換)します。
💡学習のポイント: RTSP は防犯カメラ製品群が標準対応している映像の送受信用プロトコルです。FFmpeg を用いてこのデータ処理を行うことで、高額なプロ向け設備を設置することなく、自宅やテスト用のサーバーからローカルネットワークに向けた擬似ライブ中継環境を完全にエミュレートできます。詳細は以下を参照してください: What is an RTSP Camera? – Real Time Streaming Protocol Explained Cloud based and Central Management
MediaMTX: これは、いわば、映像データの万能翻訳機にあたるサービスです。なぜこれが必要かというと、PC やスマートフォンの「ウェブブラウザ」は、FFmpeg が出力する生の RTSP 映像の直再生を標準サポートしていないためです。非常に軽量で扱いが容易な MediaMTX は、以下の2点を行ってくれます:
FFmpeg から直接送信される RTSP 形式の入力を取得(インジェスト)します。
ほぼ遅延なしで、受信映像をウェブフレンドリーな形式へと再変換します。
本構成では HLS (HTTP Live Streaming) と呼ばれるブラウザ視聴用の規格を利用しています。MediaMTX が配信された映像を自動的に細切れの10秒単位(.ts という形式)に分割し、ブラウザ側が順番に次の破片をダウンロードしてスムーズに再生できるようにサポートする設定ファイル(.m3u8)を自動作成します。これはスマートフォンなどでもスムーズに映像を流すことができる普遍的な手法です。
ファインチューニング済み YOLO モデル: 事前に用意した部分適用アルゴリズムを使用します。FFmpeg がストリーム配信する動画を並行して受信し、検出モデルを用いてオブジェクト認識(人物や各種装備、危険行為など)を行います。
Cloudflare Tunnels (SSH): 安全にインターネット経由で配信を共有するための通信トンネルです。今回の EC2 環境はインバウンド(受信)ポートを実質すべて制限された安全な状態にしていますが、外部から安全なアクセスルートを作ることができます。
💡学習のポイント: これにより、通常であれば外に公開されているはずのない閉ざされたテスト用の HLS 映像を、ネットから再生できるようになります。Cloudflare が提供する軽量なプロキシ・エージェントである cloudflared が、ローカル(EC2)側から Cloudflare ネットワークに向けて「内側から外側へ」の安全な通信トンネル(コネクション)を張ります。パブリックなエンドポイント(例: live.myproject.com)や SSL 鍵の配置、DDoS対策などを自ら対応することなく、ネットワーク設定の変更を一切行わずに環境構築が可能です。
最終的な成果はどのようなものでしょうか?様々な動画プレイヤーで再生可能な、堅牢な HLS ライブストリームが完成します。

一時的に作成されたパブリックな Cloudflare 用の URL が、一般的な外部ツール(例: hlsplayer.net ☺️)などでも正常に再生可能になっている様子が見て取れます!すなわち HLS 用の .m3u8 構文ファイルが外部から正しく解釈され、ストリームとして正常機能している証です。
NVIDIA VSS との連携
ライブ配信システムとサーバー(AWS EC2)に導入された前処理用の CV 検出モデルが稼働し始めました。最後に仕上げとして、最もエキサイティングな要素である、動画の内容(コンテキスト)を包括的に理解し分析する「AI ビデオインテリジェンス」の部分を結合していきます。ここで NVIDIA VSS と TwelveLabs の結合プラグインが真価を発揮します。
NVIDIA VSS リポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
💡学習のポイント: 実装コードに入る前に、製品としての NVIDIA VSS が何を可能とするものであり、開発者に対してどのような開発リソース(AI Blueprints)を提供するものであるかを理解しておきましょう。
VSS は「Video Search and Summarization(ビデオ検索と要約)」の略称です。これはプログラミング専用言語や CUDA 自体とは異なり、開発者がビデオデータの把握、文字起こし、質問応答(Q&A)、要約生成などのソリューションの実装を迅速に行えるよう開発された、一種の設計図(統合パック)のようなものです。これらは以下のパーツより成り立っています:

視覚・言語モデル(VLM : Vision Language Models): 映像を目で見て意味を捉える役割を果たすコンポーネントです。各コマに含まれる状況から、詳細な記述文章(密なキャプションなど)へと翻訳・文字起こしを行います。
大規模言語モデル(LLMs : Large Language Models): VLM が書き起こした詳細な状況説明文から要約や対話回答を構成する、推論と対話のエンジンです。
RAG(Retrieval-Augmented Generation): 単に説明文章をそのまま LLM に投げるのではありません。検出された大量の情報群を「ベクトルデータベース(ないしグラフデータベース)」の中に一度インデックス化して格納します。ユーザーからの質問内容に沿った箇所をデータベースから検索して必要なコンテキストを補完して回答を生成するため、事実誤認の極めて少ない応答が可能となります。
GPU 推論アクセラレーション・インジェスト: NVIDIA 製ハードウェア性能を最大に発揮して、生ストリーム(RTSPなど)からの読み込み・デコード・処理を極めて低遅延でこなすための高効率な処理基盤を適用します。
既存の CV パイプライン連携: 従来のオブジェクト検出トラッキング(例:YOLO、NVIDIA DeepStream を用いた検知エンジン)が捕捉可能な情報(「Person 1」や「Box 5」といった識別 ID やバウンディングボックスの座標値情報)を VSS 内のテキスト変換部(VLM/LLM)の入力にフィード、マージすることによって、より正確な対象物の追跡が可能になります。
音声認識: 映像で何が起きていたかだけでなく、音声データ部から言葉(音声)をテキスト化する機能も内包されています。
NVIDIA NIMs (NVIDIA Inference Microservices): 開発者が個別に AI サーバーのセットアップやモデルの微調整を行わなくても済むように設計されています。モデル全体が最適化されコンテナ化されたサービス(NIMs)としてパッケージ化されているため、コマンド一発でシステム全体を起動できます。
これらはきわめて優秀な製品 blueprint 群ですが、それと同時に、これらすべてを自分たちの手でデプロイ、調整、および日々のシステム維持管理を行わなくてはならないという運用の難しさもあるのが事実です(VLM, LLM, RAG サーバー、および音声や CV 連携部分を独立させて自身の管理配下におかなくてはなりません)。
これを極めてシンプルに変えてくれるのが TwelveLabs が放つ連携機能です。

TwelveLabs プレイグラウンドでのインデックス検索表示 (TwelveLabs | Home)
複雑な推論データベースや文字起こしエンジンの稼働を自分たちのサーバー管理外へ逃がし、完全に管理されたクラウド API デプロイとして構築可能です。動画をアップロードして分析(CV解析、VLM、音声変換、Pegasus/Marengo を用いた推論など)を実行するすべてが簡単な API 設定に統合されます。ただ動画を送り出すだけで、欲しい要約などのインサイトデータを瞬時に引き出すことができるのです。
さらに注目したいのは、「すべてを TwelveLabs に任せる」だけのワンパターンの仕組みではないという点です。
最大の特徴はそのモジュール構成(自由な着脱性)です。個別の状況に応じて自社用サーバー群を使い分けることすらできるように設計されています。
この考え方のもと、今回のデモプログラムがどのように TwelveLabs のホスト型 API を使って実装されているか構成を見ていきましょう。

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
非常に明快です。取得された映像破片データ(クリップ)は二方向へ転送されます。
AWS S3 バケット (nvidia-vss-streams): クラウド上のコンテナに一定期間アーカイブを保管しておくことで、インシデント発生時の履歴追跡用として後から参照・活用可能なデータプールとします。
TwelveLabs プラグイン (NVIDIA VSS 側): 保存された対象クリップの特定 URL から TwelveLabs API を呼び出してデータを格納し、下記の通り処理を進めます:

専用のインデックス(保存用枠組み)セットアップ: 送信用と対話(質問回答)用のモデル、すなわち Marengo モデルおよび Pegasus モデルに最適化された格納枠を生成します。
インデックスへの書き込み・整理: 蓄積された映像メタデータが自動的に並び替えられ、検索や要約ができる受け入れ準備が完了します。TwelveLabs が内包する多様な機能の詳細は以下から確認できます: TwelveLabs | Product Overview
UI 画面上の様々な機能が、NVIDIA VSS API エンドポイントを通じて動画データの検索や分析を裏側で実行しています。実際の動作コード例を two cases 見てみましょう。
ケース 1: AI セーフティ・コンプライアンス管理ボット「Jade」
下記のスクリーンショットにおける右側のウィンドウ窓にあたります。利用チームが映像の中から知りたい情報を「自然な言葉遣い」で直感的に検索し、その場でトラブル調査を進める機能です。インシデント発生原因の特定、最適化のための意見募集、さらには現在地に基づいた関係法規(OSHA)の確認などを瞬時に引き出してアドバイスを伝えてくれます。

これは、TwelveLabs が持つ動画推論特化型モデル「Pegasus」に、前後の文脈(チャット履歴)を引き継ぐプロンプト設計を上乗せして実装されています。
/frontend/src/app/components/ClipChat.js (49行目〜72行目)
const typingId = Date.now(); setChatHistory(prev => [...prev, { role: 'assistant', text: '', date: Date.now(), typing: true, _id: typingId }]); try { const prompt = `You are Jade, an expert safety and compliance officer. Here is the chat history: ${chatHistory.map(m => `${m.role}: ${m.text}`).join('\n')}; The user asks: ${message}; The user's geolocation is unknown, please reference general safety and compliance standards. If the user asks about safety, compliance, or improvements, you should always reference the user's geolocation and the laws in that area when providing your response. Do not mention the coordinates, just the location and city. Be highly detailed and specific, by referencing specific machines, processes, and equipment you see in the video and the second. `; const resp = await fetch('/api/analysis', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ videoId, userQuery: prompt }) });
お気づきでしょうか。サーバー側で一連の動作がマネージド管理されているため、フロントエンドの実装はプロンプトの代入箇所を除けば、実質4行程度で記述可能です。
ケース 2: ワンクリックによる労働安全衛生レポート生成
ワンクリックで、直ちに社内や関係各所へ転送できるフォーマルな労働安全コンプライアンス(OSHA)報告書データを自動生成します。法令への抵触有無、予測される過料規模、即時の応急対応項目、無駄な作業領域に対する配置アドバイスなどが盛り込まれます。

/frontend/src/app/clips/[id]/page.js (328行目〜331行目)
const response = await fetch(`/api/analysis/${clipData['pegasusId']}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } })
これは TwelveLabs の「Marengo」モデルが備える独自のビデオ要約作成、キーワード抽出能力をもとに、事前の役割定義(システムロール)に基づいて要約情報を生成しています。
これですべての準備が整いました!独自のビデオインテリジェンスサーバーや GPU 環境の調整に必要なインフラ調達・保守・莫大な教育モデルの投資を一から行うことなく、NVIDIA VSS TwelveLabs 統合パッケージのおかげで、ライブ配信を解釈可能、検索可能、かつ構造化テキスト化する実用性の高いアプリケーションが構築できました 🥳。
まとめ
最後まで読んでいただき、ありがとうございました!このチュートリアルを通じて、様々なパブリック・製造現場での業務効率化を促進するニアリアルタイムの自律型監視プラットフォームを構築しただけでなく、NVIDIA VSS と最新の TwelveLabs インテグレーションが、開発プロジェクトのプロトタイプから実装・コード化への道をいかに加速させるかを理解いただけたはずです。
本デモについてのさらに詳細な内部情報は以下のリンク、リポジトリ各所から閲覧可能です:
システム構成資料・アーキテクチャ図: LucidApp
詳細技術決定書: [NVIDIA GTC] - Manufacturing Automation Technical Design
NVIDIA VSS TwelveLabs インテグレーションリポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
実装解説用デモリポジトリ: nathanchess/twelvelabs-nvidia-vss-sample
動作映像(デモ): NVIDIA VSS TwelveLabs Integration: Manufacturing Automation
このチュートリアルでは、工場や建設現場などの様々な職場にある既存の監視カメラ(CCTV)を監視する、ビデオインテリジェンスプラットフォームを構築する方法を学びます。これにより、従業員の危険な行動や機械の不具合、労働安全衛生(OSHA)基準違反、そして業務効率の課題をニアリアルタイムで検出できるようになります。さらに、最新の TwelveLabs と NVIDIA VSS のインテグレーションについても学び、NVIDIA ハードウェアおよびソリューション向けに構築された膨大なビデオデータを効率的に分析・要約する方法を解説します。
はじめに
現場の監視カメラが完全に自律化し、24時間365日の稼働を通じてセキュリティリスクだけでなく、労働安全衛生基準の違反、業務効率の課題、リスク評価に関する詳細なレポートを自動生成するようになったとしたらどうでしょうか? 📃

まるで魔法のように聞こえるかもしれませんが、これは先日の NVIDIA GTC DC 2025 カンファレンス のために、TwelveLabs のビデオインテリジェンスモデルがコンピュータによる非構造化データの理解をどのように変えるかを実証するために構築したものです。さらに素晴らしいことに、当社のモデルは NVIDIA Video Search and Summarization (VSS) などの既存の NVIDIA フレームワークやハードウェアと直接連携できます。
この記事では、ステップバイステップのガイドに沿ってアプリケーションをデプロイするだけでなく、リアルタイムのビデオインテリジェンスプラットフォームを実現する高度な技術アーキテクチャについても学びます。具体的には、ライブ配信映像を以下のような構成に変えるプラットフォームを構築します。
OSHA 準拠レポート: 具体的な規制や罰金情報などの参照情報を伴うレポートを自動生成します。
「ムダ」削減の提案: リーンマネジメントをサポートし、職場の生産性を最適化するために設計されています。
対話型チャットボット: 管理者が作業環境に関する詳細な質問を送信すると、ウェブ調達の情報や推奨アクションを含むフィードバックを瞬時に受け取れます。
動的なイベントタイムライン: どのようなインシデントがいつ発生したかを効率的に特定できます。
コンテキスト重視の AI アクション: 非効率な動作、コンプライアンス上の懸念、そして見過ごされがちな些細なインシデントを際立たせるため、ビデオのタイムスタンプや座標に合わせて配置された AI 生成ボタンです。
※ 注意: ここで紹介するコンセプトやテクノロジーは、一般的な職場に留まらず広く応用可能です。お客様の業界で TwelveLabs がどのように貢献できるか詳しく知りたい方は、本ブログの「職場を超えた活用事例(Beyond The Workplace)」セクションをぜひご覧ください。
デモアプリの紹介
コード作成を始める前に、今回構築するシステムを体験いただくため、以下のデモ動画や実際にデプロイされたアプリケーションを確認してみましょう。

ご自身でテストしてください: NVIDIA VSS + Twelve Labs 製造業オートメーション!
GitHub: nathanchess/twelvelabs-nvidia-vss-sample
それでは、さっそく進めていきましょう! 😊
学習目標
このチュートリアルでは、以下を学習します:
個人用保護具(PPE)を分類するため、15,000枚以上の画像を用いて、YOLO(You Only Look Once)物体検出アルゴリズムで独自のコンピュータビジョンモデルをファインチューニングします。
実際の監視カメラをシミュレートするために、FFmpeg を使用して MP4 ファイルをライブの RTSP(Real Time Streaming Protocol)ストリームに変換します。
TwelveLabs を NVIDIA VSS および AWS に直接接続、統合する方法を学びます。
思考の連鎖(Chain-of-thought)などの高度なプロンプトエンジニアリング技術を理解します。
ビデオの分割アップロードやライブストリーム処理を行う非同期 API 運用のための Docker コンテナをビルド・実行します。
前提条件
Python 3.8+: Download Python | Python.org
TwelveLabs API キー: Authentication | TwelveLabs
TwelveLabs インデックス: Python SDK | TwelveLabs
AWS アクセスキー: Credentials - Boto3 1.40.12 ドキュメント
Docker のインストール: Install | Docker Docs
Python、API、および JavaScript に関する中級程度の理解。
ローカル環境のセットアップ
1 - お手元のローカル環境にリポジトリを複製します。
>> git2 - NVIDIA VSS フレームワーク(TwelveLabs 統合対応版)をローカルに複製します。
>> git3 - AWS コンソールに移動し、「nvidia-vss-source」という名前の新しい S3 バケットを作成します。
詳細なチュートリアルはこちら: Amazon Simple Storage Service で汎用バケットを作成する
このバケットが、擬似的な監視カメラ映像のストレージとして機能します!
4 - frontend フォルダと rtsp-stream-worker フォルダの中にある環境変数を設定します。
TWELVE_LABS_API_KEY=... NEXT_PUBLIC_TWELVELABS_MARENGO_INDEX_ID=... NEXT_PUBLIC_TWELVELABS_PEGASUS_INDEX_ID=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_RTSP_STREAM_WORKER_URL="http://localhost:8000" NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
TWELVE_LABS_API_KEY=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
5 - rtsp-stream-worker と NVIDIA VSS の両方の Docker コンテナをビルド・起動します。
RTSP Stream Worker のガイド: twelvelabs-nvidia-vss-sample/rtsp-stream-worker at main · nathanchess/twelvelabs-nvidia-vss-sample
NVIDIA VSS のガイド: nvidia-vss/src/vss-engine/src/models/twelve_labs at main · james-le-twelve-labs/nvidia-vss
6 - npm (Node Package Manager) を使ってフロントエンドの開発アプリケーションを起動します。
コマンドラインから GitHub リポジトリ内の frontend フォルダに移動し、以下を入力します:
>> npm |
その後、localhost:3000 に移動してサイトにアクセスします。
※ npm がインストールされているかあらかじめご確認ください: Node.js と npm のダウロードとインストール | npm Docs
CV(コンピュータビジョン)パイプラインの構築
では、無限に配信されているライブのストリーミング映像に対して、どのようにしてニアリアルタイムの処理を実現したのでしょうか?
💡学習のポイント: ライブストリームの処理は、帯域幅の制限や接続の不安定さといった難しさがあるだけでなく、コストもかかります!
簡単な数値を使って試算してみましょう。TwelveLabs のマルチモーダルモデル「Marengo」を例にします。丸1日(24時間)の動画コンテンツをインデックスに処理する場合、いくらコストがかかるでしょうか? Marengo: ($0.042/分 + $0.0015/分) * 1440分 = $60.48
防犯や監視目的のカメラが何台もある施設など、1日にカメラ1台あたり$60.48ものランニングコストは、非常に大きな負担になり現実的ではありません。 ※ コスト計算の詳細は TwelveLabs 料金計算ツールを使って簡単に行えます: https://www.twelvelabs.io/pricing-calculator |
では、このコスト面の課題をどう回避すればよいでしょうか?答えは、動画の分割(チャンキング)と前処理にあります!もちろん用途や要件によって制限は異なると思いますが、今回は例として、個人用保護具(PPE:安全ベストやヘルメット)検出のために YOLO モデルをファインチューニングしました。結果は以下の通りです:

上の画像では、様々な背景、角度、光の条件下でモデルが正しくヘルメットなどを特定しているのが分かります。15,000枚以上の豊富なデータセットを準備し、角度や色などにバリエーションを持たせるためのデータ拡張(Augmentation)を行った結果、一般的な PPE アイテム(ベスト、ヘルメット、手袋、靴など)の識別において90%以上の精度を達成できました。

💡学習のポイント: 本記事の趣旨からは少し外れますが、トレーニングスクリプトを表示して最初から独自にモデルを構築してみたい場合には、リポジトリの /cv_model にある README ファイルをぜひ参照してください: https://github.com/nathanchess/twelvelabs-nvidia-vss-sample/tree/main/cv_model
この判定ロジックを動画の切り出しやコスト削減の判断に使う仕組みは以下の通りです:
/rtsp-stream-worker/main.py(357行目〜391行目)
def analyze_video(self, video_source: str): people_count, ppe_count = 0, 0 results = self.model.predict(frame, conf=0.25, iou=0.45, max_det=1000) processed_frame = self._draw_boxes(frame, results) for box in results[0].boxes: class_id = int(box.cls[0]) class_name = self.model.model.names[class_id] if class_name == "Person": people_count += 1 else: ppe_count += 1 # Write frame to output video video_writer.write(processed_frame) video_capture.release() video_writer.release() return new_video_source else: raise FileNotFoundError(f"Video file not found: {video_source}")
上記のコードブロックでは、現場で見つかった「人物」と「保護服などを着用している人の数」を集計しています。このカウント状況を利用して、現場のニーズに最適化したカスタムの切り出し(チャンキング)アルゴリズムを適用できます。具体的には、着用漏れが検知されたような異常な区間(注視すべき部分の動画)のみを TwelveLabs のマルチモーダル解析サーバーに送ることで、丸1日ぶんの映像のアップロードを、実質的にわずか数分ないし数十秒程度の非常に低レベルな処理負荷に留めることができます。
環境の違いに応じた以下のような運用例が考えられます:
食品メーカーの製造現場: 全てのスタッフがビニール手袋を装着していることを必須とする。
医療従事施設: 特定のエリアに出入りする人物にマスクと手袋の装着を徹底させる。
建築、建設現場: ヘルメットや安全ベストなどの一式装着を検証する。
このカスタマイズ性により、分析精度を高い水準に維持したまま、コスト効率の優れた独自の監視プラットフォームを運用できるようになります。
※ 注記: これを一から構築する作業は難しく思えるかもしれませんが、後述の「NVIDIA VSS との連携」セクションでは、NVIDIA VSS フレームワークに内蔵された動画切り出し機能を活用するための手順を紹介します。
RTSP(Real-Time Streaming Protocol)を用いた擬似カメラ配信の作成
これで、動画前処理や利用料金の抑制に繋がる切り出しアルゴリズムの仕組みは整いました。それでは、シミュレーションするための肝心の動画ストリームに関してはどのように準備すればよいでしょう?
少し調べるだけでも、実際の工場や職場のオープンな防犯ストリーミング映像を見つけるのは困難であることに気づくはずです。そこで、Python を使って自分たちで模擬配信を行う仕組みを準備します。
💡学習のポイント: 擬似的なIPカメラの配信環境を作るためには何が必要でしょうか?
実現場で用いられる本格的なネットワークカメラを安全にシミュレーションするためには、取得、エンコード、映像配信(ブロードキャスト)のそれぞれのフェーズを担当する役割が必要です。今回の検証システムは主に以下の4つのパートで設計されています。
|
各要素が全体の構成の中でどのように連携しているか、下の技術アーキテクチャ図で確認してみましょう:

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
このバックエンドサービスはモノリシック構成(全体で1つのシステム)として設計されており、今回はすべての動作環境を1枚の AWS Deep Learning AMI EC2 インスタンス上で稼働させています。各要素技術についてシンプルに説明します。
AWS S3 バケット: 擬似監視用の元データ(動画ファイル)を一時的に保存しておく保管庫です。S3 上に MP4 ファイルを格納しておきます。
FFmpeg: 仮想配信用カメラの心臓部にあたるコマンドラインベースの超強力ツールです。主に以下のタスクを担います:
S3 から対象の .mp4 ファイルを取得します。
その動画に対してストリーミングのループ指定
-stream_loop -1を追加し、流し続けます。最も重要な仕事として、動画をリアルタイムで RTSP (Real-Time Streaming Protocol) にトランスコード(形式変換)します。
💡学習のポイント: RTSP は防犯カメラ製品群が標準対応している映像の送受信用プロトコルです。FFmpeg を用いてこのデータ処理を行うことで、高額なプロ向け設備を設置することなく、自宅やテスト用のサーバーからローカルネットワークに向けた擬似ライブ中継環境を完全にエミュレートできます。詳細は以下を参照してください: What is an RTSP Camera? – Real Time Streaming Protocol Explained Cloud based and Central Management
MediaMTX: これは、いわば、映像データの万能翻訳機にあたるサービスです。なぜこれが必要かというと、PC やスマートフォンの「ウェブブラウザ」は、FFmpeg が出力する生の RTSP 映像の直再生を標準サポートしていないためです。非常に軽量で扱いが容易な MediaMTX は、以下の2点を行ってくれます:
FFmpeg から直接送信される RTSP 形式の入力を取得(インジェスト)します。
ほぼ遅延なしで、受信映像をウェブフレンドリーな形式へと再変換します。
本構成では HLS (HTTP Live Streaming) と呼ばれるブラウザ視聴用の規格を利用しています。MediaMTX が配信された映像を自動的に細切れの10秒単位(.ts という形式)に分割し、ブラウザ側が順番に次の破片をダウンロードしてスムーズに再生できるようにサポートする設定ファイル(.m3u8)を自動作成します。これはスマートフォンなどでもスムーズに映像を流すことができる普遍的な手法です。
ファインチューニング済み YOLO モデル: 事前に用意した部分適用アルゴリズムを使用します。FFmpeg がストリーム配信する動画を並行して受信し、検出モデルを用いてオブジェクト認識(人物や各種装備、危険行為など)を行います。
Cloudflare Tunnels (SSH): 安全にインターネット経由で配信を共有するための通信トンネルです。今回の EC2 環境はインバウンド(受信)ポートを実質すべて制限された安全な状態にしていますが、外部から安全なアクセスルートを作ることができます。
💡学習のポイント: これにより、通常であれば外に公開されているはずのない閉ざされたテスト用の HLS 映像を、ネットから再生できるようになります。Cloudflare が提供する軽量なプロキシ・エージェントである cloudflared が、ローカル(EC2)側から Cloudflare ネットワークに向けて「内側から外側へ」の安全な通信トンネル(コネクション)を張ります。パブリックなエンドポイント(例: live.myproject.com)や SSL 鍵の配置、DDoS対策などを自ら対応することなく、ネットワーク設定の変更を一切行わずに環境構築が可能です。
最終的な成果はどのようなものでしょうか?様々な動画プレイヤーで再生可能な、堅牢な HLS ライブストリームが完成します。

一時的に作成されたパブリックな Cloudflare 用の URL が、一般的な外部ツール(例: hlsplayer.net ☺️)などでも正常に再生可能になっている様子が見て取れます!すなわち HLS 用の .m3u8 構文ファイルが外部から正しく解釈され、ストリームとして正常機能している証です。
NVIDIA VSS との連携
ライブ配信システムとサーバー(AWS EC2)に導入された前処理用の CV 検出モデルが稼働し始めました。最後に仕上げとして、最もエキサイティングな要素である、動画の内容(コンテキスト)を包括的に理解し分析する「AI ビデオインテリジェンス」の部分を結合していきます。ここで NVIDIA VSS と TwelveLabs の結合プラグインが真価を発揮します。
NVIDIA VSS リポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
💡学習のポイント: 実装コードに入る前に、製品としての NVIDIA VSS が何を可能とするものであり、開発者に対してどのような開発リソース(AI Blueprints)を提供するものであるかを理解しておきましょう。
VSS は「Video Search and Summarization(ビデオ検索と要約)」の略称です。これはプログラミング専用言語や CUDA 自体とは異なり、開発者がビデオデータの把握、文字起こし、質問応答(Q&A)、要約生成などのソリューションの実装を迅速に行えるよう開発された、一種の設計図(統合パック)のようなものです。これらは以下のパーツより成り立っています:

視覚・言語モデル(VLM : Vision Language Models): 映像を目で見て意味を捉える役割を果たすコンポーネントです。各コマに含まれる状況から、詳細な記述文章(密なキャプションなど)へと翻訳・文字起こしを行います。
大規模言語モデル(LLMs : Large Language Models): VLM が書き起こした詳細な状況説明文から要約や対話回答を構成する、推論と対話のエンジンです。
RAG(Retrieval-Augmented Generation): 単に説明文章をそのまま LLM に投げるのではありません。検出された大量の情報群を「ベクトルデータベース(ないしグラフデータベース)」の中に一度インデックス化して格納します。ユーザーからの質問内容に沿った箇所をデータベースから検索して必要なコンテキストを補完して回答を生成するため、事実誤認の極めて少ない応答が可能となります。
GPU 推論アクセラレーション・インジェスト: NVIDIA 製ハードウェア性能を最大に発揮して、生ストリーム(RTSPなど)からの読み込み・デコード・処理を極めて低遅延でこなすための高効率な処理基盤を適用します。
既存の CV パイプライン連携: 従来のオブジェクト検出トラッキング(例:YOLO、NVIDIA DeepStream を用いた検知エンジン)が捕捉可能な情報(「Person 1」や「Box 5」といった識別 ID やバウンディングボックスの座標値情報)を VSS 内のテキスト変換部(VLM/LLM)の入力にフィード、マージすることによって、より正確な対象物の追跡が可能になります。
音声認識: 映像で何が起きていたかだけでなく、音声データ部から言葉(音声)をテキスト化する機能も内包されています。
NVIDIA NIMs (NVIDIA Inference Microservices): 開発者が個別に AI サーバーのセットアップやモデルの微調整を行わなくても済むように設計されています。モデル全体が最適化されコンテナ化されたサービス(NIMs)としてパッケージ化されているため、コマンド一発でシステム全体を起動できます。
これらはきわめて優秀な製品 blueprint 群ですが、それと同時に、これらすべてを自分たちの手でデプロイ、調整、および日々のシステム維持管理を行わなくてはならないという運用の難しさもあるのが事実です(VLM, LLM, RAG サーバー、および音声や CV 連携部分を独立させて自身の管理配下におかなくてはなりません)。
これを極めてシンプルに変えてくれるのが TwelveLabs が放つ連携機能です。

TwelveLabs プレイグラウンドでのインデックス検索表示 (TwelveLabs | Home)
複雑な推論データベースや文字起こしエンジンの稼働を自分たちのサーバー管理外へ逃がし、完全に管理されたクラウド API デプロイとして構築可能です。動画をアップロードして分析(CV解析、VLM、音声変換、Pegasus/Marengo を用いた推論など)を実行するすべてが簡単な API 設定に統合されます。ただ動画を送り出すだけで、欲しい要約などのインサイトデータを瞬時に引き出すことができるのです。
さらに注目したいのは、「すべてを TwelveLabs に任せる」だけのワンパターンの仕組みではないという点です。
最大の特徴はそのモジュール構成(自由な着脱性)です。個別の状況に応じて自社用サーバー群を使い分けることすらできるように設計されています。
この考え方のもと、今回のデモプログラムがどのように TwelveLabs のホスト型 API を使って実装されているか構成を見ていきましょう。

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
非常に明快です。取得された映像破片データ(クリップ)は二方向へ転送されます。
AWS S3 バケット (nvidia-vss-streams): クラウド上のコンテナに一定期間アーカイブを保管しておくことで、インシデント発生時の履歴追跡用として後から参照・活用可能なデータプールとします。
TwelveLabs プラグイン (NVIDIA VSS 側): 保存された対象クリップの特定 URL から TwelveLabs API を呼び出してデータを格納し、下記の通り処理を進めます:

専用のインデックス(保存用枠組み)セットアップ: 送信用と対話(質問回答)用のモデル、すなわち Marengo モデルおよび Pegasus モデルに最適化された格納枠を生成します。
インデックスへの書き込み・整理: 蓄積された映像メタデータが自動的に並び替えられ、検索や要約ができる受け入れ準備が完了します。TwelveLabs が内包する多様な機能の詳細は以下から確認できます: TwelveLabs | Product Overview
UI 画面上の様々な機能が、NVIDIA VSS API エンドポイントを通じて動画データの検索や分析を裏側で実行しています。実際の動作コード例を two cases 見てみましょう。
ケース 1: AI セーフティ・コンプライアンス管理ボット「Jade」
下記のスクリーンショットにおける右側のウィンドウ窓にあたります。利用チームが映像の中から知りたい情報を「自然な言葉遣い」で直感的に検索し、その場でトラブル調査を進める機能です。インシデント発生原因の特定、最適化のための意見募集、さらには現在地に基づいた関係法規(OSHA)の確認などを瞬時に引き出してアドバイスを伝えてくれます。

これは、TwelveLabs が持つ動画推論特化型モデル「Pegasus」に、前後の文脈(チャット履歴)を引き継ぐプロンプト設計を上乗せして実装されています。
/frontend/src/app/components/ClipChat.js (49行目〜72行目)
const typingId = Date.now(); setChatHistory(prev => [...prev, { role: 'assistant', text: '', date: Date.now(), typing: true, _id: typingId }]); try { const prompt = `You are Jade, an expert safety and compliance officer. Here is the chat history: ${chatHistory.map(m => `${m.role}: ${m.text}`).join('\n')}; The user asks: ${message}; The user's geolocation is unknown, please reference general safety and compliance standards. If the user asks about safety, compliance, or improvements, you should always reference the user's geolocation and the laws in that area when providing your response. Do not mention the coordinates, just the location and city. Be highly detailed and specific, by referencing specific machines, processes, and equipment you see in the video and the second. `; const resp = await fetch('/api/analysis', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ videoId, userQuery: prompt }) });
お気づきでしょうか。サーバー側で一連の動作がマネージド管理されているため、フロントエンドの実装はプロンプトの代入箇所を除けば、実質4行程度で記述可能です。
ケース 2: ワンクリックによる労働安全衛生レポート生成
ワンクリックで、直ちに社内や関係各所へ転送できるフォーマルな労働安全コンプライアンス(OSHA)報告書データを自動生成します。法令への抵触有無、予測される過料規模、即時の応急対応項目、無駄な作業領域に対する配置アドバイスなどが盛り込まれます。

/frontend/src/app/clips/[id]/page.js (328行目〜331行目)
const response = await fetch(`/api/analysis/${clipData['pegasusId']}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } })
これは TwelveLabs の「Marengo」モデルが備える独自のビデオ要約作成、キーワード抽出能力をもとに、事前の役割定義(システムロール)に基づいて要約情報を生成しています。
これですべての準備が整いました!独自のビデオインテリジェンスサーバーや GPU 環境の調整に必要なインフラ調達・保守・莫大な教育モデルの投資を一から行うことなく、NVIDIA VSS TwelveLabs 統合パッケージのおかげで、ライブ配信を解釈可能、検索可能、かつ構造化テキスト化する実用性の高いアプリケーションが構築できました 🥳。
まとめ
最後まで読んでいただき、ありがとうございました!このチュートリアルを通じて、様々なパブリック・製造現場での業務効率化を促進するニアリアルタイムの自律型監視プラットフォームを構築しただけでなく、NVIDIA VSS と最新の TwelveLabs インテグレーションが、開発プロジェクトのプロトタイプから実装・コード化への道をいかに加速させるかを理解いただけたはずです。
本デモについてのさらに詳細な内部情報は以下のリンク、リポジトリ各所から閲覧可能です:
システム構成資料・アーキテクチャ図: LucidApp
詳細技術決定書: [NVIDIA GTC] - Manufacturing Automation Technical Design
NVIDIA VSS TwelveLabs インテグレーションリポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
実装解説用デモリポジトリ: nathanchess/twelvelabs-nvidia-vss-sample
動作映像(デモ): NVIDIA VSS TwelveLabs Integration: Manufacturing Automation
このチュートリアルでは、工場や建設現場などの様々な職場にある既存の監視カメラ(CCTV)を監視する、ビデオインテリジェンスプラットフォームを構築する方法を学びます。これにより、従業員の危険な行動や機械の不具合、労働安全衛生(OSHA)基準違反、そして業務効率の課題をニアリアルタイムで検出できるようになります。さらに、最新の TwelveLabs と NVIDIA VSS のインテグレーションについても学び、NVIDIA ハードウェアおよびソリューション向けに構築された膨大なビデオデータを効率的に分析・要約する方法を解説します。
はじめに
現場の監視カメラが完全に自律化し、24時間365日の稼働を通じてセキュリティリスクだけでなく、労働安全衛生基準の違反、業務効率の課題、リスク評価に関する詳細なレポートを自動生成するようになったとしたらどうでしょうか? 📃

まるで魔法のように聞こえるかもしれませんが、これは先日の NVIDIA GTC DC 2025 カンファレンス のために、TwelveLabs のビデオインテリジェンスモデルがコンピュータによる非構造化データの理解をどのように変えるかを実証するために構築したものです。さらに素晴らしいことに、当社のモデルは NVIDIA Video Search and Summarization (VSS) などの既存の NVIDIA フレームワークやハードウェアと直接連携できます。
この記事では、ステップバイステップのガイドに沿ってアプリケーションをデプロイするだけでなく、リアルタイムのビデオインテリジェンスプラットフォームを実現する高度な技術アーキテクチャについても学びます。具体的には、ライブ配信映像を以下のような構成に変えるプラットフォームを構築します。
OSHA 準拠レポート: 具体的な規制や罰金情報などの参照情報を伴うレポートを自動生成します。
「ムダ」削減の提案: リーンマネジメントをサポートし、職場の生産性を最適化するために設計されています。
対話型チャットボット: 管理者が作業環境に関する詳細な質問を送信すると、ウェブ調達の情報や推奨アクションを含むフィードバックを瞬時に受け取れます。
動的なイベントタイムライン: どのようなインシデントがいつ発生したかを効率的に特定できます。
コンテキスト重視の AI アクション: 非効率な動作、コンプライアンス上の懸念、そして見過ごされがちな些細なインシデントを際立たせるため、ビデオのタイムスタンプや座標に合わせて配置された AI 生成ボタンです。
※ 注意: ここで紹介するコンセプトやテクノロジーは、一般的な職場に留まらず広く応用可能です。お客様の業界で TwelveLabs がどのように貢献できるか詳しく知りたい方は、本ブログの「職場を超えた活用事例(Beyond The Workplace)」セクションをぜひご覧ください。
デモアプリの紹介
コード作成を始める前に、今回構築するシステムを体験いただくため、以下のデモ動画や実際にデプロイされたアプリケーションを確認してみましょう。

ご自身でテストしてください: NVIDIA VSS + Twelve Labs 製造業オートメーション!
GitHub: nathanchess/twelvelabs-nvidia-vss-sample
それでは、さっそく進めていきましょう! 😊
学習目標
このチュートリアルでは、以下を学習します:
個人用保護具(PPE)を分類するため、15,000枚以上の画像を用いて、YOLO(You Only Look Once)物体検出アルゴリズムで独自のコンピュータビジョンモデルをファインチューニングします。
実際の監視カメラをシミュレートするために、FFmpeg を使用して MP4 ファイルをライブの RTSP(Real Time Streaming Protocol)ストリームに変換します。
TwelveLabs を NVIDIA VSS および AWS に直接接続、統合する方法を学びます。
思考の連鎖(Chain-of-thought)などの高度なプロンプトエンジニアリング技術を理解します。
ビデオの分割アップロードやライブストリーム処理を行う非同期 API 運用のための Docker コンテナをビルド・実行します。
前提条件
Python 3.8+: Download Python | Python.org
TwelveLabs API キー: Authentication | TwelveLabs
TwelveLabs インデックス: Python SDK | TwelveLabs
AWS アクセスキー: Credentials - Boto3 1.40.12 ドキュメント
Docker のインストール: Install | Docker Docs
Python、API、および JavaScript に関する中級程度の理解。
ローカル環境のセットアップ
1 - お手元のローカル環境にリポジトリを複製します。
>> git2 - NVIDIA VSS フレームワーク(TwelveLabs 統合対応版)をローカルに複製します。
>> git3 - AWS コンソールに移動し、「nvidia-vss-source」という名前の新しい S3 バケットを作成します。
詳細なチュートリアルはこちら: Amazon Simple Storage Service で汎用バケットを作成する
このバケットが、擬似的な監視カメラ映像のストレージとして機能します!
4 - frontend フォルダと rtsp-stream-worker フォルダの中にある環境変数を設定します。
TWELVE_LABS_API_KEY=... NEXT_PUBLIC_TWELVELABS_MARENGO_INDEX_ID=... NEXT_PUBLIC_TWELVELABS_PEGASUS_INDEX_ID=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_RTSP_STREAM_WORKER_URL="http://localhost:8000" NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
TWELVE_LABS_API_KEY=... AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_S3_BUCKET_NAME=nvidia-vss-source AWS_REGION=us-east-1 NEXT_PUBLIC_VSS_BASE_URL="http://127.0.0.1:8080"
5 - rtsp-stream-worker と NVIDIA VSS の両方の Docker コンテナをビルド・起動します。
RTSP Stream Worker のガイド: twelvelabs-nvidia-vss-sample/rtsp-stream-worker at main · nathanchess/twelvelabs-nvidia-vss-sample
NVIDIA VSS のガイド: nvidia-vss/src/vss-engine/src/models/twelve_labs at main · james-le-twelve-labs/nvidia-vss
6 - npm (Node Package Manager) を使ってフロントエンドの開発アプリケーションを起動します。
コマンドラインから GitHub リポジトリ内の frontend フォルダに移動し、以下を入力します:
>> npm |
その後、localhost:3000 に移動してサイトにアクセスします。
※ npm がインストールされているかあらかじめご確認ください: Node.js と npm のダウロードとインストール | npm Docs
CV(コンピュータビジョン)パイプラインの構築
では、無限に配信されているライブのストリーミング映像に対して、どのようにしてニアリアルタイムの処理を実現したのでしょうか?
💡学習のポイント: ライブストリームの処理は、帯域幅の制限や接続の不安定さといった難しさがあるだけでなく、コストもかかります!
簡単な数値を使って試算してみましょう。TwelveLabs のマルチモーダルモデル「Marengo」を例にします。丸1日(24時間)の動画コンテンツをインデックスに処理する場合、いくらコストがかかるでしょうか? Marengo: ($0.042/分 + $0.0015/分) * 1440分 = $60.48
防犯や監視目的のカメラが何台もある施設など、1日にカメラ1台あたり$60.48ものランニングコストは、非常に大きな負担になり現実的ではありません。 ※ コスト計算の詳細は TwelveLabs 料金計算ツールを使って簡単に行えます: https://www.twelvelabs.io/pricing-calculator |
では、このコスト面の課題をどう回避すればよいでしょうか?答えは、動画の分割(チャンキング)と前処理にあります!もちろん用途や要件によって制限は異なると思いますが、今回は例として、個人用保護具(PPE:安全ベストやヘルメット)検出のために YOLO モデルをファインチューニングしました。結果は以下の通りです:

上の画像では、様々な背景、角度、光の条件下でモデルが正しくヘルメットなどを特定しているのが分かります。15,000枚以上の豊富なデータセットを準備し、角度や色などにバリエーションを持たせるためのデータ拡張(Augmentation)を行った結果、一般的な PPE アイテム(ベスト、ヘルメット、手袋、靴など)の識別において90%以上の精度を達成できました。

💡学習のポイント: 本記事の趣旨からは少し外れますが、トレーニングスクリプトを表示して最初から独自にモデルを構築してみたい場合には、リポジトリの /cv_model にある README ファイルをぜひ参照してください: https://github.com/nathanchess/twelvelabs-nvidia-vss-sample/tree/main/cv_model
この判定ロジックを動画の切り出しやコスト削減の判断に使う仕組みは以下の通りです:
/rtsp-stream-worker/main.py(357行目〜391行目)
def analyze_video(self, video_source: str): people_count, ppe_count = 0, 0 results = self.model.predict(frame, conf=0.25, iou=0.45, max_det=1000) processed_frame = self._draw_boxes(frame, results) for box in results[0].boxes: class_id = int(box.cls[0]) class_name = self.model.model.names[class_id] if class_name == "Person": people_count += 1 else: ppe_count += 1 # Write frame to output video video_writer.write(processed_frame) video_capture.release() video_writer.release() return new_video_source else: raise FileNotFoundError(f"Video file not found: {video_source}")
上記のコードブロックでは、現場で見つかった「人物」と「保護服などを着用している人の数」を集計しています。このカウント状況を利用して、現場のニーズに最適化したカスタムの切り出し(チャンキング)アルゴリズムを適用できます。具体的には、着用漏れが検知されたような異常な区間(注視すべき部分の動画)のみを TwelveLabs のマルチモーダル解析サーバーに送ることで、丸1日ぶんの映像のアップロードを、実質的にわずか数分ないし数十秒程度の非常に低レベルな処理負荷に留めることができます。
環境の違いに応じた以下のような運用例が考えられます:
食品メーカーの製造現場: 全てのスタッフがビニール手袋を装着していることを必須とする。
医療従事施設: 特定のエリアに出入りする人物にマスクと手袋の装着を徹底させる。
建築、建設現場: ヘルメットや安全ベストなどの一式装着を検証する。
このカスタマイズ性により、分析精度を高い水準に維持したまま、コスト効率の優れた独自の監視プラットフォームを運用できるようになります。
※ 注記: これを一から構築する作業は難しく思えるかもしれませんが、後述の「NVIDIA VSS との連携」セクションでは、NVIDIA VSS フレームワークに内蔵された動画切り出し機能を活用するための手順を紹介します。
RTSP(Real-Time Streaming Protocol)を用いた擬似カメラ配信の作成
これで、動画前処理や利用料金の抑制に繋がる切り出しアルゴリズムの仕組みは整いました。それでは、シミュレーションするための肝心の動画ストリームに関してはどのように準備すればよいでしょう?
少し調べるだけでも、実際の工場や職場のオープンな防犯ストリーミング映像を見つけるのは困難であることに気づくはずです。そこで、Python を使って自分たちで模擬配信を行う仕組みを準備します。
💡学習のポイント: 擬似的なIPカメラの配信環境を作るためには何が必要でしょうか?
実現場で用いられる本格的なネットワークカメラを安全にシミュレーションするためには、取得、エンコード、映像配信(ブロードキャスト)のそれぞれのフェーズを担当する役割が必要です。今回の検証システムは主に以下の4つのパートで設計されています。
|
各要素が全体の構成の中でどのように連携しているか、下の技術アーキテクチャ図で確認してみましょう:

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
このバックエンドサービスはモノリシック構成(全体で1つのシステム)として設計されており、今回はすべての動作環境を1枚の AWS Deep Learning AMI EC2 インスタンス上で稼働させています。各要素技術についてシンプルに説明します。
AWS S3 バケット: 擬似監視用の元データ(動画ファイル)を一時的に保存しておく保管庫です。S3 上に MP4 ファイルを格納しておきます。
FFmpeg: 仮想配信用カメラの心臓部にあたるコマンドラインベースの超強力ツールです。主に以下のタスクを担います:
S3 から対象の .mp4 ファイルを取得します。
その動画に対してストリーミングのループ指定
-stream_loop -1を追加し、流し続けます。最も重要な仕事として、動画をリアルタイムで RTSP (Real-Time Streaming Protocol) にトランスコード(形式変換)します。
💡学習のポイント: RTSP は防犯カメラ製品群が標準対応している映像の送受信用プロトコルです。FFmpeg を用いてこのデータ処理を行うことで、高額なプロ向け設備を設置することなく、自宅やテスト用のサーバーからローカルネットワークに向けた擬似ライブ中継環境を完全にエミュレートできます。詳細は以下を参照してください: What is an RTSP Camera? – Real Time Streaming Protocol Explained Cloud based and Central Management
MediaMTX: これは、いわば、映像データの万能翻訳機にあたるサービスです。なぜこれが必要かというと、PC やスマートフォンの「ウェブブラウザ」は、FFmpeg が出力する生の RTSP 映像の直再生を標準サポートしていないためです。非常に軽量で扱いが容易な MediaMTX は、以下の2点を行ってくれます:
FFmpeg から直接送信される RTSP 形式の入力を取得(インジェスト)します。
ほぼ遅延なしで、受信映像をウェブフレンドリーな形式へと再変換します。
本構成では HLS (HTTP Live Streaming) と呼ばれるブラウザ視聴用の規格を利用しています。MediaMTX が配信された映像を自動的に細切れの10秒単位(.ts という形式)に分割し、ブラウザ側が順番に次の破片をダウンロードしてスムーズに再生できるようにサポートする設定ファイル(.m3u8)を自動作成します。これはスマートフォンなどでもスムーズに映像を流すことができる普遍的な手法です。
ファインチューニング済み YOLO モデル: 事前に用意した部分適用アルゴリズムを使用します。FFmpeg がストリーム配信する動画を並行して受信し、検出モデルを用いてオブジェクト認識(人物や各種装備、危険行為など)を行います。
Cloudflare Tunnels (SSH): 安全にインターネット経由で配信を共有するための通信トンネルです。今回の EC2 環境はインバウンド(受信)ポートを実質すべて制限された安全な状態にしていますが、外部から安全なアクセスルートを作ることができます。
💡学習のポイント: これにより、通常であれば外に公開されているはずのない閉ざされたテスト用の HLS 映像を、ネットから再生できるようになります。Cloudflare が提供する軽量なプロキシ・エージェントである cloudflared が、ローカル(EC2)側から Cloudflare ネットワークに向けて「内側から外側へ」の安全な通信トンネル(コネクション)を張ります。パブリックなエンドポイント(例: live.myproject.com)や SSL 鍵の配置、DDoS対策などを自ら対応することなく、ネットワーク設定の変更を一切行わずに環境構築が可能です。
最終的な成果はどのようなものでしょうか?様々な動画プレイヤーで再生可能な、堅牢な HLS ライブストリームが完成します。

一時的に作成されたパブリックな Cloudflare 用の URL が、一般的な外部ツール(例: hlsplayer.net ☺️)などでも正常に再生可能になっている様子が見て取れます!すなわち HLS 用の .m3u8 構文ファイルが外部から正しく解釈され、ストリームとして正常機能している証です。
NVIDIA VSS との連携
ライブ配信システムとサーバー(AWS EC2)に導入された前処理用の CV 検出モデルが稼働し始めました。最後に仕上げとして、最もエキサイティングな要素である、動画の内容(コンテキスト)を包括的に理解し分析する「AI ビデオインテリジェンス」の部分を結合していきます。ここで NVIDIA VSS と TwelveLabs の結合プラグインが真価を発揮します。
NVIDIA VSS リポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
💡学習のポイント: 実装コードに入る前に、製品としての NVIDIA VSS が何を可能とするものであり、開発者に対してどのような開発リソース(AI Blueprints)を提供するものであるかを理解しておきましょう。
VSS は「Video Search and Summarization(ビデオ検索と要約)」の略称です。これはプログラミング専用言語や CUDA 自体とは異なり、開発者がビデオデータの把握、文字起こし、質問応答(Q&A)、要約生成などのソリューションの実装を迅速に行えるよう開発された、一種の設計図(統合パック)のようなものです。これらは以下のパーツより成り立っています:

視覚・言語モデル(VLM : Vision Language Models): 映像を目で見て意味を捉える役割を果たすコンポーネントです。各コマに含まれる状況から、詳細な記述文章(密なキャプションなど)へと翻訳・文字起こしを行います。
大規模言語モデル(LLMs : Large Language Models): VLM が書き起こした詳細な状況説明文から要約や対話回答を構成する、推論と対話のエンジンです。
RAG(Retrieval-Augmented Generation): 単に説明文章をそのまま LLM に投げるのではありません。検出された大量の情報群を「ベクトルデータベース(ないしグラフデータベース)」の中に一度インデックス化して格納します。ユーザーからの質問内容に沿った箇所をデータベースから検索して必要なコンテキストを補完して回答を生成するため、事実誤認の極めて少ない応答が可能となります。
GPU 推論アクセラレーション・インジェスト: NVIDIA 製ハードウェア性能を最大に発揮して、生ストリーム(RTSPなど)からの読み込み・デコード・処理を極めて低遅延でこなすための高効率な処理基盤を適用します。
既存の CV パイプライン連携: 従来のオブジェクト検出トラッキング(例:YOLO、NVIDIA DeepStream を用いた検知エンジン)が捕捉可能な情報(「Person 1」や「Box 5」といった識別 ID やバウンディングボックスの座標値情報)を VSS 内のテキスト変換部(VLM/LLM)の入力にフィード、マージすることによって、より正確な対象物の追跡が可能になります。
音声認識: 映像で何が起きていたかだけでなく、音声データ部から言葉(音声)をテキスト化する機能も内包されています。
NVIDIA NIMs (NVIDIA Inference Microservices): 開発者が個別に AI サーバーのセットアップやモデルの微調整を行わなくても済むように設計されています。モデル全体が最適化されコンテナ化されたサービス(NIMs)としてパッケージ化されているため、コマンド一発でシステム全体を起動できます。
これらはきわめて優秀な製品 blueprint 群ですが、それと同時に、これらすべてを自分たちの手でデプロイ、調整、および日々のシステム維持管理を行わなくてはならないという運用の難しさもあるのが事実です(VLM, LLM, RAG サーバー、および音声や CV 連携部分を独立させて自身の管理配下におかなくてはなりません)。
これを極めてシンプルに変えてくれるのが TwelveLabs が放つ連携機能です。

TwelveLabs プレイグラウンドでのインデックス検索表示 (TwelveLabs | Home)
複雑な推論データベースや文字起こしエンジンの稼働を自分たちのサーバー管理外へ逃がし、完全に管理されたクラウド API デプロイとして構築可能です。動画をアップロードして分析(CV解析、VLM、音声変換、Pegasus/Marengo を用いた推論など)を実行するすべてが簡単な API 設定に統合されます。ただ動画を送り出すだけで、欲しい要約などのインサイトデータを瞬時に引き出すことができるのです。
さらに注目したいのは、「すべてを TwelveLabs に任せる」だけのワンパターンの仕組みではないという点です。
最大の特徴はそのモジュール構成(自由な着脱性)です。個別の状況に応じて自社用サーバー群を使い分けることすらできるように設計されています。
この考え方のもと、今回のデモプログラムがどのように TwelveLabs のホスト型 API を使って実装されているか構成を見ていきましょう。

技術アーキテクチャ構成図: LucidChart (クリックすると全画面表示が可能です)
非常に明快です。取得された映像破片データ(クリップ)は二方向へ転送されます。
AWS S3 バケット (nvidia-vss-streams): クラウド上のコンテナに一定期間アーカイブを保管しておくことで、インシデント発生時の履歴追跡用として後から参照・活用可能なデータプールとします。
TwelveLabs プラグイン (NVIDIA VSS 側): 保存された対象クリップの特定 URL から TwelveLabs API を呼び出してデータを格納し、下記の通り処理を進めます:

専用のインデックス(保存用枠組み)セットアップ: 送信用と対話(質問回答)用のモデル、すなわち Marengo モデルおよび Pegasus モデルに最適化された格納枠を生成します。
インデックスへの書き込み・整理: 蓄積された映像メタデータが自動的に並び替えられ、検索や要約ができる受け入れ準備が完了します。TwelveLabs が内包する多様な機能の詳細は以下から確認できます: TwelveLabs | Product Overview
UI 画面上の様々な機能が、NVIDIA VSS API エンドポイントを通じて動画データの検索や分析を裏側で実行しています。実際の動作コード例を two cases 見てみましょう。
ケース 1: AI セーフティ・コンプライアンス管理ボット「Jade」
下記のスクリーンショットにおける右側のウィンドウ窓にあたります。利用チームが映像の中から知りたい情報を「自然な言葉遣い」で直感的に検索し、その場でトラブル調査を進める機能です。インシデント発生原因の特定、最適化のための意見募集、さらには現在地に基づいた関係法規(OSHA)の確認などを瞬時に引き出してアドバイスを伝えてくれます。

これは、TwelveLabs が持つ動画推論特化型モデル「Pegasus」に、前後の文脈(チャット履歴)を引き継ぐプロンプト設計を上乗せして実装されています。
/frontend/src/app/components/ClipChat.js (49行目〜72行目)
const typingId = Date.now(); setChatHistory(prev => [...prev, { role: 'assistant', text: '', date: Date.now(), typing: true, _id: typingId }]); try { const prompt = `You are Jade, an expert safety and compliance officer. Here is the chat history: ${chatHistory.map(m => `${m.role}: ${m.text}`).join('\n')}; The user asks: ${message}; The user's geolocation is unknown, please reference general safety and compliance standards. If the user asks about safety, compliance, or improvements, you should always reference the user's geolocation and the laws in that area when providing your response. Do not mention the coordinates, just the location and city. Be highly detailed and specific, by referencing specific machines, processes, and equipment you see in the video and the second. `; const resp = await fetch('/api/analysis', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ videoId, userQuery: prompt }) });
お気づきでしょうか。サーバー側で一連の動作がマネージド管理されているため、フロントエンドの実装はプロンプトの代入箇所を除けば、実質4行程度で記述可能です。
ケース 2: ワンクリックによる労働安全衛生レポート生成
ワンクリックで、直ちに社内や関係各所へ転送できるフォーマルな労働安全コンプライアンス(OSHA)報告書データを自動生成します。法令への抵触有無、予測される過料規模、即時の応急対応項目、無駄な作業領域に対する配置アドバイスなどが盛り込まれます。

/frontend/src/app/clips/[id]/page.js (328行目〜331行目)
const response = await fetch(`/api/analysis/${clipData['pegasusId']}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } })
これは TwelveLabs の「Marengo」モデルが備える独自のビデオ要約作成、キーワード抽出能力をもとに、事前の役割定義(システムロール)に基づいて要約情報を生成しています。
これですべての準備が整いました!独自のビデオインテリジェンスサーバーや GPU 環境の調整に必要なインフラ調達・保守・莫大な教育モデルの投資を一から行うことなく、NVIDIA VSS TwelveLabs 統合パッケージのおかげで、ライブ配信を解釈可能、検索可能、かつ構造化テキスト化する実用性の高いアプリケーションが構築できました 🥳。
まとめ
最後まで読んでいただき、ありがとうございました!このチュートリアルを通じて、様々なパブリック・製造現場での業務効率化を促進するニアリアルタイムの自律型監視プラットフォームを構築しただけでなく、NVIDIA VSS と最新の TwelveLabs インテグレーションが、開発プロジェクトのプロトタイプから実装・コード化への道をいかに加速させるかを理解いただけたはずです。
本デモについてのさらに詳細な内部情報は以下のリンク、リポジトリ各所から閲覧可能です:
システム構成資料・アーキテクチャ図: LucidApp
詳細技術決定書: [NVIDIA GTC] - Manufacturing Automation Technical Design
NVIDIA VSS TwelveLabs インテグレーションリポジトリ: james-le-twelve-labs/nvidia-vss: Blueprint for Ingesting massive volumes of live or archived videos and extract insights for summarization and interactive Q&A
実装解説用デモリポジトリ: nathanchess/twelvelabs-nvidia-vss-sample
動作映像(デモ): NVIDIA VSS TwelveLabs Integration: Manufacturing Automation




