مكتبة عميل Azure Form Recognizer ل Python - الإصدار 3.3.2

Azure Document Intelligence (المعروف سابقا باسم Form Recognizer) هي خدمة سحابية تستخدم التعلم الآلي لتحليل النص والبيانات المنظمة من مستنداتك. يتضمن الميزات الرئيسية التالية:

  • التخطيط - استخراج المحتوى والبنية (على سبيل المثال، الكلمات وعلامات التحديد والجداول) من المستندات.
  • المستند - تحليل أزواج قيم المفاتيح بالإضافة إلى التخطيط العام من المستندات.
  • القراءة - قراءة معلومات الصفحة من المستندات.
  • تم إنشاؤها مسبقا - استخراج قيم الحقول الشائعة من أنواع مستندات محددة (على سبيل المثال، الإيصالات والفواتير وبطاقات العمل ومستندات المعرف والمستندات الضريبية الأمريكية W-2 وغيرها) باستخدام نماذج تم إنشاؤها مسبقا.
  • مخصص - إنشاء نماذج مخصصة من بياناتك الخاصة لاستخراج قيم الحقول المخصصة بالإضافة إلى التخطيط العام من المستندات.
  • المصنفات - إنشاء نماذج تصنيف مخصصة تجمع بين ميزات التخطيط واللغة لاكتشاف المستندات التي تعالجها وتحديدها بدقة داخل التطبيق الخاص بك.
  • إمكانات الوظيفة الإضافية - استخراج الرموز الشريطية/رموز الاستجابة السريعة والصيغ والخط/النمط وما إلى ذلك أو تمكين وضع الدقة العالية للمستندات الكبيرة باستخدام معلمات اختيارية.

التعليمات البرمجية | المصدرالحزمة (PyPI) | حزمة (Conda) | الوثائق | المرجعية لواجهة برمجة التطبيقاتوثائق | المنتجعينات

الشروع في العمل

المتطلبات الأساسية

تثبيت الحِزَمة

قم بتثبيت مكتبة عميل Azure Form Recognizer ل Python باستخدام pip:

pip install azure-ai-formrecognizer

ملاحظة: يتم تعيين هذا الإصدار من مكتبة العميل افتراضيا إلى 2023-07-31 إصدار الخدمة.

يوضح هذا الجدول العلاقة بين إصدارات SDK وإصدارات واجهة برمجة التطبيقات المدعومة للخدمة:

إصدار SDK إصدار خدمة واجهة برمجة التطبيقات المدعومة
3.3.X - أحدث إصدار GA 2.0، 2.1، 2022-08-31، 2023-07-31 (افتراضي)
3.2.X 2.0، 2.1، 2022-08-31 (افتراضي)
3.1.X 2.0، 2.1 (افتراضي)
3.0.0 2.0

ملاحظة: بدءا من الإصدار 3.2.X، تم تقديم مجموعة جديدة من العملاء للاستفادة من أحدث ميزات خدمة Document Intelligence. يرجى الاطلاع على دليل الترحيل للحصول على إرشادات مفصلة حول كيفية تحديث التعليمات البرمجية للتطبيق من إصدار 3.1.X مكتبة العميل أو إصدار أقل إلى أحدث إصدار. بالإضافة إلى ذلك، راجع Changelog للحصول على مزيد من المعلومات التفصيلية. يصف الجدول أدناه علاقة كل عميل وإصدارات (إصدارات) واجهة برمجة التطبيقات المدعومة الخاصة به:

إصدار واجهة برمجة التطبيقات العملاء المدعومون
2023-07-31 DocumentAnalysisClient و DocumentModelAdministrationClient
2022-08-31 DocumentAnalysisClient و DocumentModelAdministrationClient
2.1 FormRecognizerClient وFormTrainingClient
2.0 FormRecognizerClient وFormTrainingClient

إنشاء خدمات معرفية أو مورد Form Recognizer

