发出请求时 Azure 表单识别器错误属性错误

Azure Form Recognizer error Atribute error when making the request

我正在尝试按照此文档进行表单识别 API, 特别是识别收据的示例:

https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/quickstarts/client-library?pivots=programming-language-python&tabs=windows

我正在尝试以下代码:

import sys
import logging
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
import os
import azure.ai.formrecognizer

endpoint = r"https://form-recognizer-XXXXX-test.cognitiveservices.azure.com/"
form_recognizer_client = FormRecognizerClient(endpoint=endpoint, credential="XXXXXXXXX")
receiptUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/master/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/receipt/contoso-receipt.png"

poller = form_recognizer_client.begin_recognize_receipts_from_url(receiptUrl)
receipts = poller.result()

并收到此错误:

    request.http_request.headers[self._name] = self._credential.key

AttributeError: 'str' object has no attribute 'key'

我看到的不同之处在于,在示例中,端点和密钥被称为 class:

的属性
form_recognizer_client = FormRecognizerClient(endpoint=self.endpoint, credential=AzureKeyCredential(self.key))

但我看不出 "self." 是从哪里来的,为什么这个值不是字符串。

我同意快速入门中该密钥的来源有点不清楚。在该示例中,API 键被设置为 class 变量(self 的来源),但您无需执行此操作即可使您的代码正常工作。

为了成功进行身份验证,字符串 API 密钥 "XXXXXXXXX" 必须包装在凭据 class AzureKeyCredential 中。我已经在下面更新了您的代码来执行此操作,请告诉我它是否适合您:

import sys
import logging
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
import os
import azure.ai.formrecognizer

endpoint = r"https://form-recognizer-XXXXX-test.cognitiveservices.azure.com/"
form_recognizer_client = FormRecognizerClient(endpoint=endpoint, 
    credential=AzureKeyCredential("XXXXXXXXX"))
receiptUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for- 
    python/master/sdk/formrecognizer/azure-ai- 
    formrecognizer/tests/sample_forms/receipt/contoso-receipt.png"

poller = form_recognizer_client.begin_recognize_receipts_from_url(receiptUrl)
receipts = poller.result()