你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用多模式嵌入执行图像检索(版本 4.0)

多模式嵌入 API 支持对图像和文本查询进行矢量化。 这些 API 可将图像转换为多维矢量空间中的坐标。 然后,传入的文本查询也可以转换为矢量,并且图像可以根据语义接近度与文本进行匹配。 这样,用户使用文本就能搜索一组图像,而无需使用图像标记或其他元数据完成这一操作。 语义接近通常会在搜索中产生更好的结果。

2024-02-01 API 包括一个支持通过 102 种语言进行文本搜索的多语言模型。 初始的纯英文模型仍然可用,但不能与同一搜索索引中的新模型组合使用。 如果你使用纯英文模型对文本和图像进行了矢量化,则这些矢量将与多语言文本和图像矢量不兼容。

重要

这些 API 仅在以下区域可用:美国东部、法国中部、韩国中部、北欧、东南亚、西欧、美国西部。

先决条件

  • Azure 订阅 - 免费创建订阅
  • 拥有 Azure 订阅后,请在 Azure 门户中创建计算机视觉资源,以获取密钥和终结点。 请确保在以下一个允许的区域中创建:美国东部、法国中部、韩国中部、北欧、东南亚、西欧、美国西部。
    • 部署后,选择”转到资源”。 将密钥和终结点复制到临时位置以供以后使用。

试用多模式嵌入

可以使用 Vision Studio 快速轻松地在浏览器中试用多模式嵌入功能。

重要

Vision Studio 体验限制为 500 张图像。 要使用更大的图像集,请使用本指南中的 API 创建自己的搜索应用程序。

调用矢量化图像 API

通过 retrieval:vectorizeImage API,可以将图像的数据转换为矢量。 若要调用它,请对以下 cURL 命令进行以下更改:

  1. <endpoint> 替换为 Azure AI 视觉终结点。
  2. <subscription-key> 替换为 Azure AI 视觉密钥。
  3. 在请求正文中,将 "url" 设置为要使用的远程图像的 URL。
  4. (可选)将 model-version 参数更改为旧版本。 2022-04-11 是仅支持英语文本的旧模型。 使用某个模型进行矢量化的图像和文本与其他模型不兼容,因此请确保两者都使用相同的模型。
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://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png'
}"

若要将本地图像矢量化,请将二进制数据放在 HTTP 请求正文中。

API 调用将返回矢量 JSON 对象,该对象定义图像在高维度矢量空间中的坐标。

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

调用矢量化文本 API

retrieval:vectorizeText API 用于将文本字符串转换为矢量。 若要调用它,请对以下 cURL 命令进行以下更改:

  1. <endpoint> 替换为 Azure AI 视觉终结点。
  2. <subscription-key> 替换为 Azure AI 视觉密钥。
  3. 在请求正文中,将 "text" 设置为要使用的示例搜索术语。
  4. (可选)将 model-version 参数更改为旧版本。 2022-04-11 是仅支持英语文本的旧模型。 使用某个模型进行矢量化的图像和文本与其他模型不兼容,因此请确保两者都使用相同的模型。
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'
}"

API 调用将返回矢量 JSON 对象,该对象定义文本字符串在高维矢量空间中的坐标。

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

计算矢量相似性

余弦相似性是用来测量两个矢量相似性的方法。 在图像检索方案中,将搜索查询矢量与每个图像的矢量进行比较。 然后,返回高于特定相似性阈值的图像作为搜索结果。

以下示例代码用于计算两个矢量之间的余弦相似性。 你可以决定相似性阈值用于判定将超过阈值的图像作为搜索结果返回。

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);
}

后续步骤

图像检索概念