ストリームビデオ分析

Stream Video Analysisは、Oracle Cloud Infrastructure(OCI)上のフルマネージドのGPUクイック化されたリアルタイムビデオ分析サービスです。ライブRTSPストリームを処理し、AI機能を使用してリアルタイムのインサイトを提供します。

主な機能は次のとおりです。

  • オブジェクト検出: オブジェクト(人や車両など)を検出し、境界ボックスを返します。
  • 面検出: 境界ボックス出力で面を識別します。
  • オブジェクトトラッキング: オブジェクトトラッキングを使用すると、ビデオフレーム間で検出されたオブジェクト(現在は面に限定)を追跡できます。各面に一意の識別子(追跡ID)を割り当てることによって、個人がカメラビュー内を移動するときに、IDの継続性が維持されます。フェイストラッキングの場合、シングルカメラトラッキングとマルチカメラトラッキングの両方がサポートされています。
    • シングルカメラトラッキング: 単一のカメラストリームの境界内の面を追跡します。つまり、特定のカメラの視野を移動する個人を識別して追跡できます。
    • マルチカメラの追跡: マルチカメラの追跡は、複数のカメラストリームにわたって一貫して識別できることを意味します。あるストリームで検出された面を別のストリームで認識できるように、カメラを論理的にグループ化できます。

パフォーマンスとスケーラビリティー

Stream Video Analysisサービスは、GPUアクセラレーションを搭載した低レイテンシで高性能な分析を提供するように設計されています。デフォルトでは、サービスではユーザーごとに単一のストリーム・ジョブがサポートされます。この制限を超えてスケーリングする必要がある場合は、OCIサポート・チャネルを介して追加のリソースをリクエストできます。

カメラ接続

Stream Video Analysisでは、高速接続を使用して、パブリック・インターネットまたはプライベート経由でビデオ・フィードにアクセスする必要があります。

オプション1: 静的IPおよびポート転送を使用したパブリック接続

  1. 自宅またはオフィス・ルーターのインターネット・サービス・プロバイダ(ISP)から静的パブリックIPアドレスをリクエストします。
    このIPは、カメラネットワークへの外部アクセスポイントとして機能します。
  2. LANケーブルまたはWiFiを使用して、カメラをルーターに接続します。
  3. カメラに静的プライベートIPアドレスを割り当てます。
  4. ルータでポート転送を有効にします。
    1. ルータの管理パネルを開きます。

    2. ポート転送ルールを構成します。

      • 外部ポート: 554 (RTSPの標準)

      • 転送先IP: ステップ3の静的プライベートIPです。

      • 内部ポート: 554

  5. RSTPストリームにアクセスします。
    RTSPストリームは、次のものからパブリックにアクセスできます。
    rtsp://<Static_Public_IP>:554/stream
  6. この静的IPへのアクセス権を持つサブネットを持つVCNを作成します:
    1. VCNの作成:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. プライベート・ネットを作成します:
      resource "oci_core_subnet" "private_subnet" {
        compartment_id              = <comparment_id>
        vcn_id                      = <vcn_id created in previous step>
        cidr_block                  = "10.0.0.0/24"
        display_name                = "private-subnet"
      }
    3. ルート・ルールを追加します。
      resource "oci_core_route_table" "route" {
        compartment_id = <compartment_id>
        vcn_id         = <vcn_id>
       
        route_rules {
          destination       = "0.0.0.0/0"
          destination_type  = "CIDR_BLOCK"
          network_entity_id = oci_core_nat_gateway.natgw.id
          description       = "NAT Gateway for outbound internet traffic"
        }
      }
  7. これで、このサブネットを使用してプライベート・エンドポイントを作成できます。

オプション2: サイト間VPN

よりセキュアでスケーラブルなオプションは、オンプレミス・ルーターとOCI間のサイト間VPNの設定です。

  1. ルーターのISPから静的パブリックIPを取得します。
    これは、IPsec VPNトンネルの確立に必要です。
  2. OCIでCPE (顧客構内設備)オブジェクトを作成します:
    1. コンソールで、「ネットワーキング」を選択します。
    2. 「顧客構内設備」を選択します。
    3. 「CPEの作成」を選択します。
    4. ルーターの静的パブリックIPアドレスを入力します。
  3. IPsec VPNトンネルを確立します。
    詳細は、サイト間VPNの設定に関する項を参照してください。
  4. OCI VCNにサブネットを作成して、このVPN接続を介してトラフィックをルーティングします。
  5. サブネットのセキュリティ・リストを更新して、オンプレミス・カメラ・ネットワーク(CPEの内部IP範囲)との間のインバウンドおよびアウトバウンド・トラフィックを許可します。
  6. VPNがアクティブでルーティングが構成されている場合は、CreateStreamSourceリクエストにサブネットOCIDを指定して、ビデオ・フィードをOCIに安全に取り込むことができます。