يدعم تحليل معلومات المستند الوصول متعدد الخدمات والخدمة الفردية. يمكنك إنشاء مورد الخدمات المعرفية إذا كنت تخطط للوصول إلى خدمات معرفية متعددة ضمن نقطة نهاية/مفتاح فردي. للوصول إلى ذكاء المستند فقط، قم بإنشاء مورد Form Recognizer. يرجى ملاحظة أنك ستحتاج إلى مورد خدمة واحدة إذا كنت تنوي استخدام مصادقة Azure Active Directory.

يمكنك إنشاء أي مورد باستخدام:

فيما يلي مثال على كيفية إنشاء مورد Form Recognizer باستخدام CLI:

# Create a new resource group to hold the Form Recognizer resource
# if using an existing resource group, skip this step
az group create --name <your-resource-name> --location <location>
# Create form recognizer
az cognitiveservices account create \
    --name <your-resource-name> \
    --resource-group <your-resource-group-name> \
    --kind FormRecognizer \
    --sku <sku> \
    --location <location> \
    --yes

لمزيد من المعلومات حول إنشاء المورد أو كيفية الحصول على الموقع ومعلومات sku راجع هنا.

مصادقة العميل

للتفاعل مع خدمة Document Intelligence، ستحتاج إلى إنشاء مثيل لعميل. نقطة النهايةوبيانات الاعتماد ضرورية لإنشاء مثيل لكائن العميل.

الحصول على نقطة النهاية

يمكنك العثور على نقطة النهاية لمورد Form Recognizer باستخدام مدخل Microsoft Azure أو Azure CLI:

# Get the endpoint for the Form Recognizer resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"

يمكن استخدام نقطة نهاية إقليمية أو مجال فرعي مخصص للمصادقة. يتم تنسيقها على النحو التالي:

Regional endpoint: https://<region>.api.cognitive.microsoft.com/
Custom subdomain: https://<resource-name>.cognitiveservices.azure.com/

نقطة النهاية الإقليمية هي نفسها لكل مورد في منطقة. يمكن الرجوع إلى قائمة كاملة بنقاط النهاية الإقليمية المدعومة هنا. يرجى ملاحظة أن نقاط النهاية الإقليمية لا تدعم مصادقة AAD.

من ناحية أخرى، المجال الفرعي المخصص هو اسم فريد لمورد Form Recognizer. لا يمكن استخدامها إلا من قبل موارد خدمة واحدة.

الحصول على مفتاح API

يمكن العثور على مفتاح API في مدخل Microsoft Azure أو عن طريق تشغيل أمر Azure CLI التالي:

az cognitiveservices account keys list --name "<resource-name>" --resource-group "<resource-group-name>"

إنشاء العميل باستخدام AzureKeyCredential

لاستخدام مفتاح API كمعلمة credential ، مرر المفتاح كسلسلة إلى مثيل AzureKeyCredential.

from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<api_key>")
document_analysis_client = DocumentAnalysisClient(endpoint, credential)

إنشاء العميل باستخدام بيانات اعتماد Azure Active Directory

AzureKeyCredential يتم استخدام المصادقة في الأمثلة في دليل البدء هذا، ولكن يمكنك أيضا المصادقة مع Azure Active Directory باستخدام مكتبة هوية azure . لاحظ أن نقاط النهاية الإقليمية لا تدعم مصادقة AAD. إنشاء اسم مجال فرعي مخصص لموردك لاستخدام هذا النوع من المصادقة.

لاستخدام النوع DefaultAzureCredential الموضح أدناه، أو أنواع بيانات الاعتماد الأخرى المتوفرة مع Azure SDK، يرجى تثبيت الحزمة azure-identity :

pip install azure-identity

ستحتاج أيضا إلى تسجيل تطبيق AAD جديد ومنح حق الوصول إلى Document Intelligence عن طريق تعيين "Cognitive Services User" الدور إلى كيان الخدمة الخاص بك.

بمجرد الانتهاء، قم بتعيين قيم معرف العميل ومعرف المستأجر وسر العميل لتطبيق AAD كمتغيرات بيئة: AZURE_CLIENT_ID، ، AZURE_TENANT_IDAZURE_CLIENT_SECRET.

"""DefaultAzureCredential will use the values from these environment
variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
"""
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.identity import DefaultAzureCredential

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
credential = DefaultAzureCredential()

