チュートリアル:画像の分析情報トークンを使用して以前の検索から似た画像を見つける
警告
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
- Visual Studio のソリューション エクスプローラーでプロジェクトを右クリックし、メニューから [NuGet パッケージの管理] を選択します。
Azure リソースを作成する
次のいずれかの Azure リソースを作成して、Bing Visual Search API の使用を開始します。
- ご自身でリソースを削除するまでは 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 の結果にリンクしています。