Analisi video streaming

Stream Video Analysis è un servizio di analisi video in tempo reale in tempo reale completamente gestito e accelerato dalla GPU su Oracle Cloud Infrastructure (OCI). Elabora i flussi RTSP in tempo reale per fornire insight in tempo reale utilizzando le funzionalità AI.

Di seguito sono riportate le funzioni principali.

  • Rilevamento oggetti: Rileva oggetti, ad esempio persone o veicoli e restituisce riquadri.
  • Face Detection: identifica le facce con uscite della scatola di delimitazione.
  • Tracciamento degli oggetti: Utilizzando il tracciamento degli oggetti, è possibile tenere traccia degli oggetti rilevati (attualmente limitati ai volti) nei fotogrammi video. Assegnando un identificatore univoco (ID di tracciamento) a ciascuna faccia, il sistema mantiene la continuità dell'identità mentre una persona si sposta attraverso la vista della fotocamera. In caso di Face Tracking, sono supportati sia il tracciamento di una singola fotocamera che il monitoraggio multicamera.
    • Monitoraggio di una singola fotocamera: traccia le facce all'interno dei limiti di un singolo flusso di fotocamere. Ciò significa che è possibile identificare e tenere traccia delle persone mentre si muovono attraverso il campo visivo di una fotocamera specifica.
    • Monitoraggio Multicamera: Il monitoraggio Multicamera consente di identificare in modo coerente diversi flussi di fotocamere. Le telecamere possono essere raggruppate logicamente in modo che un volto rilevato in un flusso possa essere riconosciuto in un altro flusso.

Prestazioni e scalabilità

Il servizio Stream Video Analysis è progettato per fornire analytics a bassa latenza e ad alte prestazioni basati sull'accelerazione GPU. Per impostazione predefinita, il servizio supporta un singolo job di flusso per utente. Se è necessario eseguire la scalabilità oltre questo limite, è possibile richiedere risorse aggiuntive tramite il canale del Supporto OCI.

Connettività fotocamera

Stream Video Analysis richiede l'accesso al feed video, sia utilizzando la rete Internet pubblica o su un privato, utilizzando la connessione veloce.

Opzione 1: Connettività pubblica con IP statico e inoltro porta

  1. Richiedere un indirizzo IP pubblico statico dal provider di servizi Internet (ISP) per il router di casa o ufficio.
    Questo IP funge da punto di accesso esterno alla rete della fotocamera.
  2. Collegare la fotocamera al router tramite un cavo LAN o WiFi
  3. Assegnare alla fotocamera un indirizzo IP privato statico.
  4. Abilitare l'inoltro della porta sul router.
    1. Aprire il pannello di amministrazione del router.

    2. Configurare una regola di inoltro della porta:

      • Porta esterna: 554 (standard per RTSP)

      • Inoltra a IP: questo è l'IP privato statico nel passo 3.

      • Porta interna: 554

  5. Accedere al flusso RSTP.
    Il flusso RTSP è accessibile pubblicamente da:
    rtsp://<Static_Public_IP>:554/stream
  6. Creare una VCN con una subnet che dispone dell'accesso a questo IP statico:
    1. Creare una VCN:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. Creare una subnet privata:
      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. Aggiungere una regola di instradamento:
      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. Ora è possibile creare un endpoint privato utilizzando questa subnet.

Opzione 2: VPN da sito a sito

Un'opzione più sicura e scalabile è Impostazione della VPN da sito a sito tra il router in locale e OCI.

  1. Ottieni un IP pubblico statico dal tuo ISP per il tuo router.
    Questo è necessario per stabilire il tunnel VPN IPsec.
  2. Creare un oggetto CPE (Customer-Premises Equipment) in OCI:
    1. Nella console selezionare Networking.
    2. Selezionare Customer-Premises-Equipment.
    3. Selezionare Crea CPE.
    4. Immettere l'indirizzo IP pubblico statico del router.
  3. Stabilire il tunnel VPN IPsec.
    Per ulteriori informazioni, vedere Impostazione della VPN da sito in sito.
  4. Creare una subnet nella VCN OCI per instradare il traffico attraverso questa connessione VPN.
  5. Aggiornare la lista di sicurezza della subnet per consentire il traffico in entrata e in uscita da e verso la rete di telecamere in locale, ovvero l'intervallo IP interno del CPE.
  6. Quando la VPN è attiva e l'instradamento è configurato, puoi fornire l'OCID della subnet nella richiesta CreateStreamSource per includere in modo sicuro i feed video in OCI.

