Compartilhar via


Fazer recuperação de vídeo usando vetorização (versão prévia da versão 4.0)

As APIs de Recuperação de Vídeo da IA do Azure fazem parte da Visão de IA do Azure e permitem que os desenvolvedores criem um índice, adicionem documentos (vídeos e imagens) a ele e pesquisem com linguagem natural. Os desenvolvedores podem definir esquemas de metadados para cada índice e ingerir metadados para o serviço para ajudar na recuperação. Os desenvolvedores também podem especificar quais recursos extrair do índice (visão, fala) e filtrar sua pesquisa com base nos recursos.

Pré-requisitos

Requisitos de entrada

Formatos com suporte

Formato de arquivo Descrição
asf ASF (Formato de Streaming Avançado / Ativo)
avi Audio-Video Interleaved (AVI)
flv FLV (Vídeo Flash)
matroskamm, webm Matroska / WebM
mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV

Codecs de vídeo com suporte

Codec Formatar
h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 parte 10
h265 H.265/HEVC
libvpx-vp9 libvpx VP9 (codec vp9)
mpeg4 MPEG-4, parte 2

Codecs de áudio com suporte

Codec Formatar
aac AAC (Codificação avançada de áudio)
mp3 MP3 (MPEG-3 Audio Layer 3)
pcm PCM (descompactado)
vorbis Vorbis
wmav2 Windows Media Audio 2

Chamar as APIs de recuperação de vídeo

Para usar as APIs de Recuperação de Vídeo em um padrão típico, execute as seguintes etapas:

  1. Crie um índice usando PUT - Criar um índice.
  2. Adicione documentos de vídeo ao índice usando PUT - CreateIngestion.
  3. Aguarde a conclusão da ingestão, verificando com GET - ListIngestions.
  4. Pesquise por uma palavra-chave ou frase usando POST – SearchByText.

As APIs de Recuperação de Vídeo permitem que um usuário adicione metadados a arquivos de vídeo. Metadados são informações adicionais associadas aos arquivos de vídeo, como "ID da câmera", "Carimbo de data/hora" ou "Localização" que podem ser usadas para organizar, filtrar e pesquisar vídeos específicos. Este exemplo demonstra como criar um índice, adicionar arquivos de vídeo com metadados associados e realizar pesquisas usando recursos diferentes.

Etapa 1 - Criar um Índice

Para começar, você precisa criar um índice para armazenar e organizar os arquivos de vídeo e seus metadados. O exemplo a seguir demonstra como criar um índice chamado "my-video-index" usando a API Criar Índice.

curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
{
  'metadataSchema': {
    'fields': [
      {
        'name': 'cameraId',
        'searchable': false,
        'filterable': true,
        'type': 'string'
      },
      {
        'name': 'timestamp',
        'searchable': false,
        'filterable': true,
        'type': 'datetime'
      }
    ]
  },
  'features': [
    {
      'name': 'vision',
      'domain': 'surveillance'
    },
    {
      'name': 'speech'
    }
  ]
}"

Resposta:

HTTP/1.1 201 Created
Content-Length: 530
Content-Type: application/json; charset=utf-8
request-id: cb036529-d1cf-4b44-a1ef-0a4e9fc62885
api-supported-versions: 2023-01-15-preview,2023-05-01-preview
x-envoy-upstream-service-time: 202
Date: Thu, 06 Jul 2023 18:05:05 GMT
Connection: close

{
  "name": "my-video-index",
  "metadataSchema": {
    "language": "en",
    "fields": [
      {
        "name": "cameraid",
        "searchable": false,
        "filterable": true,
        "type": "string"
      },
      {
        "name": "timestamp",
        "searchable": false,
        "filterable": true,
        "type": "datetime"
      }
    ]
  },
  "userData": {},
  "features": [
    {
      "name": "vision",
      "modelVersion": "2023-05-31",
      "domain": "surveillance"
    },
    {
      "name": "speech",
      "modelVersion": "2023-06-30",
      "domain": "generic"
    }
  ],
  "eTag": "\"7966244a79384cca9880d67a4daa9eb1\"",
  "createdDateTime": "2023-07-06T18:05:06.7582534Z",
  "lastModifiedDateTime": "2023-07-06T18:05:06.7582534Z"
}

Etapa 2: Adicionar arquivos de vídeo ao índice

Em seguida, você pode adicionar arquivos de vídeo ao índice com seus metadados associados. O exemplo a seguir demonstra como adicionar dois arquivos de vídeo ao índice usando URLs SAS com a API Criar Ingestão.

curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions/my-ingestion?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
{
  'videos': [
    {
      'mode': 'add',
      'documentId': '02a504c9cd28296a8b74394ed7488045',
      'documentUrl': 'https://example.blob.core.windows.net/videos/02a504c9cd28296a8b74394ed7488045.mp4?sas_token_here',
      'metadata': {
        'cameraId': 'camera1',
        'timestamp': '2023-06-30 17:40:33'
      }
    },
    {
      'mode': 'add',
      'documentId': '043ad56daad86cdaa6e493aa11ebdab3',
      'documentUrl': '[https://example.blob.core.windows.net/videos/043ad56daad86cdaa6e493aa11ebdab3.mp4?sas_token_here',
      'metadata': {
        'cameraId': 'camera2'
      }
    }
  ]
}"

Resposta:

HTTP/1.1 202 Accepted
Content-Length: 152
Content-Type: application/json; charset=utf-8
request-id: ee5e48df-13f8-4a87-a337-026947144321
operation-location: http://api.example.com.trafficmanager.net/retrieval/indexes/my-test-index/ingestions/my-ingestion
api-supported-versions: 2023-01-15-preview,2023-05-01-preview
x-envoy-upstream-service-time: 709
Date: Thu, 06 Jul 2023 18:15:34 GMT
Connection: close

{
  "name": "my-ingestion",
  "state": "Running",
  "createdDateTime": "2023-07-06T18:15:33.8105687Z",
  "lastModifiedDateTime": "2023-07-06T18:15:34.3418564Z"
}

Etapa 3: Aguarde a conclusão da ingestão

Após você adicionar arquivos de vídeo ao índice, o processo de ingestão será iniciado. Isso pode levar algum tempo, dependendo do tamanho e do número de arquivos. Para garantir que a ingestão seja concluída antes de executar pesquisas, você pode usar a API Obter Ingestão para verificar o status. Aguarde até que essa chamada retorne "state" = "Completed" antes de prosseguir para a próxima etapa.

curl.exe -v -X GET "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions?api-version=2023-05-01-preview&$top=20" -H "ocp-apim-subscription-key: <YOUR_SUBSCRIPTION_KEY>"

Resposta:

HTTP/1.1 200 OK
Content-Length: 164
Content-Type: application/json; charset=utf-8
request-id: 4907feaf-88f1-4009-a1a5-ad366f04ee31
api-supported-versions: 2023-01-15-preview,2023-05-01-preview
x-envoy-upstream-service-time: 12
Date: Thu, 06 Jul 2023 18:17:47 GMT
Connection: close

{
  "value": [
    {
      "name": "my-ingestion",
      "state": "Completed",
      "createdDateTime": "2023-07-06T18:15:33.8105687Z",
      "lastModifiedDateTime": "2023-07-06T18:15:34.3418564Z"
    }
  ]
}

Etapa 4: Faça pesquisas com metadados

Depois de adicionar arquivos de vídeo ao índice, você pode pesquisar por vídeos específicos usando metadados. Este exemplo demonstra dois tipos de pesquisas: um usando o recurso "visão" e outro usando o recurso "fala".

Pesquisar com o recurso "visão"

Para executar uma pesquisa usando o recurso "visão", use a API Pesquisar por Texto com o filtro vision, especificando o texto da consulta e quaisquer outros filtros desejados.

curl.exe -v -X POST "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index:queryByText?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
{
  'queryText': 'a man with black hoodie',
  'filters': {
    'stringFilters': [
      {
        'fieldName': 'cameraId',
        'values': [
          'camera1'
        ]
      }
    ],
    'featureFilters': ['vision']
  }
}"

Resposta:

HTTP/1.1 200 OK
Content-Length: 3289
Content-Type: application/json; charset=utf-8
request-id: 4c2477df-d89d-4a98-b433-611083324a3f
api-supported-versions: 2023-05-01-preview
x-envoy-upstream-service-time: 233
Date: Thu, 06 Jul 2023 18:42:08 GMT
Connection: close

{
  "value": [
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "VideoFrame",
      "start": "00:01:58",
      "end": "00:02:09",
      "best": "00:02:03",
      "relevance": 0.23974405229091644
    },
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "VideoFrame",
      "start": "00:02:27",
      "end": "00:02:29",
      "best": "00:02:27",
      "relevance": 0.23762696981430054
    },
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "VideoFrame",
      "start": "00:00:26",
      "end": "00:00:27",
      "best": "00:00:26",
      "relevance": 0.23250913619995117
    },
  ]
}

Pesquisar com o recurso "fala"

Para executar uma pesquisa usando o recurso de "fala", use a API Pesquisar por Texto com o filtro speech, fornecendo o texto da consulta e quaisquer outros filtros desejados.

curl.exe -v -X POST "https://<YOUR_ENDPOINT_URL>com/computervision/retrieval/indexes/my-video-index:queryByText?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii "
{
  'queryText': 'leave the area',
  'dedup': false,
  'filters': {
    'stringFilters': [
      {
        'fieldName': 'cameraId',
        'values': [
          'camera1'
        ]
      }
    ],
    'featureFilters': ['speech']
  }
}"

Resposta:

HTTP/1.1 200 OK
Content-Length: 49001
Content-Type: application/json; charset=utf-8
request-id: b54577bb-1f46-44d8-9a91-c9326df3ac23
api-supported-versions: 2023-05-01-preview
x-envoy-upstream-service-time: 148
Date: Thu, 06 Jul 2023 18:43:07 GMT
Connection: close

{
  "value": [
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "SpeechTextSegment",
      "start": "00:07:07.8400000",
      "end": "00:07:08.4400000",
      "best": "00:07:07.8400000",
      "relevance": 0.8597901463508606
    },
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "SpeechTextSegment",
      "start": "00:07:02.0400000",
      "end": "00:07:03.0400000",
      "best": "00:07:02.0400000",
      "relevance": 0.8506758213043213
    },
    {
      "documentId": "02a504c9cd28296a8b74394ed7488045",
      "documentKind": "SpeechTextSegment",
      "start": "00:07:10.4400000",
      "end": "00:07:11.5200000",
      "best": "00:07:10.4400000",
      "relevance": 0.8474636673927307
    }
  ]
}

Próximas etapas

Conceitos de inserções multimodais