教學課程:使用適用於 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
必要條件
- 任何版本的 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
- 在 Visual Studio 的 [方案總管] 中,以滑鼠右鍵按一下專案,然後從功能表選取 [管理 NuGet 套件]。 安裝
建立 Azure 資源
藉由建立下列其中一項 Azure 資源,開始使用 Bing 圖像式搜尋 API:
- 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
- 選取
S9
定價層。
- 您可以透過 Azure 入口網站取得該資源,直到將其刪除為止。
- 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。
指定影像的裁剪區域
此應用程式會裁剪這個 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%2f%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 搜尋查詢,會傳回可辨識人員、地點或物體的相關資訊。 TopicResults
和 ImageResults
類型包含針對相關影像的查詢。 清單中的 URL 會連結至 Bing 搜尋結果。
取得影像的 PagesIncluding
ActionType
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);
}
}