Share via


Effectuer une récupération vidéo en utilisant la vectorisation (version 4.0 preview)

Les API de récupération vidéo d’Azure AI font partie d’Azure AI Vision. Elles permettent aux développeurs de créer un index, d’y ajouter des documents (vidéos et images) et de faire des recherches en langage naturel. Les développeurs peuvent définir des schémas de métadonnées pour chaque index et ingérer des métadonnées dans le service pour faciliter la récupération. Les développeurs peuvent également spécifier les caractéristiques à extraire de l’index (vision, speech) et filtrer leur recherche en fonction des caractéristiques.

Prérequis

Critères des entrées

Formats pris en charge

Format de fichier Description
asf ASF (Advanced / Active Streaming Format)
avi AVI (Audio-Video Interleaved)
flv FLV (Flash Video)
matroskamm, webm Matroska / WebM
mov,mp4,m4a,3gp,3g2,mj2 QuickTime / MOV

Codecs vidéo pris en charge

Codec Format
h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
h265 H.265/HEVC
libvpx-vp9 libvpx VP9 (codec vp9)
mpeg4 MPEG-4 Part 2

Codecs audio pris en charge

Codec Format
aac AAC (Advanced Audio Coding)
mp3 MP3 (MPEG-3 Audio Layer 3)
pcm PCM (non compressé)
vorbis Vorbis
wmav2 Windows Media Audio 2

Appeler les API de récupération vidéo

Pour utiliser les API de récupération vidéo dans un modèle classique, effectuez les étapes suivantes :

  1. Créez un index en utilisant PUT - Create an index.
  2. Ajoutez des documents vidéo à l’index en utilisant PUT - CreateIngestion.
  3. Attendez que l’ingestion se termine, en vérifiant avec GET - ListIngestions.
  4. Recherchez un mot clé ou une expression en utilisant POST - SearchByText.

Les API de récupération vidéo permettent à un utilisateur d’ajouter des métadonnées aux fichiers vidéo. Les métadonnées sont des informations supplémentaires associées aux fichiers vidéo comme « ID de l’appareil photo », « Horodatage » ou « Localisation » qui peuvent servir à organiser, filtrer et rechercher des vidéos spécifiques. Cet exemple montre comment créer un index, ajouter des fichiers vidéo avec des métadonnées associées et effectuer des recherches en utilisant différentes caractéristiques.

Étape 1 : Créer un index

Pour commencer, vous devez créer un index afin de stocker et organiser les fichiers vidéo et leurs métadonnées. L’exemple ci-dessous montre comment créer un index nommé « my-video-index » à l’aide de l’API Créer un index.

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

Réponse :

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

Étape 2 : Ajouter des fichiers vidéo à l’index

Ensuite, vous pouvez ajouter des fichiers vidéo à l’index avec leurs métadonnées associées. L’exemple ci-dessous montre comment ajouter deux fichiers vidéo à l’index en utilisant des URL SAS avec l’API Créer une ingestion.

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

Réponse :

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

Étape 3 : Attendre la fin de l’ingestion

Une fois que vous avez ajouté des fichiers vidéo à l’index, le processus d’ingestion démarre. Cela peut prendre un certain temps selon la taille et le nombre de fichiers. Pour vérifier que l’ingestion est terminée avant d’effectuer des recherches, vous pouvez utiliser l’API Obtenir une ingestion pour vérifier l’état. Attendez que cet appel renvoie "state" = "Completed" avant de passer à l’étape suivante.

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

Réponse :

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

Étape 4 : Effectuer des recherches avec des métadonnées

Après avoir ajouté des fichiers vidéo à l’index, vous pouvez rechercher des vidéos spécifiques en utilisant les métadonnées. Cet exemple montre deux types de recherches : une avec la caractéristique « vision » et l’autre avec la caractéristique « speech ».

Rechercher avec la caractéristique « vision »

Pour effectuer une recherche à l’aide de la fonctionnalité « vision », utilisez l’API Rechercher par texte avec le filtre vision, en spécifiant le texte de la requête et tout autre filtre souhaité.

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

Réponse :

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

Rechercher avec la fonctionnalité « speech »

Pour effectuer une recherche à l’aide de la fonctionnalité « speech », utilisez l’API Rechercher par texte avec le filtre speech, en fournissant le texte de la requête et tout autre filtre souhaité.

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

Réponse :

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

Étapes suivantes

Concepts des incorporations multimodales