document_analysis_client = DocumentAnalysisClient(endpoint, credential)

المفاهيم الرئيسية

DocumentAnalysisClient

DocumentAnalysisClient يوفر عمليات لتحليل مستندات الإدخال باستخدام نماذج مسبقة الإنشاء ومخصصة من خلال begin_analyze_document واجهات برمجة التطبيقات و begin_analyze_document_from_url . استخدم المعلمة model_id لتحديد نوع النموذج للتحليل. راجع قائمة كاملة بالنماذج المدعومة هنا. DocumentAnalysisClient يوفر أيضا عمليات لتصنيف المستندات من خلال begin_classify_document واجهات برمجة التطبيقات وbegin_classify_document_from_url. يمكن لنماذج التصنيف المخصصة تصنيف كل صفحة في ملف إدخال لتحديد المستند (المستندات) داخل ويمكنها أيضا تحديد مستندات متعددة أو مثيلات متعددة لمستند واحد داخل ملف إدخال.

يتم توفير نماذج القصاصات البرمجية لتوضيح استخدام DocumentAnalysisClient هنا. يمكن العثور على مزيد من المعلومات حول تحليل المستندات، بما في ذلك الميزات المدعومة واللغات وأنواع المستندات في وثائق الخدمة.

DocumentModelAdministrationClient

يوفر DocumentModelAdministrationClient عمليات من أجل:

  • إنشاء نماذج مخصصة لتحليل حقول معينة تحددها عن طريق تسمية مستنداتك المخصصة. DocumentModelDetails يتم إرجاع يشير إلى نوع (أنواع) المستند الذي يمكن للنموذج تحليله، بالإضافة إلى الثقة المقدرة لكل حقل. راجع وثائق الخدمة للحصول على شرح أكثر تفصيلا.
  • إنشاء نموذج مكون من مجموعة من النماذج الموجودة.
  • إدارة النماذج التي تم إنشاؤها في حسابك.
  • سرد العمليات أو الحصول على عملية نموذج محددة تم إنشاؤها خلال آخر 24 ساعة.
  • نسخ طراز مخصص من مورد Form Recognizer إلى مورد آخر.
  • إنشاء نموذج تصنيف مخصص وإدارته لتصنيف المستندات التي تعالجها داخل التطبيق الخاص بك.

يرجى ملاحظة أنه يمكن أيضا إنشاء النماذج باستخدام واجهة مستخدم رسومية مثل Document Intelligence Studio.

يتم توفير نماذج القصاصات البرمجية لتوضيح استخدام DocumentModelAdministrationClient هنا.

عمليات طويلة الأمد

العمليات طويلة الأمد هي عمليات تتكون من طلب أولي تم إرساله إلى الخدمة لبدء عملية، متبوعة باستطلاع الخدمة على فترات لتحديد ما إذا كانت العملية قد اكتملت أو فشلت، وما إذا كانت قد نجحت، للحصول على النتيجة.

يتم تصميم الأساليب التي تحلل المستندات أو نماذج الإنشاء أو نسخ/إنشاء النماذج على أنها عمليات طويلة الأمد. يعرض العميل أسلوبا begin_<method-name> يقوم بإرجاع LROPoller أو AsyncLROPoller. يجب أن ينتظر المتصلون حتى تكتمل العملية عن طريق استدعاء result() كائن الاستقصاء الذي تم إرجاعه من begin_<method-name> الأسلوب . يتم توفير نماذج القصاصات البرمجية لتوضيح استخدام العمليات طويلة الأمد أدناه.

أمثلة

يوفر القسم التالي العديد من القصاصات البرمجية التي تغطي بعض مهام ذكاء المستند الأكثر شيوعا، بما في ذلك:

تخطيط الاستخراج

استخراج النص وعلامات التحديد وأنماط النص وهياكل الجدول، جنبا إلى جنب مع إحداثيات المنطقة المحيطة بها، من المستندات.

from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]

