_from_response(err.response) from None openai.BadRequestError: Error code: 400 -...
🚨 错误信息
root@dsw-1551458-76f897b777-n9qpn:/mnt/workspace# python ocr_recognize.py
Traceback (most recent call last):
File "/mnt/workspace/ocr_recognize.py", line 12, in <module>
response = client.chat.completions.create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1192, in create
return self._post(
^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
raise self._make_status_error_from_response(err.response) from None
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Invalid param: {"detail":"Failed to load image: cannot identify image file <_io.BytesIO object at 0x7f4aac4392b0>"}', 'type': 'rix_api_error', 'param': '9225df36-257b-413d-8136-87804c3ce44e', 'code': 'param_error'}}
root@dsw-1551458-76f897b777-n9qpn:/mnt/workspace#
🤖 AI解决方案
报错分析报告
1. 错误翻译
原文:Invalid param: {"detail":"Failed to load image: cannot identify image file <_io.BytesIO object at 0x7f4aac4392b0>"}
译文:参数无效:{"detail":"无法加载图像:无法识别图像文件 <_io.BytesIO对象,地址0x7f4aac4392b0>"}
2. 原因分析
- 根本原因:OpenAI API 无法识别你提供的图像数据
- 错误位置:
ocr_recognize.py第12行,调用client.chat.completions.create()方法时 - 具体问题:传递给API的图像数据(BytesIO对象)格式不正确或已损坏,导致无法加载和识别
3. 解决方案
情况一:如果从文件读取图像
import base64
from pathlib import Path
# 确保图像文件存在且可读
image_path = "your_image.jpg"
if Path(image_path).exists():
with open(image_path, "rb") as image_file:
# 读取并编码为base64
base64_image = base64.b64encode(image_file.read()).decode('utf-8')
# 构造消息,确保格式正确
response = client.chat.completions.create(
model="gpt-4-vision-preview", # 或其他支持图像的模型
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "请识别图中的文字"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
max_tokens=300
)
情况二:如果从网络获取图像
# 确保URL有效且返回的是图像数据
image_url = "https://example.com/image.jpg"
response = client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "请识别图中的文字"},
{
"type": "image_url",
"image_url": {
"url": image_url # 确保这是有效的公开URL
}
}
]
}
],
max_tokens=300
)
情况三:修复图像数据验证
from PIL import Image
from io import BytesIO
import base64
def validate_image_data(image_bytes):
"""验证图像数据是否有效"""
try:
# 尝试打开图像
img = Image.open(BytesIO(image_bytes))
img.verify() # 验证图像完整性
print(f"✅ 图像验证通过,格式: {img.format}, 尺寸: {img.size}")
return True
except Exception as e:
print(f"❌ 图像验证失败: {e}")
return False
# 使用验证函数
if validate_image_data(your_image_bytes):
# 图像有效,继续处理
base64_image = base64.b64encode(your_image_bytes).decode('utf-8')
# ... 调用API代码
else:
print("请检查图像文件是否损坏或格式不支持")