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

调用Google Vision API OCR返回400错误,寻求直接请求解决方案

解决Google Vision API OCR Base64请求400错误的实用方案

嘿,我太懂这种直接用Base64调API踩坑的感觉了——毕竟客户端库用不了,存文件又嫌麻烦,直接发请求确实容易栽在细节上。我帮你梳理几个最常见的400错误原因,附上手把手的解决办法:

1. Base64字符串带了多余前缀

这是最容易踩的坑!很多人会把data:image/jpeg;base64,这种前缀一起传给API,但Google Vision API只接受纯Base64编码内容,不能带任何前缀。

举个反例(错误示范):

# 错误:带了不必要的前缀
base64_image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAD..."

正确的做法是只保留编码后的核心部分:

import base64
# 假设processed_image是你处理后的图片二进制数据(比如PIL Image转bytes)
base64_image = base64.b64encode(processed_image).decode('utf-8')
# 得到的就是纯Base64字符串,无任何前缀

2. 请求JSON格式不符合API要求

Vision API对请求体的结构要求很严格,少字段、字段名写错都会返回400。一定要确保你的请求体是标准结构:

{
  "requests": [
    {
      "image": {
        "content": "你的纯Base64字符串"
      },
      "features": [
        {
          "type": "DOCUMENT_TEXT_DETECTION", // 或TEXT_DETECTION,按需选择
          "maxResults": 1
        }
      ]
    }
  ]
}

注意:requests是数组(哪怕只传一张图),features里的type必须是API支持的枚举值,大小写不能错。

3. 图片本身存在问题

  • 检查处理后的图片是否损坏:把Base64字符串解码回二进制,保存成图片看看能不能正常打开。
  • 检查图片大小:Vision API单张图片不能超过20MB,超过会直接返回400。
  • 检查图片格式:确保是API支持的格式(JPEG、PNG、GIF、BMP等),处理后的图片格式不要出错。

完整的Python请求示例

给你一个可以直接参考的代码片段,对比你的代码看看哪里不一样:

import base64
import requests
from PIL import Image
import io

# 模拟你处理图片的过程(旋转、裁剪等)
def process_image(input_image_path):
    with Image.open(input_image_path) as img:
        # 示例:旋转90度
        rotated_img = img.rotate(90)
        # 把处理后的图片转成二进制bytes
        img_byte_arr = io.BytesIO()
        rotated_img.save(img_byte_arr, format='JPEG')
        return img_byte_arr.getvalue()

# 1. 处理图片得到二进制数据
processed_img_bytes = process_image("your_image.jpg")

# 2. 编码成纯Base64字符串
base64_img = base64.b64encode(processed_img_bytes).decode('utf-8')

# 3. 构建请求体
request_body = {
    "requests": [
        {
            "image": {"content": base64_img},
            "features": [{"type": "DOCUMENT_TEXT_DETECTION", "maxResults": 1}]
        }
    ]
}

# 4. 发送请求
API_KEY = "你的Google Cloud API密钥"
response = requests.post(
    f"https://vision.googleapis.com/v1/images:annotate?key={API_KEY}",
    json=request_body
)

# 5. 处理响应
if response.status_code == 200:
    print("OCR结果:", response.json())
else:
    print(f"错误状态码:{response.status_code}")
    print("详细错误信息:", response.json())  # 重点看这里的提示,能直接定位问题!

最后提醒一句:遇到400错误时,一定要打印响应的JSON内容——Google API会返回非常具体的错误原因,比如"message": "Invalid image content."或者"message": "Missing required field 'requests'.",根据这个提示修改比瞎试高效多了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:01:30