Análisis de vídeo de flujo

Stream Video Analysis es un servicio de análisis de video en tiempo real en tiempo real totalmente gestionado y con GPU en Oracle Cloud Infrastructure (OCI). Procesan transmisiones RTSP en vivo para ofrecer información en tiempo real mediante capacidades de IA.

Las características clave son:

  • Detección de objetos: detecta objetos, por ejemplo, personas o vehículos, y devuelve cajas delimitadoras.
  • Detección de caras: identifica caras con salidas de caja delimitadora.
  • Seguimiento de objetos: mediante el seguimiento de objetos, puede realizar un seguimiento de los objetos detectados (actualmente limitados a caras) en los marcos de vídeo. Al asignar un identificador único (ID de seguimiento) a cada cara, el sistema mantiene la continuidad de la identidad a medida que una persona se mueve a través de la vista de cámara. En el caso de Face Tracking, se admiten tanto el seguimiento de una sola cámara como el seguimiento multicamera.
    • Seguimiento de una sola cámara: rastrea las caras dentro de los límites de una sola corriente de cámara. Esto significa que puede identificar y realizar un seguimiento de las personas a medida que se mueven por el campo de visión de una cámara específica.
    • Seguimiento Multicamera: El seguimiento Multicamera significa que usted puede identificar consistentemente a través de varias transmisiones de cámara. Las cámaras se pueden agrupar lógicamente para que una cara detectada en un flujo se pueda reconocer en otro flujo.

Rendimiento y posibilidades de ampliación

El servicio Stream Video Analysis está diseñado para proporcionar análisis de baja latencia y alto rendimiento con tecnología de aceleración de GPU. Por defecto, el servicio soporta un único trabajo de flujo por usuario. Si necesita ampliar más allá de este límite, puede solicitar recursos adicionales a través del canal de soporte de OCI.

Conectividad de la cámara

Stream Video Analysis requiere acceso a la fuente de vídeo, ya sea mediante la red pública de Internet o a través de una conexión privada, mediante conexión rápida.

Opción 1: Conectividad pública mediante el reenvío de puertos e IP estáticos

  1. Solicite una dirección IP pública estática a su proveedor de servicios de Internet (ISP) para su enrutador de casa u oficina.
    Esta IP sirve como punto de acceso externo a la red de la cámara.
  2. Conecte la cámara a su router a través de un cable LAN o WiFi
  3. Asigne a la cámara una dirección IP privada estática.
  4. Active el reenvío del puerto en el enrutador.
    1. Abra el panel de administración del enrutador.

    2. Configure una regla de reenvío de puerto:

      • Puerto externo: 554 (estándar para RTSP)

      • Reenviar a IP: esta es la IP privada estática en el paso 3.

      • Puerto Interno: 554

  5. Acceda al flujo RSTP.
    El flujo RTSP es accesible públicamente desde:
    rtsp://<Static_Public_IP>:554/stream
  6. Cree una VCN con una subred que tenga acceso a esta IP estática:
    1. Creación de una red virtual en la nube:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. Cree una subred privada.
      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. Agregue una regla de ruta:
      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. Ahora puede crear un punto final privado mediante esta subred.

Opción 2: VPN sitio-sitio

Una opción más segura y escalable es Configurar la VPN de sitio a sitio entre el enrutador local y OCI.

  1. Obtenga una IP pública estática de su ISP para su enrutador.
    Esto es necesario para establecer el túnel VPN IPsec.
  2. Cree un objeto CPE (equipo local de cliente) en OCI:
    1. En la consola, seleccione Networking.
    2. Seleccione Equipo local de cliente.
    3. Seleccione Crear CPE.
    4. Introduzca la dirección IP pública estática de su enrutador.
  3. Establezca el túnel de VPN IPsec.
    Para obtener más información, consulte Configuración de VPN de sitio a sitio.
  4. Cree una subred en su VCN de OCI para enrutar el tráfico a través de esta conexión VPN.
  5. Actualice la lista de seguridad de la subred para permitir el tráfico entrante y saliente hacia y desde la red de cámara local (es decir, el rango de IP interno de su CPE).
  6. Cuando la VPN está activa y el enrutamiento está configurado, puede proporcionar el OCID de subred en la solicitud CreateStreamSource para ingerir de forma segura fuentes de vídeo en OCI.

Referencia de API

