Durchführen des Videoabrufs mithilfe der Vektorisierung (Version 4.0 Vorschau)

Die Videoabruf-APIs von Azure AI sind Teil von Azure AI Vision und ermöglichen Entwicklern das Erstellen eines Indexes, das Hinzufügen von Dokumenten (Videos und Bildern) und die Suche mit natürlicher Sprache. Entwickler*innen können Metadatenschemas für jeden Index definieren und Metadaten in den Dienst aufnehmen, die Abrufvorgänge unterstützen. Entwickler können auch angeben, welche Merkmale aus dem Index (Vision, Sprache) extrahiert werden sollen, und ihre Suche basierend auf Merkmalen filtern.

Voraussetzungen

Eingabeanforderungen

Unterstützte Formate

Dateiformat Beschreibung
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

Unterstützte Videocodecs

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 Teil 2

Unterstützte Audiocodecs

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

Aufrufen der Videoabruf-APIs

Um die Videoabruf-APIs in einem typischen Muster zu verwenden, würden Sie die folgenden Schritte ausführen:

  1. Erstellen eines Indexes mithilfe von PUT – Erstellen eines Indexes.
  2. Fügen Sie dem Index Videodokumente mithilfe von PUT - CreateIngestion hinzu.
  3. Warten Sie, bis die Aufnahme abgeschlossen ist, und überprüfen Sie mit GET - ListIngestions.
  4. Suchen Sie nach einem Schlüsselwort oder Ausdruck mithilfe von POST - SearchByText.

Mit den Videoabruf-APIs kann ein Benutzer Metadaten zu Videodateien hinzufügen. Metadaten sind zusätzliche Informationen, die mit Videodateien zusammenhängen, wie z. B. „Kamera-ID“, „Zeitstempel“ oder „Standort“, die zum Organisieren, Filtern und Suchen nach bestimmten Videos verwendet werden können. In diesem Beispiel wird veranschaulicht, wie Sie einen Index erstellen, Videodateien mit zugehörigen Metadaten hinzufügen und Suchvorgänge mithilfe verschiedener Merkmale ausführen.

Schritt 1: Erstellen eines Index

Zunächst müssen Sie einen Index erstellen, um die Videodateien und deren Metadaten zu speichern und zu organisieren. Im folgenden Beispiel wird veranschaulicht, wie Sie mit der Create Index-API einen Index mit dem Namen „my-video-index“ erstellen.

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

Antwort:

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

Schritt 2: Hinzufügen von Videodateien zum Index

Als Nächstes können Sie dem Index Videodateien mit den zugehörigen Metadaten hinzufügen. Im folgenden Beispiel wird erklärt, wie Sie mit der Create Ingestion-API dem Index zwei Videodateien mit SAS-URLs hinzufügen.

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

Antwort:

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

Schritt 3: Warten, bis die Erfassung abgeschlossen ist

Nachdem Sie dem Index Videodateien hinzugefügt haben, wird der Erfassungsvorgang gestartet. Je nach Größe und Anzahl von Dateien kann es einige Zeit dauern. Um sicherzustellen, dass die Erfassung abgeschlossen ist, bevor Suchvorgänge ausgeführt werden, können Sie den Status mit der Get Ingestion-API überprüfen. Warten Sie, bis dieser Aufruf "state" = "Completed" zurückgibt, bevor Sie mit dem nächsten Schritt fortfahren.

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

Antwort:

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

Schritt 4: Durchführen von Suchvorgängen mit Metadaten

Nachdem Sie dem Index Videodateien hinzugefügt haben, können Sie mithilfe von Metadaten nach bestimmten Videos suchen. In diesem Beispiel werden zwei Arten von Suchvorgängen veranschaulicht: einer, der das Feature „Vision“ verwendet und eine anderer mit dem Feature „Sprache“.

Suche mit „Vision“-Funktion

Um eine Suche mit der „Vision“-Funktion durchzuführen, verwenden Sie die Search By Text-API mit dem Filter vision und geben damit den Abfragetext und andere gewünschte Filter an.

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

Antwort:

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

Suche mit „Sprache"-Feature

Um eine Suche mit der „Speech“-Funktion durchzuführen, verwenden Sie die Search By Text-API mit dem Filter speech und geben damit den Abfragetext und andere gewünschte Filter an.

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

Antwort:

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

Nächste Schritte

Konzepte für multimodale Einbettungen