document_analysis_client = DocumentAnalysisClient(
    endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
    poller = document_analysis_client.begin_analyze_document(
        "prebuilt-layout", document=f
    )
result = poller.result()

for idx, style in enumerate(result.styles):
    print(
        "Document contains {} content".format(
            "handwritten" if style.is_handwritten else "no handwritten"
        )
    )

for page in result.pages:
    print("----Analyzing layout from page #{}----".format(page.page_number))
    print(
        "Page has width: {} and height: {}, measured with unit: {}".format(
            page.width, page.height, page.unit
        )
    )

    for line_idx, line in enumerate(page.lines):
        words = line.get_words()
        print(
            "...Line # {} has word count {} and text '{}' within bounding polygon '{}'".format(
                line_idx,
                len(words),
                line.content,
                line.polygon,
            )
        )

        for word in words:
            print(
                "......Word '{}' has a confidence of {}".format(
                    word.content, word.confidence
                )
            )

    for selection_mark in page.selection_marks:
        print(
            "...Selection mark is '{}' within bounding polygon '{}' and has a confidence of {}".format(
                selection_mark.state,
                selection_mark.polygon,
                selection_mark.confidence,
            )
        )

for table_idx, table in enumerate(result.tables):
    print(
        "Table # {} has {} rows and {} columns".format(
            table_idx, table.row_count, table.column_count
        )
    )
    for region in table.bounding_regions:
        print(
            "Table # {} location on page: {} is {}".format(
                table_idx,
                region.page_number,
                region.polygon,
            )
        )
    for cell in table.cells:
        print(
            "...Cell[{}][{}] has content '{}'".format(
                cell.row_index,
                cell.column_index,
                cell.content,
            )
        )
        for region in cell.bounding_regions:
            print(
                "...content on page {} is within bounding polygon '{}'".format(
                    region.page_number,
                    region.polygon,
                )
            )

print("----------------------------------------")

استخدام نموذج المستند العام

تحليل أزواج قيم المفاتيح والجداول والأنماط وعلامات التحديد من المستندات باستخدام نموذج المستند العام الذي توفره خدمة Document Intelligence. حدد نموذج المستند العام عن طريق تمرير model_id="prebuilt-document" إلى begin_analyze_document الأسلوب :

from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]

document_analysis_client = DocumentAnalysisClient(
    endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
    poller = document_analysis_client.begin_analyze_document(
        "prebuilt-document", document=f
    )
result = poller.result()

for style in result.styles:
    if style.is_handwritten:
        print("Document contains handwritten content: ")
        print(",".join([result.content[span.offset:span.offset + span.length] for span in style.spans]))

print("----Key-value pairs found in document----")
for kv_pair in result.key_value_pairs:
    if kv_pair.key:
        print(
                "Key '{}' found within '{}' bounding regions".format(
                    kv_pair.key.content,
                    kv_pair.key.bounding_regions,
                )
            )
    if kv_pair.value:
        print(
                "Value '{}' found within '{}' bounding regions\n".format(
                    kv_pair.value.content,
                    kv_pair.value.bounding_regions,
                )
            )

for page in result.pages:
    print("----Analyzing document from page #{}----".format(page.page_number))
    print(
        "Page has width: {} and height: {}, measured with unit: {}".format(
            page.width, page.height, page.unit
        )
    )

    for line_idx, line in enumerate(page.lines):
        words = line.get_words()
        print(
            "...Line # {} has {} words and text '{}' within bounding polygon '{}'".format(
                line_idx,
                len(words),
                line.content,
                line.polygon,
            )
        )

        for word in words:
            print(
                "......Word '{}' has a confidence of {}".format(
                    word.content, word.confidence
                )
            )

    for selection_mark in page.selection_marks:
        print(
            "...Selection mark is '{}' within bounding polygon '{}' and has a confidence of {}".format(
                selection_mark.state,
                selection_mark.polygon,
                selection_mark.confidence,
            )
        )

for table_idx, table in enumerate(result.tables):
    print(
        "Table # {} has {} rows and {} columns".format(
            table_idx, table.row_count, table.column_count
        )
    )
    for region in table.bounding_regions:
        print(
            "Table # {} location on page: {} is {}".format(
                table_idx,
                region.page_number,
                region.polygon,
            )
        )
    for cell in table.cells:
        print(
            "...Cell[{}][{}] has content '{}'".format(
                cell.row_index,
                cell.column_index,
                cell.content,
            )
        )
        for region in cell.bounding_regions:
            print(
                "...content on page {} is within bounding polygon '{}'\n".format(
                    region.page_number,
                    region.polygon,
                )
            )
print("----------------------------------------")
  • اقرأ المزيد حول الميزات التي يوفرها prebuilt-document النموذج هنا.

استخدام النماذج التي تم إنشاؤها مسبقا

استخراج الحقول من أنواع مستندات محددة مثل الإيصالات والفواتير وبطاقات العمل ومستندات الهوية ومستندات ضريبة W-2 الأمريكية باستخدام نماذج تم إنشاؤها مسبقا توفرها خدمة معلومات المستند.

على سبيل المثال، لتحليل الحقول من إيصال المبيعات، استخدم نموذج الإيصال الذي تم إنشاؤه مسبقا الذي تم توفيره عن طريق تمرير model_id="prebuilt-receipt" إلى begin_analyze_document الأسلوب :

from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]

