分享方式:


使用多模式內嵌進行影像擷取 (4.0 版)

多模式內嵌 API 可讓您「向量化」影像和文字查詢。 其會將影像轉換成多維度向量空間中的座標。 然後,傳入的文字查詢也可以轉換成向量,且影像可以根據語意接近程度來比對文字。 這可讓使用者使用文字搜尋一組影像,而不需要使用影像標籤或其他中繼資料。 語意接近程度通常會在搜尋中產生更好的結果。

2024-02-01 API 包含多語言模型,可支援 102 種語言的文字搜尋。 原始的僅限英文模型仍可供使用,但無法與相同搜尋索引中的新模型結合。 如果您使用僅限英文的模型向量化文字和影像,則這些向量與多語言文字和影像向量不相容。

重要

這些 API 僅適用於特定地理區域。 請參閱區域可用性 (英文)。

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 請務必在其中一個支援的地理區域中建立它:請參閱區域可用性
    • 在其部署後,選取 [前往資源]。 將金鑰和端點複製到暫存位置,以便稍後使用。

試用多模式內嵌

您可以使用 Vision Studio 快速且輕鬆地在瀏覽器中試用多模式內嵌功能。

重要

Vision Studio 體驗有 500 個影像的限制。 若要使用較大的影像集,請使用本指南中的 API 建立您自己的搜尋應用程式。

呼叫向量化影像 API

retrieval:vectorizeImage API 可讓您將影像的資料轉換成向量。 若要加以呼叫,請對下列 cURL 命令進行以下變更:

  1. 使用您的 Azure AI 視覺端點取代 <endpoint>
  2. 使用您的 Azure AI 視覺金鑰取代 <subscription-key>
  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. 使用您的 Azure AI 視覺端點取代 <endpoint>
  2. 使用您的 Azure AI 視覺金鑰取代 <subscription-key>
  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);
}

後續步驟