You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python原生请求向Azure分析图像API传递原始二进制图像

解决Azure图像分析API传递二进制图像的JSON格式错误问题

你当前的写法有两个核心问题:

  • 语法错误:payload = {{'url': contents}} 这种嵌套大括号的写法是无效的Python字典定义,本身就会导致JSON序列化失败。
  • 逻辑错误:Azure的图像分析API接收二进制图像时,不需要把数据放到JSON的url字段里——这个字段是专门用来传图像URL的。传递原始二进制数据时,应该直接把二进制内容作为请求体发送,同时修改请求头的Content-Type。

修正后的代码示例

获取图像二进制数据的部分可以保留,重点修改请求发送逻辑:

import requests
import io
from PIL import Image  # 假设你用PIL处理图像,tmp_imp是PIL图像对象

# 1. 获取内存中的图像二进制数据(这部分保留你的写法)
with io.BytesIO() as output:
    tmp_imp.save(output, format="JPEG")
    image_data = output.getvalue()

# 2. 设置请求头:替换成你的订阅密钥,修改Content-Type为二进制流格式
headers = {
    'Ocp-Apim-Subscription-Key': '你的Azure订阅密钥',
    'Content-Type': 'application/octet-stream'  # 也可以用更具体的image/jpeg
}

# 3. 设置API分析参数,按需调整视觉特征
params = {
    'visualFeatures': 'Categories,Description,Color'
}

# 4. 发送请求:直接把二进制数据传给data参数,无需JSON序列化
analyze_url = 'https://westcentralus.api.cognitive.microsoft.com/vision/v3.2/analyze'  # 替换成你的API端点
response = requests.post(analyze_url, headers=headers, params=params, data=image_data)

# 处理响应
response.raise_for_status()
analysis_results = response.json()
print(analysis_results)

补充说明

  • 如果是读取本地文件的二进制数据,可直接用open('本地图像路径.jpg', 'rb').read()获取,无需经过io.BytesIO(除非你是在内存中处理图像)。
  • 确保analyze_url的区域和你的Azure订阅区域一致,比如换成你实际使用的区域端点。

内容的提问来源于stack exchange,提问作者Nik Ska

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:30:06