次の方法で共有


チュートリアル:画像の分析情報トークンを使用して以前の検索から似た画像を見つける

警告

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

Visual Search クライアント ライブラリを使用すると、前に実行された ImageInsightsToken を返す検索からオンラインで画像を検索できます。 このアプリケーションでは ImageInsightsToken を取得し、このトークンをその後の検索で使用します。 その後、ImageInsightsToken を Bing に送信し、Bing Search URL とオンラインで見つかった類似する画像の URL を含む結果を返します。

このチュートリアルのソース コード全体は、追加のエラー処理と注釈を含め、GitHub で入手できます。

前提条件

  • Visual Studio 2019 のいずれかのエディション。
  • Linux/macOS を使用している場合、このアプリケーションは Mono を使用して実行できます。
  • NuGet Visual Search パッケージと Image Search パッケージ。
    • Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、メニューから [NuGet パッケージの管理] を選択します。 Microsoft.Azure.CognitiveServices.Search.CustomSearch パッケージと Microsoft.Azure.CognitiveServices.Search.ImageSearch パッケージをインストールします。 NuGet パッケージをインストールすると、次のものもインストールされます。
      • 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 サービス全体で同じキーとエンドポイントをアプリケーションに使用します。

Bing Image Search クライアント ライブラリから ImageInsightsToken を取得する

このアプリケーションでは、Bing Image Search クライアント ライブラリによって取得された ImageInsightsToken を使用します。 新しい C# コンソール アプリケーションで、ImageSearchClient() を使用して API を呼び出すクライアントを作成します。 その後、クエリで SearchAsync() を使用します。

var client = new ImageSearchClient(new Microsoft.Azure.CognitiveServices.Search.ImageSearch.ApiKeyServiceClientCredentials(subKey));
var imageResults = client.Images.SearchAsync(query: "canadian rockies").Result;
Console.WriteLine("Search images for query \"canadian rockies\"");

imageResults.Value.First() を使用して最初の検索結果を格納した後、画像の分析情報の ImageInsightsToken を格納します。

String insightTok = "None";
if (imageResults.Value.Count > 0)
{
    var firstImageResult = imageResults.Value.First();
    insightTok = firstImageResult.ImageInsightsToken;
}
else
{
    insightTok = "None found";
    Console.WriteLine("Couldn't find image results!");
}

この ImageInsightsToken は、要求で Bing Visual Search に送信されます。

Visual Search の要求に ImageInsightsToken を追加する

Bing Visual Search からの応答に含まれる ImageInsightsToken から ImageInfo オブジェクトを作成することにより、Visual Search の要求に対する ImageInsightsToken を指定します。

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

Bing Visual Search を使用して ImageInsightsToken から画像を検索する

VisualSearchRequest オブジェクトでは、検索対象の画像に関する情報が ImageInfo に含まれます。 VisualSearchMethodAsync() メソッドを使用して結果を取得します。 画像はトークンによって表されるので、画像のバイナリを提供する必要はありません。

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: VisualSearchRequest).Result;

Visual Search の結果を反復処理する

Visual Search の結果は ImageTag オブジェクトです。 各タグには、ImageAction オブジェクトのリストが含まれます。 各 ImageAction には、アクションのタイプに依存する値のリストである Data フィールドが含まれます。 たとえば、visualSearchResults.Tags 内の ImageTag オブジェクトを反復処理して、その中の ImageAction タグを取得できます。 次のサンプルでは、PagesIncluding アクションの詳細が表示されます。

if (visualSearchResults.Tags.Count > 0)
{
    // List of tags
    foreach (ImageTag t in visualSearchResults.Tags)
    {
        foreach (ImageAction i in t.Actions)
        {
            Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " WebSearchURL: " + i.WebSearchUrl);

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

PagesIncluding ActionTypes

アクションのタイプから実際の画像 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);
        }
    }

これらのデータ型の詳細については、「Images - Visual Search (画像 - Visual Search)」を参照してください。

返された URL

完全なアプリケーションでは、次の URL が返されます。

ActionType URL
MoreSizes -> WebSearchUrl
VisualSearch -> WebSearchUrl
ImageById -> WebSearchUrl
RelatedSearches -> WebSearchUrl:
DocumentLevelSuggestions -> WebSearchUrl:
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9&CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVqvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9&CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=PV9GzMFOI0AHZp2gKePJ8DcveSDRE3fP2jHDKMpJSU 8&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3doutdoor&p=DevEx,5831.1

上で示されているように、TopicResults タイプと ImageResults タイプには、関連する画像のクエリが含まれています。 URL は、Bing Search の結果にリンクしています。

次のステップ