教學課程:使用適用於 C# 的 Bing 圖像式搜尋 SDK 裁剪影像

警告

2020 年 10 月 30 日,Bing 搜尋 API 已從 Azure AI 服務移至 Bing 搜尋 服務。 本文件僅供參考之用。 如需更新的文件,請參閱 Bing 搜尋 API 文件。 如需針對 Bing 搜尋建立新 Azure 資源的指示,請參閱透過 Azure Marketplace 建立 Bing 搜尋資源

Bing 圖像式搜尋 SDK 可讓您先裁剪影像再尋找類似的線上影像。 此應用程式會從包含許多人的影像裁剪一人,然後傳回包含線上所找到類似影像的搜尋結果。

GitHub 上有提供此應用程式的完整原始程式碼,其中含有其他的錯誤處理和註釋。

本教學課程說明如何:

  • 使用 Bing 圖像式搜尋 SDK 傳送要求
  • 使用 Bing 圖像式搜尋裁剪要搜尋的影像區域
  • 接收和處理回應
  • 在回應中尋找動作項目的 URL

Prerequisites

  • 任何版本的 Visual Studio 2019
  • 如果您使用 Linux/MacOS,則可以使用 Mono來執行此應用程式。
  • 已安裝 NuGet 自訂搜尋套件。
    • 在 Visual Studio 的 [方案總管] 中,以滑鼠右鍵按一下專案,然後從功能表選取 [管理 NuGet 套件] 。 安裝 Microsoft.Azure.CognitiveServices.Search.CustomSearch 套件。 安裝 NuGet 自訂搜尋套件也會一併安裝下列組件:
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

建立 Azure 資源

藉由建立下列其中一項 Azure 資源,開始使用 Bing 圖像式搜尋 API:

Bing 搜尋 v7 資源

  • 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
  • 選取 S9 定價層。

多服務資源

  • 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
  • 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。

指定影像的裁剪區域

此應用程式會裁剪這個 Microsoft 資深領導團隊影像的區域。 這個裁剪區域會使用左上和右下座標來加以定義,並以整個影像的百分比來表示:

Microsoft 資深領導團隊

系統會藉由從裁剪區域建立 ImageInfo 物件,並將該 ImageInfo 物件載入至 VisualSearchRequest,來裁剪此影像。 ImageInfo 物件也會包含該影像的 URL:

CropArea CropArea = new CropArea(top: (float)0.01, bottom: (float)0.30, left: (float)0.01, right: (float)0.20);
string imageURL = "https://learn.microsoft.com/azure/cognitive-services/Bing-visual-search/media/ms_srleaders.jpg";
ImageInfo imageInfo = new ImageInfo(cropArea: CropArea, url: imageURL);

VisualSearchRequest visualSearchRequest = new VisualSearchRequest(imageInfo: imageInfo);

搜尋類似裁剪區域的影像

VisualSearchRequest 變數包含影像裁剪區域的相關資訊及其 URL。 VisualSearchMethodAsync() 方法會取得結果:

Console.WriteLine("\r\nSending visual search request with knowledgeRequest that contains URL and crop area");
var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: visualSearchRequest).Result;

ImageModuleAction 取得 URL 資料

Bing 圖像式搜尋的結果為 ImageTag 物件。 每個標記都包含 ImageAction 物件清單。 每個 ImageAction 都包含 Data 欄位,這是會取決於動作類型的值清單。

您可以透過下列程式碼來列印各種類型:

Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " -> WebSearchUrl: " + i.WebSearchUrl);

完整應用程式會傳回:

ActionType URL
PagesIncluding WebSearchURL
MoreSizes WebSearchURL
VisualSearch WebSearchURL
ImageById WebSearchURL
RelatedSearches WebSearchURL
Entity -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=BvvDoRtmZ35Xc_UZE4lZx6_eg7FHgcCkigU1D98NHQo&v=1&r=https%3a%2f%2fwww.bing.com%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5380.1
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=3QGtxPb3W9LemuHRxAlW4CW7XN4sPkUYCUynxAqI9zQ&v=1&r=https%3a%2fwww.bing.com%2fdiscover%2fnadella%2bsatya&p=DevEx,5382.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=E40D0E1A13404994ACB073504BC937A4&CID=03DCF882D7386A442137F49BD6596BEF&rd=1&h=l-WNHO89Kkw69AmIGe2MhlUp6MxR6YsJszgOuM5sVLs&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3dSatya%2bNadella&p=DevEx,5384.1

如上所示,Entity ActionType 所包含的 Bing 搜尋查詢,會傳回可辨識人員、地點或物體的相關資訊。 TopicResultsImageResults 類型包含針對相關影像的查詢。 清單中的 URL 會連結至 Bing 搜尋結果。

取得 PagesIncludingActionType 影像的 URL

取得實際的影像 URL 需要進行轉換,以將 ActionType 讀取為 ImageModuleAction,其中包含具有值清單的 Data 元素。 每個值都是某個影像的 URL。 下列程式碼會將 PagesIncluding 動作類型轉換為 ImageModuleAction,並讀取那些值:

    if (i.ActionType == "PagesIncluding")
    {
        foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
        {
            Console.WriteLine("ContentURL: " + o.ContentUrl);
        }
    }

後續步驟

另請參閱

什麼是 Bing 圖像式搜尋 API?