APIリファレンス

Visionプライベート・エンドポイントの作成
Visionプライベート・エンドポイントの作成
属性
APIエンドポイント /latest/visionPrivateEndpoints
APIメソッド 投稿
サンプル・リクエスト本文
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
サンプル・レスポンス本文 202 受入れ済
{
    "subnetId": "<<Valid Subnet OCID>>",
    "compartmentId": "<<Valid Compartment OCID>>"
    "id": "<newly vision pe OCID>",
    "compartmentId": "<compartment OCID>",
    "timeCreated": "2025-07-17T08:20:19.875Z",
    "timeUpdated": "2025-07-17T08:20:19.875Z",
    "displayName": "<generated display name>",
    "lifecycleState": "CREATING",
    "freeformTags": {
        "oci-freeform": "xyz"
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    },
    "systemTags": {}
}

ストリーム・ソースの作成

ストリーム・ソースの作成では、パブリックおよびプライベートのアクセス・タイプがサポートされます。パブリック・エンドポイントとプライベート・エンドポイントの違いは、Vision Stream Analysisサービスがビデオ・ストリームにアクセスする方法にあります。

  • プライベート・エンドポイント: ストリームは、OCI Virtual Cloud Network (VCN)内でアクセス可能なOCIの内部ネットワークを介して、プライベート・エンドポイントを介してセキュアにアクセスします。これは本番設定の推奨方法です。
  • パブリック・エンドポイント: パブリックIPを介してインターネットにストリームを公開します。
パブリック・ネットワーク・アクセス詳細を含むストリーム・ソースの作成
属性
APIエンドポイント /latest/streamSources
APIメソッド 投稿
サンプル・リクエスト本文
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
サンプル・レスポンス本文 202 受入れ済
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        },
        "secretId": null,
        "cameraUrl": "<valid url>"
    },
    "id": "<newly created Stream Source OCID>",
    "compartmentId": "<valid compartment OCID>",
    "timeCreated": "2025-07-17T08:20:19.875Z",
    "timeUpdated": "2025-07-17T08:20:19.875Z",
    "displayName": "<generated display name>",
    "lifecycleState": "ACTIVE",
    "freeformTags": {
        "oci-freeform": "xyz"
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    },
    "systemTags": {}
}

プライベート・ネットワーク・アクセス詳細を含むストリーム・ソースの作成
属性
APIエンドポイント /latest//streamSources
APIメソッド 投稿
サンプル・リクエスト本文

{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PRIVATE",
            "privateEndpointId": "<Vision Private Endpoint OCID>"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
サンプル・レスポンス本文 202 受入れ済

{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PRIVATE",
            "visionPrivateEndpoint": "<Vision Private Endpoint OCID>"
        },
        "secretId": null,
        "cameraUrl": "<valid url>"
    },
    "id": "<newly created Stream Source OCID>",
    "compartmentId": "<valid compartment OCID>",
    "timeCreated": "2025-07-17T08:20:19.875Z",
    "timeUpdated": "2025-07-17T08:20:19.875Z",
    "displayName": "<generated display name>",
    "lifecycleState": "ACTIVE",
    "freeformTags": {
        "oci-freeform": "xyz"
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    },
    "systemTags": {}
}

