Stream-Videoanalyse

Stream Video Analysis ist ein vollständig verwalteter, GPU-gestützter Echtzeit-Videoanalyseservice auf Oracle Cloud Infrastructure (OCI). Es verarbeitet Live-RTSP-Streams, um mithilfe von KI-Funktionen Echtzeiteinblicke zu liefern.

Die wichtigsten Funktionen sind:

  • Objekterkennung: Erkennen Sie Objekte, z. B. Personen oder Fahrzeuge, und geben Sie Begrenzungsfelder zurück.
  • Gesichtserkennung: Kennzeichnet Flächen mit Begrenzungskastenausgängen.
  • Objektverfolgung: Mit Object Tracking können Sie erkannte Objekte (derzeit auf Gesichter beschränkt) über Videoframes hinweg verfolgen. Durch die Zuweisung einer eindeutigen Kennung (Tracking-ID) zu jedem Gesicht behält das System die Kontinuität der Identität bei, wenn sich eine Person durch die Kameraansicht bewegt. Im Falle von Face Tracking werden sowohl Single Camera Tracking als auch Multikamera Tracking unterstützt.
    • Single Camera Tracking: Verfolgt Gesichter innerhalb der Grenzen eines einzelnen Kamerastreams. Dies bedeutet, dass Sie Personen identifizieren und verfolgen können, wenn sie sich durch das Sichtfeld einer bestimmten Kamera bewegen.
    • Multikamera-Tracking: Multikamera-Tracking bedeutet, dass Sie sich durchgängig über mehrere Kameraströme hinweg identifizieren können. Kameras können logisch gruppiert werden, so dass eine in einem Stream erfasste Fläche in einem anderen Stream erkannt werden kann.

Performance und Skalierbarkeit

Stream Video Analysis Service wurde entwickelt, um High-Performance-Analysen mit geringer Latenz und GPU-Beschleunigung bereitzustellen. Standardmäßig unterstützt der Service einen einzelnen Streamjob pro Benutzer. Wenn Sie über dieses Limit hinaus skalieren müssen, können Sie zusätzliche Ressourcen über den OCI-Supportkanal anfordern.

Kamerakonnektivität

Stream-Video-Analyse erfordert Zugriff auf den Video-Feed, entweder über das öffentliche Internet oder über eine private, mit Fast Connect.

Option 1: Öffentliche Konnektivität mit statischer IP und Portweiterleitung

  1. Fordern Sie eine statische öffentliche IP-Adresse von Ihrem Internet Service Provider (ISP) für Ihren Heim- oder Bürorouter an.
    Diese IP dient als externer Zugriffspunkt auf Ihr Kameranetzwerk.
  2. Verbinden Sie die Kamera mit Ihrem Router über ein LAN-Kabel oder WiFi
  3. Weisen Sie der Kamera eine statische private IP-Adresse zu.
  4. Portweiterleitung auf dem Router aktivieren.
    1. Öffnen Sie das Administrationsfenster des Routers.

    2. Konfigurieren Sie eine Portweiterleitungsregel:

      • Externer Anschluss: 554 (Standard für RTSP)

      • Weiterleiten an IP: Dies ist die statische private IP in Schritt 3.

      • Interner Port: 554

  5. Rufen Sie den RSTP-Stream auf.
    Der RTSP-Stream ist öffentlich zugänglich unter:
    rtsp://<Static_Public_IP>:554/stream
  6. Erstellen Sie ein VCN mit einem Subnetz, das Zugriff auf diese statische IP hat:
    1. VCN erstellen:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. Privates Subnetz erstellen:
      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. Routingregel hinzufügen:
      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. Sie können jetzt einen privaten Endpunkt mit diesem Subnetz erstellen.

Option 2: Site-to-Site-VPN

Eine sicherere und skalierbarere Option ist das Einrichten eines Site-to-Site-VPN zwischen Ihrem On-Premise-Router und OCI.

  1. Holen Sie sich eine statische öffentliche IP von Ihrem ISP für Ihren Router.
    Dies ist erforderlich, um den VPN-Tunnel IPsec einzurichten.
  2. Erstellen Sie ein CPE-(Customer-Premises Equipment-)Objekt in OCI:
    1. Wählen Sie in der Konsole die Option Networking aus.
    2. Wählen Sie Customer-Premise-Equipment aus.
    3. Wählen Sie CPE erstellen aus.
    4. Geben Sie die statische öffentliche IP-Adresse Ihres Routers ein.
  3. Richten Sie den VPN-Tunnel IPsec ein.
    Weitere Informationen dazu finden Sie unter Site-to-Site-VPN einrichten.
  4. Erstellen Sie ein Subnetz in Ihrem OCI-VCN, um Traffic über diese VPN-Verbindung weiterzuleiten.
  5. Aktualisieren Sie die Sicherheitsliste des Subnetzes, um eingehenden und ausgehenden Traffic zum und vom On-Premise-Kamerasetzwerk zuzulassen (d.h. den internen IP-Bereich Ihres CPE).
  6. Wenn das VPN aktiv ist und Routing konfiguriert ist, können Sie die Subnetz-OCID in der Anforderung CreateStreamSource angeben, um Videofeeds sicher in OCI aufzunehmen.

