【发布时间】:2020-04-23 01:39:16
【问题描述】:
我正在运行一个 Flask webapp,它接受 /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')).shape 返回 (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')
)
)
【问题讨论】:
标签: python curl flask png python-imaging-library