调用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
相关产品推荐
相关产品推荐

