教程:使用必应图像搜索 API 和 C# 提取图像详细信息

警告

2020 年 10 月 30 日,必应搜索 API 从 Azure AI 服务迁移到必应搜索服务。 本文档仅供参考。 有关更新的文档,请参阅必应搜索 API 文档。 关于为必应搜索创建新的 Azure 资源的说明,请参阅通过 Azure 市场创建必应搜索资源

通过必应搜索图像 API 可使用多个终结点/details 终结点接受包含图像的 POST 请求,并可以返回有关该图像的各种详细信息。 此 C# 应用程序使用此 API 发送图像,并显示由必应返回的详细信息(即 JSON 对象),如下所示:

[JSON 结果]

本教程介绍了如何完成以下操作:

  • POST 请求中使用图像搜索 /details 终结点
  • 指定请求标头
  • 使用 URL 参数指定结果
  • 上传图像数据并发送 POST 请求
  • 将 JSON 结果传输到控制台

先决条件

构造图像详细信息搜索请求

以下为 /details 终结点,它接受请求正文中包含图像数据的 POST 请求。 可以使用下面的全局终结点,也可以使用资源的 Azure 门户中显示的自定义子域终结点。

https://api.cognitive.microsoft.com/bing/v7.0/images/details

在构造搜索请求 URL 时,modules 参数遵循上述终结点并指定结果将包含的详细信息类型:

  • modules=All
  • modules=RecognizedEntities(图像中可见的人物或地点)

在 POST 请求中指定 modules=All 以获取包含以下内容的 JSON 文本:

  • bestRepresentativeQuery - 返回与上传图像类似图像的必应查询
  • detectedObjects - 图像中找到的对象
  • image - 图像的元数据
  • imageInsightsToken - 之后从图像中获取 RecognizedEntities(图像中可见的人物或地点)的 GET 请求的令牌
  • imageTags - 图像的标记
  • pagesIncluding - 包括该图像的网页
  • relatedSearches - 基于图像中的详细信息的搜索。
  • visuallySimilarImages - Web 上类似的图像。

在 POST 请求中指定 modules=RecognizedEntities 以仅获取 imageInsightsToken,其可用于随后的 GET 请求中以识别图像中的人物或地点。

创建一个 WebClient 对象,并设置 API 请求的标头

创建一个 WebClient 对象,并设置标题。 对必应搜索 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() 方法为 POST 请求设置数据的格式,包括设置 RequestStream 的格式和调用 HttpWebRequest

使用 /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

如果图像中有可识别的人物或地点,则此请求将返回有关它们的信息。

后续步骤

另请参阅