Получение недопустимого сообщения модели с Azure API распознавателя форм - PullRequest
0 голосов
/ 20 февраля 2020

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

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

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

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

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

"""
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."}]}}      

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

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

Если ваши файлы выглядят нормально, также проверьте, какой вы токен SAS. с помощью. Сообщение об ошибке может появиться, если вы используете токен SAS, определенный в политике, и в этом случае попробуйте переключиться на токен SAS с явными разрешениями, как описано здесь: { ссылка }

0 голосов
/ 20 февраля 2020

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

...