Analyse vidéo de flux

Stream Video Analysis est un service d'analyse vidéo en temps réel entièrement géré et accéléré par GPU sur Oracle Cloud Infrastructure (OCI). Il traite les flux RTSP en direct pour fournir des informations en temps réel à l'aide de fonctionnalités d'IA.

Principales caractéristiques :

  • Détection d'objets : Détecte des objets, par exemple des personnes ou des véhicules, et renvoie des boîtes englobantes.
  • Détection de visage : identifie les visages avec des sorties de boîte de délimitation.
  • Suivi d'objet : à l'aide du suivi d'objet, vous pouvez suivre les objets détectés (actuellement limités aux visages) dans les cadres vidéo. En attribuant un identifiant unique (ID de suivi) à chaque face, le système maintient la continuité de l'identité lorsqu'une personne se déplace dans la vue de la caméra. En cas de Face Tracking, le suivi d'une seule caméra et le suivi multicamera sont pris en charge.
    • Suivi d'une seule caméra : Suivi des visages dans les limites d'un seul flux de caméra. Cela signifie que vous pouvez identifier et suivre les individus lorsqu'ils se déplacent dans le champ de vision d'une caméra spécifique.
    • Multicamera Tracking : Multicamera tracking signifie que vous pouvez identifier de manière cohérente sur plusieurs flux de caméra. Les caméras peuvent être regroupées logiquement pour qu'une face détectée dans un flux puisse être reconnue dans un autre flux.

Performances et évolutivité

Le service Stream Video Analysis est conçu pour fournir des analyses à faible latence et hautes performances optimisées par l'accélération GPU. Par défaut, le service prend en charge un travail de flux unique par utilisateur. Si vous devez dépasser cette limite, vous pouvez demander des ressources supplémentaires via le canal de support OCI.

Connectivité de la caméra

Stream Video Analysis nécessite l'accès au flux vidéo, soit en utilisant l'Internet public, soit sur un réseau privé, en utilisant la connexion rapide.

Option 1 : connectivité publique à l'aide de l'adresse IP statique et du transfert de port

  1. Demandez une adresse IP publique statique à votre fournisseur d'accès Internet (FAI) pour votre routeur domestique ou professionnel.
    Cette adresse IP sert de point d'accès externe au réseau de votre caméra.
  2. Connectez l'appareil photo à votre routeur via un câble LAN ou WiFi
  3. Affectez à la caméra une adresse IP privée statique.
  4. Activez le transfert de port sur le routeur.
    1. Ouvrez le panneau d'administration du routeur.

    2. Configurez une règle de transfert de port :

      • Port externe : 554 (standard pour RTSP)

      • Transférer à l'adresse IP : adresse IP privée statique à l'étape 3.

      • Port interne: 554

  5. Accédez au flux RSTP.
    Le flux RTSP est accessible au public à partir de :
    rtsp://<Static_Public_IP>:554/stream
  6. Créez un VCN avec un sous-réseau ayant accès à cette adresse IP statique :
    1. Création d'un réseau cloud virtuel:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. Créez un sous-réseau privé :
      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. Ajoutez une règle de routage :
      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. Vous pouvez maintenant créer une adresse privée à l'aide de ce sous-réseau.

Option 2 : réseau privé virtuel site à site

Une option plus sécurisée et évolutive consiste à configurer un VPN site à site entre votre routeur sur site et OCI.

  1. Obtenez une adresse IP publique statique auprès de votre FAI pour votre routeur.
    Ceci est requis pour établir le tunnel VPN IPsec.
  2. Créez un objet CPE (Customer-Premise Equipment) dans OCI :
    1. Dans la console, sélectionnez Networking.
    2. Sélectionnez Customer-Premises-Equipment.
    3. Sélectionnez Créer un CPE.
    4. Entrez l'adresse IP publique statique de votre routeur.
  3. Etablissez le tunnel VPN IPsec.
    Pour plus d'informations, reportez-vous à Configuration d'un VPN site à site.
  4. Créez un sous-réseau dans votre VCN OCI pour acheminer le trafic via cette connexion VPN.
  5. Mettez à jour la liste de sécurité du sous-réseau pour autoriser le trafic entrant et sortant vers et depuis le réseau de caméra sur site (c'est-à-dire la plage d'adresses IP internes du CPE).
  6. Lorsque le VPN est actif et que le routage est configuré, vous pouvez fournir l'OCID de sous-réseau dans la demande CreateStreamSource afin d'ingérer en toute sécurité des flux vidéo dans OCI.