API-Referenz

Privaten Vision-Endpunkt erstellen
Privaten Vision-Endpunkt erstellen
Attribut Wert
API-Endpunkt /latest/visionPrivateEndpoints
API-Methode POST
Beispielanforderungstext
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
Beispielantworttext 202 Accepted
{
    "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": {}
}

Streamquelle erstellen

Das Erstellen einer Streamquelle unterstützt öffentliche und private Zugriffstypen. Der Unterschied zwischen öffentlichem und privatem Endpunkt besteht darin, wie der Vision Stream Analysis-Service auf Ihren Videostream zugreift.

  • Privater Endpunkt: Der sichere Zugriff auf Streams erfolgt über einen privaten Endpunkt über das interne Netzwerk von OCI, auf das innerhalb Ihres virtuellen OCI-Cloud-Netzwerks (VCN) zugegriffen werden kann. Dies ist die empfohlene Methode für Produktions-Setups.
  • Öffentlicher Endpunkt: Stellt Stream über eine öffentliche IP für das Internet bereit.
Streamquelle mit Zugriffsdetails für öffentliches Netzwerk erstellen
Attribut Wert
API-Endpunkt /latest/streamSources
API-Methode POST
Beispielanforderungstext
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
Beispielantworttext 202 Accepted
{
    "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": {}
}

Streamquelle mit Details zum privaten Netzwerkzugriff erstellen
Attribut Wert
API-Endpunkt /latest//streamSources
API-Methode POST
Beispielanforderungstext

{
    "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>"
        }
    }
}
Beispielantworttext 202 Accepted

{
    "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": {}
}

Streamjob erstellen
Attribut Wert
API-Endpunkt /latest/streamJobs
API-Methode POST
Beispielanforderungstext
{
    "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"
}
Beispielantworttext 202 Accepted
{
    "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": {},
 

Streamjob starten
Attribut Wert
API-Endpunkt /latest/streamJobs/<<Stream Job Ocid>>/actions/start
API-Methode POST
Beispielantworttext 202 Accepted

Stream-Job stoppen
Attribut Wert
API-Endpunkt /latest/streamJobs/<Stream_Job_OCID>/actions/stop
API-Methode POST
Beispielantworttext 202 Accepted

Streamjob abrufen
Attribut Wert
API-Endpunkt /latest/streamJobs/<Stream_Job_OCID>
API-Methode ABRUFEN
Beispielantworttext 202 OK

Streamquelle abrufen
Attribut Wert
API-Endpunkt /latest/streamSources/<Stream_Job_OCID>
API-Methode ABRUFEN
Beispielantworttext 202 OK

Privaten Endpunkt abrufen
Attribut Wert
API-Endpunkt /latest/visionPrivateEndpoint/<Stream_Job_OCID>
API-Methode ABRUFEN
Beispielantworttext 202 OK

Streamjob löschen
Attribut Wert
API-Endpunkt /latest/streamJobs/<Stream_Job_OCID>
API-Methode LÖSCHEN
Beispielantworttext 202 OK

Streamquelle löschen
Attribut Wert
API-Endpunkt /latest/streamSources/<Stream_Job_OCID>
API-Methode LÖSCHEN
Beispielantworttext 202 Accepted

Privaten Endpunkt löschen
Attribut Wert
API-Endpunkt /latest/visionPrivateEndpoint/<Stream_Job_OCID>
API-Methode LÖSCHEN
Beispielantworttext 202 Accepted

Vollständige End-to-End-Arbeitsbeispiele finden Sie unter LiveLab.

Multikamera-Verfolgung
Hinweis

Diese Option ist NUR für Streamjobs mit Object Tracking (beschränkt auf Gesichter) verfügbar. Dies ist eine optionale Funktion.
Streamgruppe
Attribut Wert
API-Endpunkt /latest/streamGroups
API-Methode POST
Beispielanforderungstext
{
  "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>"
        }
    }
}
Beispielantworttext 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": {}
}

Die vollständigen CRUD-APIs für das Multikamera-Tracking finden Sie in der Spezifikation StreamGroup API.

Ergebnisse und Ausgabe

Feature Ausgabe
Labelerkennung

Label, Konfidenz, Zeitstempel

Objekterkennung

Etikett und Begrenzungsrahmen, Konfidenz

Texterkennung

Befundschreibung und Begrenzungsbox

Gesichtserkennung

Bounding-Box, Face-Metadaten

Objekttracking

ObjectID und verfolgte Begrenzungsfelder im Zeitverlauf

Empfehlungen für beste Leistung

  • Die Kamera erzeugt eine konstante Bildrate von 30 FPS.
  • Kameraauflösung nicht größer als 720p
  • Konsistente, gut beleuchtete Umgebungen
  • Behalten Sie eine Subjektnähe von 15-20 Metern bei