gpt4 book ai didi

python - 通过curl向Flask提交图像失败,错误代码为 "not enough image data'

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:59 28 4
gpt4 key购买 nike

我正在运行一个 Flask Web 应用程序,它接受 /predict 路径上的 POST 请求。调用该应用程序时,会执行以下代码将消息字节转换回 PNG 图像:

from flask import request
from PIL import Image
img = Image.frombytes('RGBA', (512,512), request.data, 'raw')

我通过以下 curl 命令向此 API 提交有效的 512×512 PNG 图像:

curl -i -X POST http://127.0.0.1:5000/predict\
-H "Content-Type: application/octet-stream"\
--data-binary "@/Users/alex/Desktop/test_image_512.png"

请求始终失败,并显示以下数据:

  [...]
File "/Users/alex/Desktop/bob-ross-neural-painter/app/app.py", line 24, in predict
Image.frombytes('RGBA', (512,512), request.data, 'raw')
File "/Users/alex/miniconda3/envs/spell-dev/lib/python3.7/site-packages/PIL/Image.py", line 2542, in frombytes
im.frombytes(data, decoder_name, args)
File "/Users/alex/miniconda3/envs/spell-dev/lib/python3.7/site-packages/PIL/Image.py", line 829, in frombytes
raise ValueError("not enough image data")
ValueError: not enough image data

我已验证 PNG 图像 ( here ) 是本地有效的 512x512 PNG 图像:np.array(Image.open('/Users/alex/Desktop/test_image_512.png'))。形状返回(512, 512, 4)

我似乎无法确定问题的根本原因。图像在传输过程中是否被损坏?

作为引用,以下是完整的路线定义:

@app.route('/predict', methods=['POST'])
def predict():
# bytes -> PIL image -> array -> tensor
img = torch.tensor(
np.array(
Image.frombytes('RGBA', (512,512), request.data, 'raw')
)
)

最佳答案

pillow Image.fromarray 方法需要原始字节图作为输入,并且在给定编码像素字节(例如本例中的 PNG 编码像素。处理这种情况的正确方法是使用 BytesIOImage.open 代替:

with open('test_image_512.png', 'rb') as f:
img_b = f.read()
Image.open(BytesIO(img_b))

关于python - 通过curl向Flask提交图像失败,错误代码为 "not enough image data',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59596382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com