Crear punto final privado de Vision
Crear punto final privado de Vision
Atributo Valor
Punto final de API /latest/visionPrivateEndpoints
Método de API POST
Ejemplo de cuerpo de solicitud
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
Ejemplo de cuerpo de respuesta 202 Aceptado
{
    "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": {}
}

Crear origen de flujo

La creación de orígenes de flujo soporta los tipos de acceso público y privado. La diferencia entre el punto final público y el privado radica en cómo el servicio Vision Stream Analysis accede a su flujo de video.

  • Punto final privado: se accede a los flujos de forma segura a través de un punto final privado a través de la red interna de OCI, a la que se puede acceder desde su red virtual en la nube (VCN) de OCI. Este es el método recomendado para la configuración de producción.
  • Punto final público: expone el flujo a Internet a través de una IP pública.
Crear origen de flujo con detalles de acceso de red pública
Atributo Valor
Punto final de API /latest/streamSources
Método de API POST
Ejemplo de cuerpo de solicitud
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
Ejemplo de cuerpo de respuesta 202 Aceptado
{
    "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": {}
}

Crear origen de flujo con detalles de acceso de red privada
Atributo Valor
Punto final de API /latest//streamSources
Método de API POST
Ejemplo de cuerpo de solicitud

{
    "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>"
        }
    }
}
Ejemplo de cuerpo de respuesta 202 Aceptado

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

Crear trabajo de flujo
Atributo Valor
Punto final de API /latest/streamJobs
Método de API POST
Ejemplo de cuerpo de solicitud
{
    "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"
}
Ejemplo de cuerpo de respuesta 202 Aceptado
{
    "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": {},
 

Iniciar trabajo de flujo
Atributo Valor
Punto final de API /latest/streamJobs/<<Stream Job Ocid>>/actions/start
Método de API POST
Ejemplo de cuerpo de respuesta 202 Aceptado

Detener trabajo de flujo
Atributo Valor
Punto final de API /latest/streamJobs/<Stream_Job_OCID>/actions/stop
Método de API POST
Ejemplo de cuerpo de respuesta 202 Aceptado

Obtener trabajo de flujo
Atributo Valor
Punto final de API /latest/streamJobs/<Stream_Job_OCID>
Método de API OBTENER
Ejemplo de cuerpo de respuesta 202 CORRECTO

Obtener origen de flujo
Atributo Valor
Punto final de API /latest/streamSources/<Stream_Job_OCID>
Método de API OBTENER
Ejemplo de cuerpo de respuesta 202 CORRECTO

Obtener punto final privado
Atributo Valor
Punto final de API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Método de API OBTENER
Ejemplo de cuerpo de respuesta 202 CORRECTO

Suprimir trabajo de flujo
Atributo Valor
Punto final de API /latest/streamJobs/<Stream_Job_OCID>
Método de API SUPRIMIR
Ejemplo de cuerpo de respuesta 202 CORRECTO

Suprimir origen de flujo
Atributo Valor
Punto final de API /latest/streamSources/<Stream_Job_OCID>
Método de API SUPRIMIR
Ejemplo de cuerpo de respuesta 202 Aceptado

Suprimir punto final privado
Atributo Valor
Punto final de API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Método de API SUPRIMIR
Ejemplo de cuerpo de respuesta 202 Aceptado

En LiveLab encontrará ejemplos completos de trabajo de extremo a extremo.

Seguimiento Multicamera
Nota

SOLO está disponible para trabajos de flujo que utilizan Object Tracking (limitado a caras). Esta es una función opcional.
Grupo de flujos
Atributo Valor
Punto final de API /latest/streamGroups
Método de API POST
Ejemplo de cuerpo de solicitud
{
  "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>"
        }
    }
}
Ejemplo de cuerpo de respuesta 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": {}
}

Para obtener información completa sobre las API de seguimiento de varias versiones de CRUD, consulte la especificación de la API StreamGroup.

Resultados y salida

Función Salida
Detección de etiquetas

Etiqueta, confianza, registro de hora

Detección de objetos

Etiqueta y caja delimitadora, confianza

Detección de texto

Cuadro Transcripción y delimitador

Detección facial

Cuadro de límites, metadatos faciales

Seguimiento de objetos

ObjectID y cuadros delimitadores con seguimiento a lo largo del tiempo

Recomendaciones para un mejor rendimiento

  • La cámara produce una velocidad de cuadro constante de 30 FPS.
  • Resolución de cámara no superior a 720p
  • Proporcionar entornos consistentes y bien iluminados
  • Mantener una proximidad del sujeto de 15-20 metros