Riferimento API

Crea endpoint privato Vision
Crea endpoint privato Vision
Attribute Value
Endpoint API /latest/visionPrivateEndpoints
Metodo API POST
Esempio di corpo della richiesta
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
Esempio di corpo della risposta 202 Accettate
{
    "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": {}
}

Crea origine flusso

La creazione dell'origine flusso supporta i tipi di accesso Pubblico e Privato. La differenza tra endpoint pubblico e privato risiede nel modo in cui il servizio Vision Stream Analysis accede al flusso video.

  • Endpoint privato: l'accesso ai flussi è sicuro tramite un endpoint privato sulla rete interna di OCI accessibile all'interno della rete cloud virtuale (VCN) OCI. Metodo consigliato per le impostazioni di produzione.
  • Endpoint pubblico: espone il flusso a Internet tramite un IP pubblico.
Crea origine flusso con dettagli accesso alla rete pubblica
Attribute Value
Endpoint API /latest/streamSources
Metodo API POST
Esempio di corpo della richiesta
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
Esempio di corpo della risposta 202 Accettate
{
    "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": {}
}

Crea origine flusso con dettagli di accesso alla rete privata
Attribute Value
Endpoint API /latest//streamSources
Metodo API POST
Esempio di corpo della richiesta

{
    "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>"
        }
    }
}
Esempio di corpo della risposta 202 Accettate

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

Crea job flusso
Attribute Value
Endpoint API /latest/streamJobs
Metodo API POST
Esempio di corpo della richiesta
{
    "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"
}
Esempio di corpo della risposta 202 Accettate
{
    "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": {},
 

Avvia job flusso
Attribute Value
Endpoint API /latest/streamJobs/<<Stream Job Ocid>>/actions/start
Metodo API POST
Esempio di corpo della risposta 202 Accettate

Interrompi job flusso
Attribute Value
Endpoint API /latest/streamJobs/<Stream_Job_OCID>/actions/stop
Metodo API POST
Esempio di corpo della risposta 202 Accettate

Recupera job flusso
Attribute Value
Endpoint API /latest/streamJobs/<Stream_Job_OCID>
Metodo API SCARICA
Esempio di corpo della risposta 202 OK

Recupera origine flusso
Attribute Value
Endpoint API /latest/streamSources/<Stream_Job_OCID>
Metodo API SCARICA
Esempio di corpo della risposta 202 OK

Ottieni endpoint privato
Attribute Value
Endpoint API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Metodo API SCARICA
Esempio di corpo della risposta 202 OK

Elimina job flusso
Attribute Value
Endpoint API /latest/streamJobs/<Stream_Job_OCID>
Metodo API ELIMINA
Esempio di corpo della risposta 202 OK

Elimina origine flusso
Attribute Value
Endpoint API /latest/streamSources/<Stream_Job_OCID>
Metodo API ELIMINA
Esempio di corpo della risposta 202 Accettate

Elimina endpoint privato
Attribute Value
Endpoint API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Metodo API ELIMINA
Esempio di corpo della risposta 202 Accettate

Esempi di lavoro end-to-end completi sono disponibili in LiveLab.

Tracciamento multicamera
Nota

È disponibile SOLO per i job di flusso che utilizzano il tracciamento oggetti (limitato ai volti). Questa è una funzione facoltativa.
Gruppo di flussi
Attribute Value
Endpoint API /latest/streamGroups
Metodo API POST
Esempio di corpo della richiesta
{
  "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>"
        }
    }
}
Esempio di corpo della risposta 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": {}
}

Per visualizzare le API di tracciamento CRUD Multicamera complete, vedere la specifica dell'StreamGroup API.

Risultati e output

Funzione Output
Rilevamento etichette

Etichetta, attendibilità, indicatore orario

Rilevamento oggetti

Etichetta e scatola di delimitazione, fiducia

Rilevamento del testo

Scatola di trascrizione e delimitazione

Rilevamento facciale

Contenitore, metadati facciali

Tracciamento degli oggetti

ObjectID e riquadri tracciati nel tempo

Suggerimenti per prestazioni ottimali

  • La fotocamera produce un frame rate costante di 30 FPS.
  • Risoluzione della fotocamera non superiore a 720p
  • Offri ambienti coerenti e ben illuminati
  • Mantenere una prossimità del soggetto di 15-20 metri