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

警告

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

必应图像搜索 API 有多个 端点 可用。 /details 终结点接受具有图像的 POST 请求,并可以返回有关图像的各种详细信息。 C# 应用程序使用 API 发送图像,并显示 Bing 返回的详细信息,这些是 JSON 对象,如下所示:

[JSON 结果]

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

  • /details 请求中使用 POST 图像搜索终结点
  • 指定请求的标头
  • 使用 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 - 用于在后续 GET 请求中从图像获取 RecognizedEntities(图像中可见的人员或位置)的令牌。
  • imageTags - 图像的标签
  • pagesIncluding - 包含图像的网页
  • relatedSearches - 基于图像中的详细信息进行搜索。
  • visuallySimilarImages - Web 上的类似图像。

在 POST 请求中指定 modules=RecognizedEntities,以便仅获取 imageInsightsToken,该请求可用于后续 GET 请求来标识图像中的人员或位置。

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

创建 WebClient 对象并设置标头。 对 Bing 搜索 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

使用 WebClient.UpLoadFile() 调用 /details 终结点和要上传的图像文件。 使用 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

如果图像中存在可识别的人员或位置,此请求将返回有关这些人员的信息。

后续步骤

另请参阅