表单识别器自定义模型失败,文件类型无效`{"error":{"code":"1000","message":"Invalid input file."}}`

Form Recognizer custom model fails with invalid file type `{"error":{"code":"1000","message":"Invalid input file."}}`

我已经成功地训练了用于键值提取的自定义模型,但是我用来评估模型的任何文件或文件类型都无法 return 结果。到目前为止,我已经尝试过 pdf 和 png 文件。

我已经匹配 the API docs 中提供的查询来创建我的查询,但它仍然失败,有什么建议吗?

import requests
import json
import os
import pathlib

# path of file to evaluate
floc = 'path/to/file'

# extract file type
file_type = pathlib.Path(floc).suffix[1:]

# set headers with file type and our api key
headers = {
    'Content-Type': f'application/{file_type}',
    'Ocp-Apim-Subscription-Key': os.environ["AZURE_FORM_RECOGNIZER_KEY"]
}

# read in the file as binary to send
files = {'file': open(floc, 'rb')}

# post the file to be analysed
r = requests.post(
    f'https://eastus.api.cognitive.microsoft.com/formrecognizer/v2.1/custom/models/{os.environ["MODEL_ID"]}/analyze',
    headers=headers,
    files=files
)

r

结果是 400,错误如下:

{"error":{"code":"1000","message":"Invalid input file."}}

使用 layout/analyze 请求的非常相似的查询非常有效。我也读过 this question 有同样的错误但来自 cURL 但它没有帮助。

我已经解决了我的问题,但我会为其他人留下我的答案。

主要有两个问题:

修复如下:

import requests
import json
import os
import pathlib

# path of file to evaluate
floc = 'path/to/file'

# extract file type
file_type = pathlib.Path(floc).suffix[1:]

# set headers with file type and our api key
headers = {
    'Content-Type': f'application/{file_type}',
    'Ocp-Apim-Subscription-Key': os.environ["AZURE_FORM_RECOGNIZER_KEY"]
}

# post the file to be analysed
r = requests.post(
    f'{endpoint}/formrecognizer/v2.1/custom/models/{os.environ["MODEL_ID"]}/analyze',
    headers=headers, 
    data=open(floc, 'rb') # send binary of your file
)

r

您可以通过转到 form_recognizer:

的 Azure 实例来找到您自己的 endpoint