ストリーム・ジョブの作成
属性
APIエンドポイント /latest/streamJobs
APIメソッド 投稿
サンプル・リクエスト本文
{
    "streamSourceId": "<<Valid Stream Source OCID>>",
    "streamOutputLocation": {
        "outputLocationType": "OBJECT_STORAGE",
        "namespaceName": "",
        "bucketName": "",
        "prefix": "",
        "oboToken": ""
    },
    "features": [
        {
            "featureType": "OBJECT_TRACKING",
            "trackingTypes": [
                {
                    "objects": [
                        "face"
                    ],
                    "shouldReturnLandmarks": true,
                    "maxResults": 50
                }
            ]
        }
    ],
    "compartmentId": "<<Valid Compartment OCID>>",
    "displayName": "Example Stream Job"
}
サンプル・レスポンス本文 202 受入れ済
{
    "id": "<<Generated Stream Job OCID>>",
    "streamSourceId": "<<Stream Source OCID>>",
    "compartmentId": "<<Compartment OCID>>",
    "displayName": "Example Stream Job",
    "features": [
        {
            "featureType": "OBJECT_TRACKING",
            "trackingTypes": [
                {
                    "objects": [
                        "face"
                    ],
                    "detectionModelId": null,
                    "trackingModelId": null,
                    "maxResults": 50,
                    "shouldReturnLandmarks": true,
                    "biometricStoreId": null,
                    "biometricStoreCompartmentId": null
                }
            ]
        }
    ],
    "streamOutputLocation": {
        "outputLocationType": "OBJECT_STORAGE",
        "namespaceName": "",
        "bucketName": "",
        "prefix": "",
        "oboToken": ""
    },
    "agentParticipantId": null,
    "lifecycleState": "INACTIVE",
    "lifecycleDetails": null,
    "timeCreated": "<<Timestamp>>",
    "timeUpdated": "<<Timestamp>>",
    "freeformTags": {},
    "definedTags": {},
 

ストリーム・ジョブの開始
属性
APIエンドポイント /latest/streamJobs/<<Stream Job Ocid>>/actions/start
APIメソッド 投稿
サンプル・レスポンス本文 202 受入れ済

ストリーム・ジョブの停止
属性
APIエンドポイント /latest/streamJobs/<Stream_Job_OCID>/actions/stop
APIメソッド 投稿
サンプル・レスポンス本文 202 受入れ済

ストリーム・ジョブの取得
属性
APIエンドポイント /latest/streamJobs/<Stream_Job_OCID>
APIメソッド GET
サンプル・レスポンス本文 202 OK

ストリーム・ソースの取得
属性
APIエンドポイント /latest/streamSources/<Stream_Job_OCID>
APIメソッド GET
サンプル・レスポンス本文 202 OK

プライベート・エンドポイントの取得
属性
APIエンドポイント /latest/visionPrivateEndpoint/<Stream_Job_OCID>
APIメソッド GET
サンプル・レスポンス本文 202 OK

ストリーム・ジョブの削除
属性
APIエンドポイント /latest/streamJobs/<Stream_Job_OCID>
APIメソッド 削除
サンプル・レスポンス本文 202 OK

ストリーム・ソースの削除
属性
APIエンドポイント /latest/streamSources/<Stream_Job_OCID>
APIメソッド 削除
サンプル・レスポンス本文 202 受入れ済

プライベート・エンドポイントの削除
属性
APIエンドポイント /latest/visionPrivateEndpoint/<Stream_Job_OCID>
APIメソッド 削除
サンプル・レスポンス本文 202 受入れ済

完全なエンドツーエンドの作業例は、LiveLabにあります。

マルチカメラの追跡
ノート

これは、オブジェクト・トラッキングを使用するストリーム・ジョブ(フェースに制限)でのみ使用できます。これはオプション機能です。
ストリーム・グループ
属性
APIエンドポイント /latest/streamGroups
APIメソッド 投稿
サンプル・リクエスト本文
{
  "compartment_id": "<valid compartment OCID>",
  "display_name": "human readable display name",
  "is_enabled": true,
  "stream_overlaps": [
    {
      "overlapping_streams": [<subset of stream_source_ids that overlap in field of view>]
    }
  ],
  "stream_source_ids": [
    <List of valid streamSource OCIDs>
  ],
  "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
サンプル・レスポンス本文 200 OK
{
  "compartment_id": "<valid compartment OCID>",
  "display_name": "human readable display name",
  "id": "<StreamGroup OCID>",
  "is_enabled": true,
  "lifecycle_state": "ACTIVE",
  "stream_overlaps": null,
  "stream_source_ids": [
    <List of valid streamSource OCIDs>
  ],
  "time_created": "2025-07-17T23:39:18.264000+00:00",
  "time_updated": "2025-07-17T23:39:18.264000+00:00",
  "freeformTags": {
        "oci-freeform": "xyz"
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    },
    "systemTags": {}
}

完全なCRUDマルチカメラ・トラッキングAPIについては、StreamGroup API仕様を参照してください。

結果と出力

機能 出力
ラベル検出

ラベル、信頼度、タイムスタンプ

オブジェクト検出

ラベルとバウンディングボックス、自信

テキスト検出

転写と境界ボックス

顔検出

境界ボックス、面メタデータ

オブジェクト・トラッキング

時間の経過に伴うObjectIDおよびトラッキングされた境界ボックス

最適なパフォーマンスのための推奨事項

  • カメラの一貫したフレームレートは30 FPSです。
  • カメラ解像度は720p以下
  • 一貫性のある、よく点灯した環境を提供
  • 被験者の近接度を15~20メートル維持