Gör videohämtning med hjälp av vektorisering (version 4.0 förhandsversion)

API:er för videohämtning i Azure AI ingår i Azure AI Vision och gör det möjligt för utvecklare att skapa ett index, lägga till dokument (videor och bilder) i det och söka med naturligt språk. Utvecklare kan definiera metadatascheman för varje index och mata in metadata till tjänsten för att hjälpa till med hämtning. Utvecklare kan också ange vilka funktioner som ska extraheras från indexet (vision, tal) och filtrera deras sökning baserat på funktioner.

Förutsättningar

Indatakrav

Format som stöds

File format beskrivning
asf ASF (avancerat/aktivt direktuppspelningsformat)
avi AVI (interfolierad ljudvideo)
flv FLV (Flash Video)
matroskamm, webm Matroska/WebM
mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MOV

Video codecs som stöds

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

Ljud codecs som stöds

Codec Format
aac AAC (Avancerad ljudkodning)
mp3 MP3 (MPEG-ljudskikt 3)
pcm PCM (okomprimerad)
vorbis Vorbis
wmav2 Windows Media Audio 2

Anropa API:erna för videohämtning

Om du vill använda API:erna för videohämtning i ett typiskt mönster gör du följande:

  1. Skapa ett index med PUT – Skapa ett index.
  2. Lägg till videodokument i indexet med PUT – CreateIngestion.
  3. Vänta tills inmatningen har slutförts och kontrollera med GET – ListIngestions.
  4. Sök efter ett nyckelord eller en fras med POST – SearchByText.

API:erna för videohämtning gör det möjligt för en användare att lägga till metadata i videofiler. Metadata är ytterligare information som är associerad med videofiler som "Kamera ID", "Tidsstämpel" eller "Plats" som kan användas för att organisera, filtrera och söka efter specifika videor. Det här exemplet visar hur du skapar ett index, lägger till videofiler med associerade metadata och utför sökningar med olika funktioner.

Steg 1: Skapa ett index

Börja med att skapa ett index för att lagra och organisera videofilerna och deras metadata. Exemplet nedan visar hur du skapar ett index med namnet "my-video-index" med hjälp av API:et Skapa 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'
    }
  ]
}"

Svar:

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

Steg 2: Lägg till videofiler i indexet

Sedan kan du lägga till videofiler i indexet med tillhörande metadata. Exemplet nedan visar hur du lägger till två videofiler i indexet med hjälp av SAS-URL:er med API:et Skapa inmatning .

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

Svar:

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

Steg 3: Vänta tills inmatningen har slutförts

När du har lagt till videofiler i indexet startar inmatningsprocessen. Det kan ta lite tid beroende på storlek och antal filer. För att säkerställa att inmatningen är klar innan du utför sökningar kan du använda API:et Hämta inmatning för att kontrollera statusen. Vänta tills det här anropet returneras "state" = "Completed" innan du fortsätter till nästa steg.

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

Svar:

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

Steg 4: Utföra sökningar med metadata

När du har lagt till videofiler i indexet kan du söka efter specifika videor med hjälp av metadata. Det här exemplet visar två typer av sökningar: en med funktionen "vision" och en annan med hjälp av funktionen "speech".

Sök med funktionen "vision"

Om du vill utföra en sökning med hjälp av funktionen "vision" använder du API:et vision Sök efter text med filtret och anger frågetexten och eventuella andra önskade filter.

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

Svar:

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

Sök med funktionen "speech"

Om du vill utföra en sökning med funktionen "speech" använder du API:et speech Sök efter text med filtret och tillhandahåller frågetexten och andra önskade filter.

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

Svar:

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ästa steg

Begrepp för multimodala inbäddningar