Получение сообщения о недопустимой модели с помощью API распознавателя форм Azure

Я пытаюсь использовать Microsoft Azure Form Recognizer API, чтобы загрузить PDF-файл счета и получить внутри него информацию о таблице.

Мне удалось отправить успешный запрос POST.

Но не удалось обучить модель и выдается сообщение об ошибке: «В указанном контейнере больших двоичных объектов Azure не обнаружены допустимые большие двоичные объекты. Пожалуйста, соблюдайте требования к формату / размеру / странице / размерам документа. '.

Но у меня в контейнере для хранения больших двоичных объектов больше 5 файлов.

Я также предоставил общий ключ для контейнера больших двоичных объектов. Вы можете найти написанный мной код и прикрепленную ошибку.

"""
Created on Thu Feb 20 16:22:41 2020

@author: welcome
"""

########## Python Form Recognizer Labeled Async Train #############
import json
import time
from requests import get, post

# Endpoint URL
endpoint = r"https://sctesting.cognitiveservices.azure.com"
post_url = endpoint + r"/formrecognizer/v2.0-preview/custom/models"
print(post_url)
source = '<source url from blob storage>'
prefix = "name of the folder"
includeSubFolders = False
useLabelFile = False

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '<key>',
}

body =  {
    "source": source,
    "sourceFilter": {
        "prefix": prefix,
        "includeSubFolders": includeSubFolders
    },
    "useLabelFile": useLabelFile
}

try:
    resp = post(url = post_url, json = body, headers = headers)
    if resp.status_code != 201:
        print("POST model failed (%s):\n%s" % (resp.status_code, json.dumps(resp.json())))
        quit()
    print("POST model succeeded:\n%s" % resp.headers)
    get_url = resp.headers["location"]
except Exception as e:
    print("POST model failed:\n%s" % str(e))
    quit() 


n_tries = 15
n_try = 0
wait_sec = 3
max_wait_sec = 60
while n_try < n_tries:
    try:
        resp = get(url = get_url, headers = headers)
        resp_json = resp.json()
        if resp.status_code != 200:
            print("GET model failed (%s):\n%s" % (resp.status_code, json.dumps(resp_json)))
            quit()
        model_status = resp_json["modelInfo"]["status"]
        if model_status == "ready":
            print("Training succeeded:\n%s" % json.dumps(resp_json))
            quit()
        if model_status == "invalid":
            print("Training failed. Model is invalid:\n%s" % json.dumps(resp_json))
            quit()
        # Training still running. Wait and retry.
        time.sleep(wait_sec)
        n_try += 1
        wait_sec = min(2*wait_sec, max_wait_sec)     
    except Exception as e:
        msg = "GET model failed:\n%s" % str(e)
        print(msg)
        quit()
print("Train operation did not complete within the allocated time.")

вывод получен в приглашении Anaconda, выполнив приведенный выше код

 POST model succeeded:
{'Content-Length': '0', 'Location': 'https://sctesting.cognitiveservices.azure.com/formrecognizer/v2.0-preview/custom/models/30b7d99b-fc57-466d-a59b-c0d9738c03ac', 'x-envoy-upstream-service-time': '379', 'apim-request-id': '18cbec13-8129-45de-8685-83554e8b35d4', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'x-content-type-options': 'nosniff', 'Date': 'Thu, 20 Feb 2020 19:35:47 GMT'}
Training failed. Model is invalid:
{"modelInfo": {"modelId": "30b7d99b-fc57-466d-a59b-c0d9738c03ac", "status": "invalid", "createdDateTime": "2020-02-20T19:35:48Z", "lastUpdatedDateTime": "2020-02-20T19:35:50Z"}, "trainResult": {"trainingDocuments": [], "errors": [{"code": "2014", "message": "No valid blobs found in the specified Azure blob container. Please conform to the document format/size/page/dimensions requirements."}]}}      

person Adith    schedule 20.02.2020    source источник
comment
Вы указали исходную переменную? Я предполагаю, что вы удалили фрагмент кода из соображений безопасности. Правильно? В противном случае ответ @sebastian кажется правильным ответом.   -  person Ahmadreza    schedule 26.05.2020


Ответы (4)


если вы воспользуетесь инструментом маркировки из распознавателя, чтобы сделать то же самое, сработает ли это? вы поместили файлы в корневой каталог большого двоичного объекта Azure или в подкаталог?

person Xin Zou    schedule 20.02.2020
comment
в подкаталоге @Xin Zou - person Adith; 21.02.2020
comment
если у вас есть файлы в подкаталоге, но в вашем коде есть такая строка: includeSubFolders = False, вам нужно установить для него значение True и убедиться, что префикс правильный. - person Xin Zou; 22.02.2020

Убедитесь, что файлы в вашем контейнере хранилища больших двоичных объектов соответствуют указанным здесь требованиям: https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/overview#custom-model

Если ваши файлы выглядят нормально, также проверьте, какой токен SAS вы используете. Сообщение об ошибке может возникнуть, если вы используете токен SAS, определенный политикой. В этом случае попробуйте переключиться на токен SAS с явными разрешениями, как подробно описано здесь: https://stackoverflow.com/a/60235222/12822344

person Lynsey    schedule 20.02.2020

Вы не указали источник. Вам необходимо создать подпись общего доступа (SAS), когда вы находитесь в меню выбранной учетной записи хранения. Если у вас есть контейнер в этой учетной записи хранения, вам необходимо указать имя контейнера в URL-адресе. БЫВШИЙ. Если у вас есть контейнер с именем "train": "www .... windows.net/?sv = ....." ---> "www .... windows.net/train?sv = ... ... ". В противном случае вы можете попробовать использовать строку «префикс», но я нашел ее ошибочной.

Кроме того, вы не указали ключ подписки.

https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/python-train-extract

person Sebastian Dobrowolski    schedule 25.05.2020

Попробуйте удалить Source Filter из тела. Он должен работать.

person manish kushvah    schedule 11.06.2020