Recuperación de vídeos mediante vectorización (versión preliminar de la versión 4.0)

Las API de recuperación de vídeo de Azure AI forman parte de la Visión de Azure AI y permiten a los desarrolladores crear un índice, agregarle documentos (vídeos e imágenes) y realizar búsquedas con lenguaje natural. Los desarrolladores pueden definir esquemas de metadatos para cada índice e ingerir metadatos en el servicio para ayudar con la recuperación. Los desarrolladores también pueden especificar qué características extraer del índice (visión y voz) y filtrar su búsqueda en función de estas.

Requisitos previos

Requisitos de entrada

Formatos compatibles

Formato de archivo Descripción
asf ASF (Formato Avanzado / Streaming Activo)
avi AVI (audio y vídeo intercalado)
flv FLV (Vídeo flash)
matroskamm, webm Matroska / WebM
mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV

Códecs de vídeo compatibles

Códec Formato
h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 parte 10
h265 H.265/HEVC
libvpx-vp9 libvpx VP9 (códec vp9)
mpeg4 MPEG-4, parte 2

Códecs de audio compatibles

Códec Formato
aac AAC (codificación de audio avanzada)
mp3 MP3 (capa de audio MPEG 3)
pcm PCM (sin comprimir)
vorbis Vorbis
wmav2 Windows Media Audio 2

Llamada a las API de recuperación de vídeo

Para utilizar las API de recuperación de vídeo en un patrón típico, seguiría los siguientes pasos:

  1. Cree un índice mediante PUT - Create an index.
  2. Agregue documentos de vídeo al índice mediante PUT: CreateIngestion.
  3. Espere a que se complete la ingesta, comprobando con GET - ListIngestions.
  4. Busque una palabra clave o frase mediante POST - SearchByText.

Las API de recuperación de vídeo permiten al usuario agregar metadatos a archivos de vídeo. Los metadatos son información adicional asociada a los archivos de vídeo, como el "Id. de cámara", la "marca de tiempo" o la "ubicación", que puede utilizarse para organizar, filtrar y buscar vídeos específicos. En este ejemplo se muestra cómo crear un índice, agregar archivos de vídeo con metadatos asociados y realizar búsquedas mediante diferentes características.

Paso 1: Crear un índice

Para empezar, necesita crear un índice para almacenar y organizar los archivos de vídeo y sus metadatos. En el ejemplo siguiente se muestra cómo crear un índice denominado "my-video-index" mediante la API Crear í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'
    }
  ]
}"

Respuesta:

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

Paso 2: Agregar archivos de vídeo al índice

A continuación, puede agregar archivos de vídeo al índice con sus metadatos asociados. En el ejemplo siguiente se muestra cómo agregar dos archivos de vídeo al índice mediante direcciones URL de SAS con la API Crear ingesta.

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'
      }
    }
  ]
}"

Respuesta:

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

Paso 3: Esperar a que finalice la ingesta

Después de agregar archivos de vídeo al índice, se inicia el proceso de ingesta. Puede tardar algún tiempo en función del tamaño y el número de archivos. Para asegurarse de que la ingesta se ha completado antes de realizar búsquedas, puede usar la API Obtener ingesta para comprobar el estado. Espere a que esta llamada devuelva "state" = "Completed" antes de continuar con el siguiente paso.

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>"

Respuesta:

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"
    }
  ]
}

Paso 4: Realizar búsquedas con metadatos

Después de agregar archivos de vídeo al índice, puede buscar vídeos específicos mediante metadatos. En este ejemplo se muestran dos tipos de búsquedas: una que usa la característica "visión" y otra mediante la característica "voz".

Búsqueda con la característica "visión"

Para realizar una búsqueda mediante la característica "visión", use la API de Buscar por texto con el filtro vision, especificando el texto de la consulta y cualquier otro filtro deseado.

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']
  }
}"

Respuesta:

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
    },
  ]
}

Búsqueda con la característica "voz"

Para realizar una búsqueda mediante la característica "voz", use la API de Buscar por texto con el filtro speech, proporcionando el texto de la consulta y cualquier otro filtro deseado.

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']
  }
}"

Respuesta:

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
    }
  ]
}

Pasos siguientes

Conceptos de inserción multi modal