Openai Responses 接口 本地图片分析 API 文档
接口概述
该API允许用户上传图片并获取AI生成的详细描述,支持多种图片格式。
基础概念
- Base64编码:将二进制图片数据转换为文本格式,便于在JSON中传输
- MIME类型:标识图片格式的标准方式(如image/png)
- 数据URI:包含MIME类型和Base64数据的统一格式
接口详情
请求地址
POST https://www.dmxapi.cn/v1/responses请求头
http
Content-Type: application/json
Authorization: Bearer ****** # 替换为你的API密钥请求参数
json
{
"model": "gpt-4.1",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "图片描述提示语"
},
{
"type": "input_image",
"image_url": "data:image/png;base64,..."
}
]
}
]
}Python 示例代码
python
import base64
import json
import os
import requests
# 配置参数
API_KEY = "sk-**************************" # 替换为你的 DMXAPI 令牌
IMAGE_PATH = "generated_image_20251011_164143_1.png" # 本地图片路径
def encode_image_to_base64(filepath):
"""
将图片编码为Base64数据URI
Args:
filepath (str): 图片文件的路径
Returns:
str: 包含MIME类型的Base64数据URI字符串
"""
# 获取文件扩展名确定MIME类型
ext = os.path.splitext(filepath)[1].lower()
# 定义文件扩展名到MIME类型的映射
mime_map = {
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.gif': 'image/gif',
'.webp': 'image/webp'
}
# 根据扩展名获取MIME类型,如果未找到则使用默认类型
mime_type = mime_map.get(ext, 'application/octet-stream')
# 读取并编码图片文件
with open(filepath, "rb") as f:
# 将图片文件读取为二进制数据,然后编码为Base64,最后构造数据URI
return f"data:{mime_type};base64,{base64.b64encode(f.read()).decode('utf-8')}"
# 主程序入口
if __name__ == "__main__":
# 步骤1: 将本地图片编码为Base64格式
print("正在编码图片...")
image_data = encode_image_to_base64(IMAGE_PATH)
# 步骤2: 构造HTTP请求的头部和载荷
# 设置请求头,包含内容类型和授权信息
headers = {
"Content-Type": "application/json", # 指定请求体为JSON格式
"Authorization": f"Bearer {API_KEY}" # 使用Bearer令牌进行身份验证
}
# 构造请求载荷,包含模型名称和输入数据
payload = {
"model": "gpt-4.1", # 指定使用的AI模型
"input": [{
"role": "user", # 指定消息角色为用户
"content": [
{"type": "input_text", "text": "描述这张图片"}, # 文本输入:要求描述图片
{"type": "input_image", "image_url": image_data} # 图片输入:Base64编码的图片数据
]
}]
}
# 步骤3: 发送HTTP请求并处理响应
try:
print("正在发送请求到DMXAPI...")
# 向DMXAPI发送POST请求
response = requests.post(
"https://www.dmxapi.cn/v1/responses", # API端点URL
headers=headers, # 请求头
json=payload # JSON格式的请求体
)
# 检查HTTP状态码,如果不是2xx则抛出异常
response.raise_for_status()
# 解析JSON响应
result = response.json()
print("收到API响应,正在解析...")
# 检查API响应状态
if result.get("status") == "completed":
print("请求处理完成,正在提取结果...")
# 提取输出内容
output = result.get("output", [])
if output and len(output) > 0:
# 获取第一个消息的内容
message = output[0]
content = message.get("content", [])
if content and len(content) > 0:
# 获取文本内容
text_content = content[0]
if text_content.get("type") == "output_text":
# 提取并显示图片描述
description = text_content.get("text", "")
print("\n" + "="*50)
print("图片描述:")
print("="*50)
print(description)
print("="*50)
else:
print("错误:响应中未找到文本内容")
else:
print("错误:响应中没有内容数据")
else:
print("错误:响应中没有输出数据")
else:
# 处理非完成状态的响应
print(f"请求状态: {result.get('status')}")
if result.get("error"):
print(f"API错误信息: {result.get('error')}")
except requests.exceptions.RequestException as e:
# 处理网络请求相关的异常
print(f"网络请求失败: {str(e)}")
except json.JSONDecodeError as e:
# 处理JSON解析失败的异常
print(f"JSON解析失败: {str(e)}")
except Exception as e:
# 处理其他未预期的异常
print(f"其他错误: {str(e)}")错误处理
- 401: API密钥无效
- 400: 请求参数错误
- 413: 图片文件过大
