Fazer a recuperação de imagens usando incorporações multimodais (versão 4.0)

As APIs de incorporação multimodal permitem a vetorização de imagens e consultas de texto. Eles convertem imagens em coordenadas em um espaço vetorial multidimensional. Em seguida, as consultas de texto recebidas também podem ser convertidas em vetores e as imagens podem ser correspondidas ao texto com base na proximidade semântica. Isso permite que o usuário pesquise um conjunto de imagens usando texto, sem a necessidade de usar tags de imagem ou outros metadados. A proximidade semântica produz frequentemente melhores resultados na pesquisa.

A 2024-02-01 API inclui um modelo multilingue que suporta a pesquisa de texto em 102 idiomas. O modelo original apenas em inglês ainda está disponível, mas não pode ser combinado com o novo modelo no mesmo índice de pesquisa. Se você vetorizou texto e imagens usando o modelo somente em inglês, esses vetores não serão compatíveis com vetores de texto e imagem multilíngues.

Importante

Essas APIs estão disponíveis apenas em determinadas regiões geográficas. Consulte Disponibilidade da região.

Pré-requisitos

  • Subscrição do Azure - Criar uma gratuitamente
  • Depois de ter sua assinatura do Azure, crie um recurso de Visão Computacional no portal do Azure para obter sua chave e ponto de extremidade. Certifique-se de criá-lo em uma das regiões geográficas suportadas: consulte Disponibilidade da região.
    • Depois de implantar, selecione Ir para recurso. Copie a chave e o ponto de extremidade para um local temporário para usar mais tarde.

Experimente as incorporações multimodais

Você pode experimentar o recurso de incorporação multimodal de forma rápida e fácil em seu navegador usando o Vision Studio.

Importante

A experiência do Vision Studio é limitada a 500 imagens. Para usar um conjunto de imagens maior, crie seu próprio aplicativo de pesquisa usando as APIs deste guia.

Chamar a API de imagem vetorizada

A retrieval:vectorizeImage API permite converter os dados de uma imagem em um vetor. Para chamá-lo, faça as seguintes alterações no comando cURL abaixo:

  1. Substitua <endpoint> pelo seu ponto de extremidade do Azure AI Vision.
  2. Substitua <subscription-key> pela chave do Azure AI Vision.
  3. No corpo da solicitação, defina "url" como a URL de uma imagem remota que você deseja usar.
  4. Opcionalmente, altere o model-version parâmetro para uma versão mais antiga. 2022-04-11 é o modelo legado que suporta apenas texto em inglês. Imagens e texto vetorizados com um determinado modelo não são compatíveis com outros modelos, portanto, certifique-se de usar o mesmo modelo para ambos.
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeImage?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'url':'https://video2.skills-academy.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png'
}"

Para vetorizar uma imagem local, você colocaria os dados binários no corpo da solicitação HTTP.

A chamada de API retorna um objeto JSON vetorial , que define as coordenadas da imagem no espaço vetorial de alta dimensão.

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

Chamar a API de texto vetorizado

A retrieval:vectorizeText API permite converter uma cadeia de texto em um vetor. Para chamá-lo, faça as seguintes alterações no comando cURL abaixo:

  1. Substitua <endpoint> pelo seu ponto de extremidade do Azure AI Vision.
  2. Substitua <subscription-key> pela chave do Azure AI Vision.
  3. No corpo da solicitação, defina "text" como o termo de pesquisa de exemplo que você deseja usar.
  4. Opcionalmente, altere o model-version parâmetro para uma versão mais antiga. 2022-04-11 é o modelo legado que suporta apenas texto em inglês. Imagens e texto vetorizados com um determinado modelo não são compatíveis com outros modelos, portanto, certifique-se de usar o mesmo modelo para ambos.
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeText?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'text':'cat jumping'
}"

A chamada de API retorna um objeto JSON vetorial , que define as coordenadas da cadeia de texto no espaço vetorial de alta dimensão.

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

Calcular semelhança vetorial

A similaridade cossena é um método para medir a semelhança de dois vetores. Em um cenário de recuperação de imagem, você comparará o vetor de consulta de pesquisa com o vetor de cada imagem. As imagens que estão acima de um determinado limite de semelhança podem ser retornadas como resultados da pesquisa.

O código de exemplo a seguir calcula a semelhança cosseno entre dois vetores. Cabe a você decidir qual limite de semelhança usar para retornar imagens como resultados de pesquisa.

public static float GetCosineSimilarity(float[] vector1, float[] vector2)
{ 
    float dotProduct = 0; 
    int length = Math.Min(vector1.Length, vector2.Length); 
    for (int i = 0; i < length; i++) 
    { 
        dotProduct += vector1[i] * vector2[i]; 
    } 
    float magnitude1 = Math.Sqrt(vector1.Select(x => x * x).Sum());
    float magnitude2 = Math.Sqrt(vector2.Select(x => x * x).Sum());
    
    return dotProduct / (magnitude1 * magnitude2);
}

Próximo passo