Share via


チュートリアル:C# 用の Bing Visual Search SDK で画像をトリミングする

警告

2020 年 10 月 30 日に、Bing Search API は Azure AI サービスから Bing Search サービスに移行されました。 このドキュメントは、参考用としてのみ提供されています。 更新されたドキュメントについては、Bing search API のドキュメントを参照してください。 Bing 検索用の新しい Azure リソースを作成する手順については、「Azure Marketplace から Bing Search リソースを作成する」を参照してください。

Bing Visual Search SDK を使用すると、類似したオンライン画像を検索する前に画像をトリミングすることができます。 このアプリケーションでは、複数の人が含まれる画像から 1 人をトリミングした後、オンラインで見つかった似た画像を含む検索結果を返します。

エラー処理と注釈が追加されたこのアプリケーションの完全なソース コードは、GitHub で入手できます。

このチュートリアルでは、次の方法を示します。

  • Bing Visual Search SDK を使用して要求を送信する
  • Bing Visual Search で検索するために画像の範囲をトリミングする
  • 応答を受信して処理する
  • 応答でアクション項目の URL を検索する

前提条件

  • Visual Studio 2019 のいずれかのエディション。
  • Linux/macOS を使用している場合、このアプリケーションは Mono を使用して実行できます。
  • NuGet Custom Search パッケージがインストール済みであること。
    • Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、メニューから [NuGet パッケージの管理] を選択します。 Microsoft.Azure.CognitiveServices.Search.CustomSearch パッケージをインストールします。 NuGet Custom Search パッケージをインストールすると、次のアセンブリもインストールされます。
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Azure リソースを作成する

次のいずれかの Azure リソースを作成して、Bing Visual Search API の使用を開始します。

Bing Search v7 リソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • S9 価格レベルを選択します。

マルチサービス リソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • 複数の 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;

URL データを ImageModuleAction から取得します。

Bing Visual Search の結果は 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 Search の結果にリンクしています。

PagesIncludingActionType イメージの URL の取得

実際の画像 URL を取得するには、キャストにより、ActionType を、値のリストを持つ Data 要素が含まれる ImageModuleAction として読み取る必要があります。 各値は、画像の URL です。 次のコードでは、PagesIncluding アクション タイプを ImageModuleAction にキャストして、値を読み取ります。

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

次のステップ

関連項目

Bing Visual Search API とは