document_analysis_client = DocumentAnalysisClient(
    endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
    poller = document_analysis_client.begin_analyze_document(
        "prebuilt-receipt", document=f, locale="en-US"
    )
receipts = poller.result()

for idx, receipt in enumerate(receipts.documents):
    print(f"--------Analysis of receipt #{idx + 1}--------")
    print(f"Receipt type: {receipt.doc_type if receipt.doc_type else 'N/A'}")
    merchant_name = receipt.fields.get("MerchantName")
    if merchant_name:
        print(
            f"Merchant Name: {merchant_name.value} has confidence: "
            f"{merchant_name.confidence}"
        )
    transaction_date = receipt.fields.get("TransactionDate")
    if transaction_date:
        print(
            f"Transaction Date: {transaction_date.value} has confidence: "
            f"{transaction_date.confidence}"
        )
    if receipt.fields.get("Items"):
        print("Receipt items:")
        for idx, item in enumerate(receipt.fields.get("Items").value):
            print(f"...Item #{idx + 1}")
            item_description = item.value.get("Description")
            if item_description:
                print(
                    f"......Item Description: {item_description.value} has confidence: "
                    f"{item_description.confidence}"
                )
            item_quantity = item.value.get("Quantity")
            if item_quantity:
                print(
                    f"......Item Quantity: {item_quantity.value} has confidence: "
                    f"{item_quantity.confidence}"
                )
            item_price = item.value.get("Price")
            if item_price:
                print(
                    f"......Individual Item Price: {item_price.value} has confidence: "
                    f"{item_price.confidence}"
                )
            item_total_price = item.value.get("TotalPrice")
            if item_total_price:
                print(
                    f"......Total Item Price: {item_total_price.value} has confidence: "
                    f"{item_total_price.confidence}"
                )
    subtotal = receipt.fields.get("Subtotal")
    if subtotal:
        print(f"Subtotal: {subtotal.value} has confidence: {subtotal.confidence}")
    tax = receipt.fields.get("TotalTax")
    if tax:
        print(f"Total tax: {tax.value} has confidence: {tax.confidence}")
    tip = receipt.fields.get("Tip")
    if tip:
        print(f"Tip: {tip.value} has confidence: {tip.confidence}")
    total = receipt.fields.get("Total")
    if total:
        print(f"Total: {total.value} has confidence: {total.confidence}")
    print("--------------------------------------")

أنت لا تقتصر على الإيصالات! هناك بعض النماذج التي تم إنشاؤها مسبقا للاختيار من بينها، ولكل منها مجموعة خاصة به من الحقول المدعومة. راجع النماذج الأخرى المدعومة التي تم إنشاؤها مسبقا هنا.

إنشاء نموذج مخصص

إنشاء نموذج مخصص على نوع المستند الخاص بك. يمكن استخدام النموذج الناتج لتحليل القيم من أنواع المستندات التي تم تدريبه عليها. قم بتوفير عنوان URL ل SAS للحاوية لحاوية Azure Storage Blob حيث تقوم بتخزين مستندات التدريب.

يمكن العثور على مزيد من التفاصيل حول إعداد حاوية وبنية الملف المطلوبة في وثائق الخدمة.

from azure.ai.formrecognizer import (
    DocumentModelAdministrationClient,
    ModelBuildMode,
)
from azure.core.credentials import AzureKeyCredential

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
container_sas_url = os.environ["CONTAINER_SAS_URL"]

document_model_admin_client = DocumentModelAdministrationClient(
    endpoint, AzureKeyCredential(key)
)
poller = document_model_admin_client.begin_build_document_model(
    ModelBuildMode.TEMPLATE,
    blob_container_url=container_sas_url,
    description="my model description",
)
model = poller.result()

print(f"Model ID: {model.model_id}")
print(f"Description: {model.description}")
print(f"Model created on: {model.created_on}")
print(f"Model expires on: {model.expires_on}")
print("Doc types the model can recognize:")
for name, doc_type in model.doc_types.items():
    print(
        f"Doc Type: '{name}' built with '{doc_type.build_mode}' mode which has the following fields:"
    )
    for field_name, field in doc_type.field_schema.items():
        print(
            f"Field: '{field_name}' has type '{field['type']}' and confidence score "
            f"{doc_type.field_confidence[field_name]}"
        )

تحليل المستندات باستخدام نموذج مخصص

تحليل حقول المستندات والجداول وعلامات التحديد والمزيد. يتم تدريب هذه النماذج باستخدام بياناتك الخاصة، لذلك فهي مصممة خصيصا لمستنداتك. للحصول على أفضل النتائج، يجب عليك فقط تحليل المستندات من نفس نوع المستند الذي تم إنشاء النموذج المخصص باستخدامه.

from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient

endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
model_id = os.getenv("CUSTOM_BUILT_MODEL_ID", custom_model_id)

document_analysis_client = DocumentAnalysisClient(
    endpoint=endpoint, credential=AzureKeyCredential(key)
)

# Make sure your document's type is included in the list of document types the custom model can analyze
with open(path_to_sample_documents, "rb") as f:
    poller = document_analysis_client.begin_analyze_document(
        model_id=model_id, document=f
    )
result = poller.result()

for idx, document in enumerate(result.documents):
    print(f"--------Analyzing document #{idx + 1}--------")
    print(f"Document has type {document.doc_type}")
    print(f"Document has document type confidence {document.confidence}")
    print(f"Document was analyzed with model with ID {result.model_id}")
    for name, field in document.fields.items():
        field_value = field.value if field.value else field.content
        print(
            f"......found field of type '{field.value_type}' with value '{field_value}' and with confidence {field.confidence}"
        )

# iterate over tables, lines, and selection marks on each page
for page in result.pages:
    print(f"\nLines found on page {page.page_number}")
    for line in page.lines:
        print(f"...Line '{line.content}'")
    for word in page.words:
        print(f"...Word '{word.content}' has a confidence of {word.confidence}")
    if page.selection_marks:
        print(f"\nSelection marks found on page {page.page_number}")
        for selection_mark in page.selection_marks:
            print(
                f"...Selection mark is '{selection_mark.state}' and has a confidence of {selection_mark.confidence}"
            )

for i, table in enumerate(result.tables):
    print(f"\nTable {i + 1} can be found on page:")
    for region in table.bounding_regions:
        print(f"...{region.page_number}")
    for cell in table.cells:
        print(
            f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
        )
print("-----------------------------------")

بدلا من ذلك، يمكن أيضا استخدام عنوان URL للمستند لتحليل المستندات باستخدام begin_analyze_document_from_url الأسلوب .

document_url = "<url_of_the_document>"
poller = document_analysis_client.begin_analyze_document_from_url(model_id=model_id, document_url=document_url)
result = poller.result()

إدارة النماذج الخاصة بك

إدارة النماذج المخصصة المرفقة بحسابك.

from azure.ai.formrecognizer import DocumentModelAdministrationClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import ResourceNotFoundError

endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<api_key>")

document_model_admin_client = DocumentModelAdministrationClient(endpoint, credential)

account_details = document_model_admin_client.get_resource_details()
print("Our account has {} custom models, and we can have at most {} custom models".format(
    account_details.custom_document_models.count, account_details.custom_document_models.limit
))

# Here we get a paged list of all of our models
models = document_model_admin_client.list_document_models()
print("We have models with the following ids: {}".format(
    ", ".join([m.model_id for m in models])
))

# Replace with the custom model ID from the "Build a model" sample
model_id = "<model_id from the Build a Model sample>"

custom_model = document_model_admin_client.get_document_model(model_id=model_id)
print("Model ID: {}".format(custom_model.model_id))
print("Description: {}".format(custom_model.description))
print("Model created on: {}\n".format(custom_model.created_on))

# Finally, we will delete this model by ID
document_model_admin_client.delete_document_model(model_id=custom_model.model_id)

try:
    document_model_admin_client.get_document_model(model_id=custom_model.model_id)
except ResourceNotFoundError:
    print("Successfully deleted model with id {}".format(custom_model.model_id))

قدرات الوظيفة الإضافية

يدعم Document Intelligence قدرات تحليل أكثر تعقيدا. يمكن تمكين هذه الميزات الاختيارية وتعطيلها اعتمادا على سيناريو استخراج المستند.

تتوفر إمكانات الوظيفة الإضافية التالية لإصدارات 2023-07-31 (GA) والإصدارات الأحدث:

لاحظ أن بعض قدرات الوظائف الإضافية ستتحمل رسوما إضافية. راجع التسعير: https://azure.microsoft.com/pricing/details/ai-document-intelligence/.

استكشاف الأخطاء وإصلاحها

عام

ستقوم مكتبة عميل Form Recognizer برفع الاستثناءات المحددة في Azure Core. يمكن العثور على رموز الخطأ والرسائل التي تم رفعها بواسطة خدمة Document Intelligence في وثائق الخدمة.

تسجيل الدخول

تستخدم هذه المكتبة مكتبة التسجيل القياسية للتسجيل.

يتم تسجيل المعلومات الأساسية حول جلسات HTTP (عناوين URL والعناوين وما إلى ذلك) في INFO المستوى.

يمكن تمكين تسجيل المستوى التفصيلي DEBUG ، بما في ذلك هيئات الطلب/الاستجابة والعناوين غير المكتملة ، على العميل أو لكل عملية باستخدام وسيطة logging_enable الكلمة الأساسية.

راجع وثائق تسجيل SDK الكاملة مع الأمثلة هنا.

التكوين الاختياري

يمكن تمرير وسيطات الكلمة الأساسية الاختيارية على مستوى العميل وكل عملية. تصف الوثائق المرجعية azure-core التكوينات المتوفرة لإعادة المحاولة والتسجيل وبروتوكولات النقل والمزيد.

الخطوات التالية

المزيد من نماذج التعليمات البرمجية

راجع نموذج README للعديد من القصاصات البرمجية التي توضح الأنماط الشائعة المستخدمة في واجهة برمجة تطبيقات Form Recognizer Python.

وثائق إضافية

للحصول على وثائق أكثر شمولا حول Azure الذكاء الاصطناعي Document Intelligence، راجع وثائق Document Intelligence على docs.microsoft.com.

المساهمة

هذا المشروع يرحب بالمساهمات والاقتراحات. معظم المساهمات تتطلب منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في منحنا حق استخدام مساهمتك. للحصول على التفاصيل، تفضل بزيارة cla.microsoft.com.

عند إرسال طلب سحب، سيحدد روبوت CLA-bot تلقائيًا ما إذا كنت بحاجة إلى تقديم CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال، التسمية أو التعليق). ما عليك سوى اتباع التعليمات التي يقدمها الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع عمليات إعادة الشراء باستخدام CLA الخاص بنا.

اعتمد هذا المشروع مدونة السلوك من المصادر المفتوحة من Microsoft. لمزيد من المعلومات، راجع الأسئلة المتداولة حول قواعد السلوك أو الاتصال opencode@microsoft.com بأي أسئلة أو تعليقات إضافية.