Référence d'API

Créer une adresse privée Vision
Créer une adresse privée Vision
Attribut Valeur
Adresse d'API /latest/visionPrivateEndpoints
Méthode API POST
Exemple de corps de demande
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
Exemple de corps de la réponse 202 sera présent
{
    "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": {}
}

Créer une source de flux

La création d'une source de flux prend en charge les types d'accès public et privé. La différence entre une adresse publique et une adresse privée réside dans la façon dont le service d'analyse de flux de vision accède à votre flux vidéo.

  • Adresse privée : l'accès aux flux est sécurisé via une adresse privée sur le réseau interne d'OCI accessible dans votre réseau cloud virtuel OCI (VCN). Il s'agit de la méthode recommandée pour les configurations de production.
  • Adresse publique : expose le flux à Internet via une adresse IP publique.
Créer une source de flux avec les détails d'accès au réseau public
Attribut Valeur
Adresse d'API /latest/streamSources
Méthode API POST
Exemple de corps de demande
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
Exemple de corps de la réponse 202 sera présent
{
    "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": {}
}

Créer une source de flux avec des détails d'accès au réseau privé
Attribut Valeur
Adresse d'API /latest//streamSources
Méthode API POST
Exemple de corps de demande

{
    "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>"
        }
    }
}
Exemple de corps de la réponse 202 sera présent

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

Créer un travail de flux
Attribut Valeur
Adresse d'API /latest/streamJobs
Méthode API POST
Exemple de corps de demande
{
    "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"
}
Exemple de corps de la réponse 202 sera présent
{
    "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": {},
 

Démarrer le travail de flux de données
Attribut Valeur
Adresse d'API /latest/streamJobs/<<Stream Job Ocid>>/actions/start
Méthode API POST
Exemple de corps de la réponse 202 sera présent

Arrêter le travail de flux de données
Attribut Valeur
Adresse d'API /latest/streamJobs/<Stream_Job_OCID>/actions/stop
Méthode API POST
Exemple de corps de la réponse 202 sera présent

Obtenir le travail de flux
Attribut Valeur
Adresse d'API /latest/streamJobs/<Stream_Job_OCID>
Méthode API GET
Exemple de corps de la réponse 202 OK

Obtenir la source de flux
Attribut Valeur
Adresse d'API /latest/streamSources/<Stream_Job_OCID>
Méthode API GET
Exemple de corps de la réponse 202 OK

Obtenir l'adresse privée
Attribut Valeur
Adresse d'API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Méthode API GET
Exemple de corps de la réponse 202 OK

Supprimer le travail de flux
Attribut Valeur
Adresse d'API /latest/streamJobs/<Stream_Job_OCID>
Méthode API SUPPRIMER
Exemple de corps de la réponse 202 OK

Supprimer la source de flux
Attribut Valeur
Adresse d'API /latest/streamSources/<Stream_Job_OCID>
Méthode API SUPPRIMER
Exemple de corps de la réponse 202 sera présent

Supprimer l'adresse privée
Attribut Valeur
Adresse d'API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Méthode API SUPPRIMER
Exemple de corps de la réponse 202 sera présent

Des exemples complets de travail de bout en bout sont disponibles dans LiveLab.

Suivi multicaméra
Remarque

Cette option est SEULEMENT disponible pour les travaux de flux de données utilisant le suivi d'objet (limité aux faces). Cette fonctionnalité est facultative.
Groupe de flux
Attribut Valeur
Adresse d'API /latest/streamGroups
Méthode API POST
Exemple de corps de demande
{
  "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>"
        }
    }
}
Exemple de corps de la réponse 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": {}
}

Pour connaître les API CRUD Multicamera Tracking complètes, reportez-vous à la spécification de l'API StreamGroup.

Résultats et résultats

Fonction Sortie
Détection de libellés

Libellé, confiance, horodatage

Détection d'objets

Étiquette et boîte de délimitation, confiance

Détection de texte

Boîte de transcription et limite

Détection de visage

Boîte englobante, métadonnées de face

Suivi d'objet

ObjectID et boîtes englobantes suivies dans le temps

Recommandations pour les meilleures performances

  • La caméra produit une fréquence d'images constante de 30 FPS.
  • Résolution de la caméra n'excédant pas 720p
  • Fournir des environnements cohérents et bien éclairés
  • Maintenir une proximité de sujet de 15 à 20 mètres