Análise de Vídeo do Stream

Stream Video Analysis é um serviço de análise de vídeo em tempo real totalmente gerenciado e acelerado por GPU na Oracle Cloud Infrastructure (OCI). Ele processa fluxos RTSP ao vivo para fornecer insights em tempo real usando recursos de IA.

Esses são os principais recursos:

  • Detecção de objetos: detecta objetos, por exemplo, pessoas ou veículos, e retorna caixas delimitadoras.
  • Detecção de rosto: identifica rostos com saídas de caixa delimitadora.
  • Rastreamento de objetos: Usando o Rastreamento de objetos, você pode rastrear objetos detectados (atualmente limitados a rostos) em quadros de vídeo. Ao atribuir um identificador exclusivo (ID de rastreamento) a cada rosto, o sistema mantém a continuidade da identidade à medida que uma pessoa se move pela visualização da câmera. No caso do Face Tracking, tanto o rastreamento de câmera única quanto o rastreamento multicâmera são suportados.
    • Rastreamento de câmera única: Rastreia faces dentro dos limites de um único fluxo de câmera. Isso significa que você pode identificar e rastrear indivíduos à medida que eles se movem pelo campo de visão de uma câmera específica.
    • Rastreamento Multicamera: O rastreamento Multicamera significa que você pode identificar consistentemente em vários fluxos de câmera. As câmeras podem ser agrupadas logicamente para que um rosto detectado em um fluxo possa ser reconhecido em outro fluxo.

Desempenho e escalabilidade

O serviço Stream Video Analysis foi projetado para fornecer análises de baixa latência e alto desempenho alimentadas por aceleração de GPU. Por padrão, o serviço suporta um único job de fluxo por usuário. Se precisar expandir além desse limite, você poderá solicitar recursos extras por meio do canal de Suporte da OCI.

Conectividade da câmera

O Stream Video Analysis requer acesso ao feed de vídeo, seja usando a internet pública ou em um privado, usando conexão rápida.

Opção 1: Conectividade Pública usando IP Estático e Encaminhamento de Porta

  1. Solicite um endereço IP público estático ao seu Provedor de Serviços de Internet (ISP) para o seu roteador doméstico ou de escritório.
    Esse IP serve como ponto de acesso externo à sua rede de câmeras.
  2. Conecte a câmera ao seu roteador por meio de um cabo LAN ou WiFi
  3. Atribua à câmera um endereço IP privado estático.
  4. Ative o encaminhamento de porta no roteador.
    1. Abra o painel de administração do roteador.

    2. Configurar uma regra de encaminhamento de porta:

      • Porta externa: 554 (padrão para RTSP)

      • Encaminhar para IP: Este é o IP privado estático na etapa 3.

      • Porta Interna: 554

  5. Acesse o fluxo RSTP.
    O fluxo RTSP é acessível publicamente a partir de:
    rtsp://<Static_Public_IP>:554/stream
  6. Crie uma VCN com uma sub-rede que tenha acesso a esse IP estático:
    1. Criar uma VCN:
      resource "oci_core_vcn" "vcn" {
        cidr_block     = "10.0.0.0/16"
        compartment_id = <compartment_id>
        display_name   = "vcn"
      }
    2. Crie uma sub-rede 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. Adicione uma regra de roteamento:
      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. Agora você pode criar um ponto final privado usando essa sub-rede.

Opção 2: VPN Site a Site

Uma opção mais segura e escalável é Configurando a VPN Site a Site entre seu roteador local e a OCI.

  1. Obtenha um IP público estático do seu ISP para o seu roteador.
    Isso é necessário para estabelecer o túnel da VPN IPsec.
  2. Criar um objeto CPE (Customer-Premises Equipment) no OCI:
    1. Na Console, selecione Networking.
    2. Selecione Customer-Premises-Equipment.
    3. Selecione Criar CPE.
    4. Insira o endereço IP público estático do seu roteador.
  3. Estabeleça o túnel de VPN IPsec.
    Para obter mais informações, consulte Configurando a VPN Site a Site.
  4. Crie uma sub-rede na sua VCN do OCI para rotear o tráfego por meio dessa conexão de VPN.
  5. Atualize a lista de segurança da sub-rede para permitir tráfego de entrada e saída de/para a rede de câmeras on-premises (ou seja, o intervalo de IP interno do seu CPE).
  6. Quando a VPN está ativa e o roteamento está configurado, você pode fornecer o OCID da sub-rede na solicitação CreateStreamSource para ingerir feeds de vídeo com segurança no OCI.

Referência da API

Criar Ponto Final Privado da Vision
Criar Ponto Final Privado da Vision
Atributo Valor
Ponto Final da API /latest/visionPrivateEndpoints
Método API PÓS
Exemplo de Corpo de Solicitação
{
    "subnetId": "<<Valid Subnet OCID // only one pe per vcn is allowed>>",
    "compartmentId": "<<Valid Compartment OCID where pe should be made>>"
}
Exemplo de Corpo de Resposta 202 Aceito
{
    "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": {}
}

