チュートリアル:Bing Image Search API と C# を使用して画像の詳細情報を抽出する
警告
2020 年 10 月 30 日に、Bing Search API は Azure AI サービスから Bing Search サービスに移行されました。 このドキュメントは、参考用としてのみ提供されています。 更新されたドキュメントについては、Bing search API のドキュメントを参照してください。 Bing 検索用の新しい Azure リソースを作成する手順については、Azure Marketplace からの Bing Search リソースの作成に関するページを参照してください。
Bing Image Search API で使用できるエンドポイントは複数があります。
/details
エンドポイントは画像を含む POST 要求を受け取ります。また、画像に関するさまざまな詳細を返すことができます。 この C# アプリケーションは、この API を使用して画像を送信し、Bing から返された詳細を表示します。これらは次のような JSON オブジェクトです。
このチュートリアルでは、次の方法について説明します。
-
POST
要求で Image Search/details
エンドポイントを使用する - 要求のヘッダーを指定する
- URL パラメーターを使用して結果を指定する
- 画像データをアップロードし、
POST
要求を送信する - コンソールに JSON の結果を出力する
前提条件
- Visual Studio 2017 またはそれ以降の任意のエディション。
画像の詳細の検索要求を構築する
以下は、要求の本文に画像データがある POST 要求を受け取る /details
エンドポイントです。 以下のグローバル エンドポイントを使用するか、Azure portal に表示される、リソースのカスタム サブドメイン エンドポイントを使用できます。
https://api.cognitive.microsoft.com/bing/v7.0/images/details
検索要求の URL を作成する場合、modules
パラメーターを上記のエンドポイントの次に指定し、結果に含める詳細の種類を指定します。
modules=All
-
modules=RecognizedEntities
(画像に表示されている人または場所)
POST 要求で modules=All
を指定して、以下を含む JSON テキストを取得します。
-
bestRepresentativeQuery
- アップロードされた画像に似ている画像を返す Bing クエリ -
detectedObjects
- 画像に含まれるオブジェクト -
image
- 画像のメタデータ -
imageInsightsToken
- 後で画像からRecognizedEntities
(画像に表示される人または場所) を取得する GET 要求のトークン。 -
imageTags
- 画像のタグ -
pagesIncluding
- 画像を含む Web ページ -
relatedSearches
- 画像内の詳細に基づいて検索します。 -
visuallySimilarImages
- Web 上の類似画像。
POST 要求で modules=RecognizedEntities
を指定して imageInsightsToken
のみを取得します。これは後続の GET 要求で画像内の人や場所を識別するために使用できます。
WebClient オブジェクトを作成し、API 要求のヘッダーを設定する
WebClient
オブジェクトを作成し、ヘッダーを設定します。 Bing Search API に対するすべての要求に Ocp-Apim-Subscription-Key
が必要です。 画像をアップロードする POST
要求では、ContentType: multipart/form-data
を指定する必要もあります。
WebClient client = new WebClient();
client.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
client.Headers["ContentType"] = "multipart/form-data";
画像をアップロードして結果を表示する
WebClient
クラスの UpLoadFile()
メソッドは、RequestStream
の書式設定、HttpWebRequest
の呼び出しなど、POST
要求に合わせてデータの書式を設定します。
/details
エンドポイントおよびアップロードする画像ファイルを指定して WebClient.UpLoadFile()
を呼び出します。 JSON 応答を使用して SearchResult
構造体のインスタンスを初期化し、応答を格納します。
const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/images/details";
// The image to upload. Replace with your file and path.
const string imageFile = "your-image.jpg";
byte[] resp = client.UploadFile(uriBase + "?modules=All", imageFile);
var json = System.Text.Encoding.Default.GetString(resp);
// Create result object for return
var searchResult = new SearchResult()
{
jsonResult = json,
relevantHeaders = new Dictionary<String, String>()
};
この JSON 応答は、コンソールに出力することができます。
要求に画像の分析情報トークンを使用する
POST
の結果で返された ImageInsightsToken
を使用するには、GET
要求に追加することができます。 次に例を示します。
https://api.cognitive.microsoft.com/bing/v7.0/images/details?InsightsToken="bcid_A2C4BB81AA2C9EF8E049C5933C546449*ccid_osS7gaos*mid_BF7CC4FC4A882A3C3D56E644685BFF7B8BACEAF2
画像内に識別可能な人物または場所が含まれる場合、この要求はそれらに関する情報を返します。