我正在尝试使用 Azure Functions 来使用用 Python 编写的 Form-Recognizer 来包装应用程序。我的问题是使用 BlobTrigger 将 JPEG 转换为 Form-Recognizer 可以使用的格式。
打开图像的基本代码是
from PIL import Image
from io import BytesIO
import azure.functions as func
def main(blobin: func.InputStream, blobout: func.Out[bytes], context: func.Context):
image = Image.open(blobin)
该图像具有类:'PIL.JpegImagePlugin.JpegImageFile'。
调用 Form-Recognizer 分析的代码如下:
base_url = r"<url>" + "/formrecognizer/v1.0-preview/custom"
model_id = "<model-id>"
headers = {
'Content-Type': 'image/jpeg',
'Ocp-Apim-Subscription-Key': '<subscription-key>',
}
resp = None
try:
url = base_url + "/models/" + model_id + "/analyze"
resp = http_post(url = url, data = image, headers = headers)
print("Response status code: %d" % resp.status_code)
except Exception as e:
print(str(e))
不幸的是,http_post 中的 data = image 必须是 class: 'bytes'。
因此,我尝试了各种使用 PIL 将输入图像转换为字节格式的方法。
我的两个主要方法是
with BytesIO() as output:
with Image.open(input_image) as img:
img.save(output, 'JPEG')
image = output.getvalue()
和
image = Image.open(input_image)
imgByteArr = io.BytesIO()
image.save(imgByteArr, format='JPEG')
imgByteArr = imgByteArr.getvalue()
这两种方法都给了我一个字节格式,但是,它仍然不起作用。无论哪种方式,我最终都会得到这样的回应:
{'error': {'code': '2018', 'innerError': {'requestId': '8cff8e76-c11a-4893-8b5d-33d11f7e7646'}, 'message': 'Content parsing error.'}}
有谁知道解决这个问题的正确方法?