Criar Origem do Fluxo

A criação da origem de fluxo suporta tipos de acesso Público e Privado. A diferença entre o ponto final Público e Privado está em como o serviço de Análise de Fluxo de Visão acessa seu fluxo de vídeo.

  • Ponto Final Privado: Os streams são acessados com segurança por meio de um Ponto Final Privado pela rede interna da OCI acessível na sua VCN (Rede Virtual na Nuvem) da OCI. Este é o método recomendado para configurações de produção.
  • Public Endpoint: expõe o fluxo para a internet por meio de um IP público.
Criar Origem de Stream com Detalhes de Acesso à Rede Pública
Atributo Valor
Ponto Final da API /latest/streamSources
Método API PÓS
Exemplo de Corpo de Solicitação
{
    "streamSourceDetails": {
        "sourceType": "RTSP",
        "cameraUrl": "<valid url>",
        "streamNetworkAccessDetails": {
            "streamAccessType": "PUBLIC"
        }
    },
    "compartmentId": "<valid compartment OCID>",
    "freeformTags": {
        "oci-freeform": ""
    },
    "definedTags": {
        "Oracle-Tags": {
            "CreatedBy": "<OCID>",
            "CreatedOn": "<time stamp>"
        }
    }
}
Exemplo de Corpo de Resposta 202 Aceito
{
    "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": {}
}

Criar Origem de Stream com Detalhes de Acesso à Rede Privada
Atributo Valor
Ponto Final da API /latest//streamSources
Método API PÓS
Exemplo de Corpo de Solicitação

{
    "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>"
        }
    }
}
Exemplo de Corpo de Resposta 202 Aceito

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

Criar Job de Stream
Atributo Valor
Ponto Final da API /latest/streamJobs
Método API PÓS
Exemplo de Corpo de Solicitação
{
    "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"
}
Exemplo de Corpo de Resposta 202 Aceito
{
    "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 Job do Stream
Atributo Valor
Ponto Final da API /latest/streamJobs/<<Stream Job Ocid>>/actions/start
Método API PÓS
Exemplo de Corpo de Resposta 202 Aceito

Interromper Job de Fluxo
Atributo Valor
Ponto Final da API /latest/streamJobs/<Stream_Job_OCID>/actions/stop
Método API PÓS
Exemplo de Corpo de Resposta 202 Aceito

Obter Job de Stream
Atributo Valor
Ponto Final da API /latest/streamJobs/<Stream_Job_OCID>
Método API OBTER
Exemplo de Corpo de Resposta 202 OK

Obter Origem do Stream
Atributo Valor
Ponto Final da API /latest/streamSources/<Stream_Job_OCID>
Método API OBTER
Exemplo de Corpo de Resposta 202 OK

Obter Ponto Final Privado
Atributo Valor
Ponto Final da API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Método API OBTER
Exemplo de Corpo de Resposta 202 OK

Excluir Job de Stream
Atributo Valor
Ponto Final da API /latest/streamJobs/<Stream_Job_OCID>
Método API EXCLUIR
Exemplo de Corpo de Resposta 202 OK

Excluir Origem do Fluxo
Atributo Valor
Ponto Final da API /latest/streamSources/<Stream_Job_OCID>
Método API EXCLUIR
Exemplo de Corpo de Resposta 202 Aceito

Excluir Ponto Final Privado
Atributo Valor
Ponto Final da API /latest/visionPrivateEndpoint/<Stream_Job_OCID>
Método API EXCLUIR
Exemplo de Corpo de Resposta 202 Aceito

Exemplos completos de trabalho estão disponíveis em LiveLab.

Rastreamento Multicamera
Observação

Disponível SOMENTE para jobs de stream usando o Rastreamento de Objeto (limitado a faces). Esta opção é opcional.
Grupo de Fluxos
Atributo Valor
Ponto Final da API /latest/streamGroups
Método API PÓS
Exemplo de Corpo de Solicitação
{
  "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>"
        }
    }
}
Exemplo de Corpo de Resposta 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 obter APIs completas de Rastreamento Multicamera CRUD, consulte a especificação StreamGroup API.

Resultados e Saída

Recurso Saída
Detecção de label

Rótulo, confiança, timestamp

Detecção de objeto

Rótulo e caixa delimitadora, confiança

Detecção de texto

Caixa Transcrição e delimitação

Detecção de rosto

Caixa delimitadora, metadados de rosto

Rastreamento de objetos

ObjectID e caixas delimitadoras rastreadas ao longo do tempo

Recomendações para Melhor Desempenho

  • A câmera produz uma taxa de quadros consistente de 30 FPS.
  • Resolução da câmera não maior que 720p
  • Forneça ambientes consistentes e bem iluminados
  • Manter uma proximidade de assunto de 15 a 20 metros