快速入门:使用必应视觉搜索 REST API 和 Python 获取图像见解

警告

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

根据此快速入门中的说明对必应视觉搜索 API 进行第一次调用。 此 Python 应用程序会将一个图像上传到该 API,并显示它返回的信息。 虽然此应用程序是使用 Python 编写的,但 API 是一种 RESTful Web 服务,与大多数编程语言兼容。

先决条件

创建 Azure 资源

通过创建以下 Azure 资源之一开始使用必应视觉搜索 API:

必应搜索 v7 资源

  • 在删除资源前,可通过 Azure 门户使用。
  • 选择 S9 定价层。

多服务资源

  • 在删除资源前,可通过 Azure 门户使用。
  • 在多个 Azure AI 服务中对应用程序使用相同的密钥和终结点。

初始化应用程序

  1. 在你喜欢使用的 IDE 或编辑器中创建一个新的 Python 文件,并添加以下 import 语句:

    import requests, json
    
  2. 为订阅密钥、终结点以及要上传的图像的路径创建变量。 对于 BASE_URI 值,可以使用以下代码中的全局终结点,或者使用资源的 Azure 门户中显示的自定义子域终结点。

    
    BASE_URI = 'https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch'
    SUBSCRIPTION_KEY = 'your-subscription-key'
    imagePath = 'your-image-path'
    
  3. 上传本地图像时,表单数据必须包含 Content-Disposition 标头。 将其 name 参数设置为“image”,并且将 filename 参数设置为映像的文件名。 表单内容包括图像的二进制数据。 可以上传的最大图像大小为 1 MB。

    --boundary_1234-abcd
    Content-Disposition: form-data; name="image"; filename="myimagefile.jpg"
    
    ÿØÿà JFIF ÖÆ68g-¤CWŸþ29ÌÄøÖ‘º«™æ±èuZiÀ)"óÓß°Î= ØJ9á+*G¦...
    
    --boundary_1234-abcd--
    
  4. 创建一个字典对象用于保存请求的标头信息。 将订阅密钥绑定到字符串 Ocp-Apim-Subscription-Key

    HEADERS = {'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY}
    
  5. 创建另一个字典用于包含图像,发送请求时将打开并上传该图像。

    file = {'image' : ('myfile', open(imagePath, 'rb'))}
    

分析 JSON 响应

创建名为 print_json() 的方法,用于接受 API 响应并输出 JSON。

def print_json(obj):
    """Print the object as json"""
    print(json.dumps(obj, sort_keys=True, indent=2, separators=(',', ': ')))

发送请求

使用 requests.post() 向必应视觉搜索 API 发送请求。 请包含终结点、标头和文件信息的字符串。 使用 print_json() 输出 response.json()

try:
    response = requests.post(BASE_URI, headers=HEADERS, files=file)
    response.raise_for_status()
    print_json(response.json())
    
except Exception as ex:
    raise ex

后续步骤