Azure Reconhecedor de Formulários biblioteca de clientes para Python - versão 3.0.0
Azure Cognitive Services Reconhecedor de Formulários é um serviço de nuvem que usa machine learning para reconhecer texto e dados de tabelas a partir de documentos de formulário. Inclui as seguintes funcionalidades principais:
- Modelos personalizados - Reconhecer valores de campo e dados de tabela a partir de formulários. Estes modelos são treinados com os seus próprios dados, por isso são adaptados aos seus formulários.
- Conteúdo API - Reconhecer estruturas de texto e mesa, juntamente com as suas coordenadas de caixa de delimitação, a partir de documentos. Corresponde à API layout do serviço REST.
- Modelo de recibo pré-construído - Reconheça os dados dos recibos de venda dos EUA utilizando um modelo pré-construído.
Código fonte | Pacote (PyPI) | Documentação de| referência da API Documentação | do produto Amostras
Introdução
Pré-requisitos
- Python 2.7, ou 3.5 ou mais tarde é obrigado a usar este pacote.
- Você deve ter uma subscrição Azure e um Serviços Cognitivos ou Reconhecedor de Formulários recurso para usar este pacote.
Instale o pacote
Instale a biblioteca cliente Azure Reconhecedor de Formulários para Python - versão 3.0.0 com pip:
pip install azure-ai-formrecognizer
Nota: Esta versão da biblioteca do cliente suporta a versão v2.0 do serviço Reconhecedor de Formulários
Criar um recurso Reconhecedor de Formulários
Reconhecedor de Formulários suporta o acesso a vários serviços e a um serviço único. Crie um recurso de Serviços Cognitivos se planeia aceder a múltiplos serviços cognitivos sob um único ponto final/tecla. Apenas para Reconhecedor de Formulários o acesso, crie um recurso Reconhecedor de Formulários.
Pode criar o recurso utilizando
Opção 1:Portal Azure
Opção 2:Azure CLI. Abaixo está um exemplo de como pode criar um recurso Reconhecedor de Formulários utilizando o 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 my-resource-group --location westus2
# Create form recognizer
az cognitiveservices account create \
--name form-recognizer-resource \
--resource-group my-resource-group \
--kind FormRecognizer \
--sku F0 \
--location westus2 \
--yes
Autenticar o cliente
Para interagir com o serviço Reconhecedor de Formulários, terá de criar uma instância de um cliente. Um ponto final e credencial são necessários para instantaneaizar o objeto do cliente.
Olhando para o ponto final
Pode encontrar o ponto final para o seu recurso Reconhecedor de Formulários utilizando o Portal Azure ou O Azure CLI:
# Get the endpoint for the form recognizer resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "endpoint"
Obtenha a chave API
A chave API pode ser encontrada no Portal Azure ou executando o seguinte comando Azure CLI:
az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"
Criar o cliente com AzureKeyCredential
Para utilizar uma chave API como credential
parâmetro, passe a chave como uma corda para um exemplo de AzureKeyCredential.
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import FormRecognizerClient
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_recognizer_client = FormRecognizerClient(endpoint, credential)
Criar o cliente com uma credencial Azure Ative Directory
AzureKeyCredential
A autenticação é utilizada nos exemplos deste guia de arranque, mas também pode autenticar com o Azure Ative Directory utilizando a biblioteca de identidade azul .
Note que os pontos finais regionais não suportam a autenticação da AAD. Crie um nome de subdomínio personalizado para o seu recurso para utilizar este tipo de autenticação.
Para utilizar o tipo DefaultAzureCredential apresentado abaixo, ou outros tipos de credenciais fornecidos com o Azure SDK, por favor instale a azure-identity
embalagem:
pip install azure-identity
Também terá de registar uma nova aplicação AAD e conceder acesso a Reconhecedor de Formulários atribuindo o "Cognitive Services User"
papel ao seu diretor de serviço.
Uma vez concluídos, decreta os valores do ID do cliente, identificação de inquilino e segredo de cliente da aplicação AAD como variáveis ambientais: AZURE_CLIENT_ID
, AZURE_TENANT_ID
. . AZURE_CLIENT_SECRET
from azure.identity import DefaultAzureCredential
from azure.ai.formrecognizer import FormRecognizerClient
credential = DefaultAzureCredential()
form_recognizer_client = FormRecognizerClient(
endpoint="https://<my-custom-subdomain>.cognitiveservices.azure.com/",
credential=credential
)
Conceitos-chave
FormulárioRecognizerClient
FormRecognizerClient
Fornece operações para:
- Reconhecendo campos de formulários e conteúdos usando modelos personalizados treinados para reconhecer os seus formulários personalizados. Estes valores são devolvidos numa coleção de
RecognizedForm
objetos. - Reconhecendo campos comuns a partir de recibos dos EUA, usando um modelo de recibo pré-treinado. Estes campos e metadados são devolvidos numa coleção de
RecognizedForm
objetos. - Reconhecendo o conteúdo da forma, incluindo tabelas, linhas e palavras, sem a necessidade de treinar um modelo. O conteúdo do formulário é devolvido numa coleção de
FormPage
objetos.
Os fragmentos de código de amostra são fornecidos para ilustrar usando um FormulárioRecognizerClient aqui.
FormaTrainingClient
FormTrainingClient
Fornece operações para:
- Treinar modelos personalizados sem etiquetas para reconhecer todos os campos e valores encontrados nas suas formas personalizadas. A
CustomFormModel
é devolvido indicando os tipos de formulário que o modelo reconhecerá, e os campos que irá extrair para cada tipo de forma. Consulte a documentação do serviço para obter uma explicação mais detalhada. - Treinar modelos personalizados com etiquetas para reconhecer campos e valores específicos que especifica, rotulando os seus formulários personalizados. A
CustomFormModel
é devolvido indicando os campos que o modelo irá extrair, bem como a precisão estimada para cada campo. Consulte a documentação do serviço para obter uma explicação mais detalhada. - Gestão de modelos criados na sua conta.
- Copiar um modelo personalizado de um Reconhecedor de Formulários recurso para outro.
Tenha em atenção que os modelos também podem ser treinados utilizando uma interface gráfica do utilizador, como a Ferramenta de Rotulagem Reconhecedor de Formulários.
Os fragmentos de código de amostra são fornecidos para ilustrar usando um formTrainingClient aqui.
Operações Long-Running
As operações de longa duração são operações que consistem num pedido inicial enviado ao serviço para iniciar uma operação, seguida de sondagens ao serviço a intervalos para determinar se a operação foi concluída ou falhou, e se conseguiu, para obter o resultado.
Métodos que treinam modelos, reconhecem valores a partir de formulários ou modelos de cópia são modelados como operações de longa duração.
O cliente expõe um begin_<method-name>
método que devolve um LROPoller
ou AsyncLROPoller
. Os chamadores devem esperar que a operação esteja concluída, chamando result()
o objeto poller devolvido do begin_<method-name>
método.
Os fragmentos de código de amostra são fornecidos para ilustrar a utilização de operações de longo prazo abaixo.
Exemplos
A secção seguinte fornece vários fragmentos de código que cobrem algumas das tarefas de Reconhecedor de Formulários mais comuns, incluindo:
- Reconhecer formas usando um modelo personalizado
- Reconhecer conteúdo
- Reconhecer recibos
- Treine um modelo
- Gerir os seus modelos
Reconhecer formas usando um modelo personalizado
Reconhecer pares de nome/valor e dados de tabela a partir de formulários. Estes modelos são treinados com os seus próprios dados, por isso são adaptados aos seus formulários. Para obter melhores resultados, só deve reconhecer formas do mesmo tipo de forma em que o modelo personalizado foi treinado.
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_recognizer_client = FormRecognizerClient(endpoint, credential)
model_id = "<your custom model id>"
with open("<path to your form>", "rb") as fd:
form = fd.read()
poller = form_recognizer_client.begin_recognize_custom_forms(model_id=model_id, form=form)
result = poller.result()
for recognized_form in result:
print("Form type: {}".format(recognized_form.form_type))
for name, field in recognized_form.fields.items():
print("Field '{}' has label '{}' with value '{}' and a confidence score of {}".format(
name,
field.label_data.text if field.label_data else name,
field.value,
field.confidence
))
Alternativamente, um URL de formulário também pode ser usado para reconhecer formas personalizadas usando o begin_recognize_custom_forms_from_url
método.
Os _from_url
métodos existem para todos os métodos de reconhecimento.
form_url = "<url_of_the_form>"
poller = form_recognizer_client.begin_recognize_custom_forms_from_url(model_id=model_id, form_url=form_url)
result = poller.result()
Reconhecer conteúdo
Reconhecer estruturas de texto e mesa, juntamente com as suas coordenadas de caixa de delimitação, a partir de documentos.
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_recognizer_client = FormRecognizerClient(endpoint, credential)
with open("<path to your form>", "rb") as fd:
form = fd.read()
poller = form_recognizer_client.begin_recognize_content(form)
page = poller.result()
table = page[0].tables[0] # page 1, table 1
print("Table found on page {}:".format(table.page_number))
for cell in table.cells:
print("Cell text: {}".format(cell.text))
print("Location: {}".format(cell.bounding_box))
print("Confidence score: {}\n".format(cell.confidence))
Reconhecer recibos
Reconhecer dados de recibos de vendas dos EUA usando um modelo pré-construído. Os campos de recibos reconhecidos pelo serviço podem ser consultados aqui.
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_recognizer_client = FormRecognizerClient(endpoint, credential)
with open("<path to your receipt>", "rb") as fd:
receipt = fd.read()
poller = form_recognizer_client.begin_recognize_receipts(receipt)
result = poller.result()
for receipt in result:
for name, field in receipt.fields.items():
if name == "Items":
print("Receipt Items:")
for idx, items in enumerate(field.value):
print("...Item #{}".format(idx+1))
for item_name, item in items.value.items():
print("......{}: {} has confidence {}".format(item_name, item.value, item.confidence))
else:
print("{}: {} has confidence {}".format(name, field.value, field.confidence))
Preparar um modelo
Treine um modelo personalizado no seu próprio tipo de formulário. O modelo resultante pode ser usado para reconhecer valores a partir dos tipos de formas em que foi treinado. Forneça um URL SAS de contentor ao seu recipiente Azure Storage Blob onde está a armazenar os documentos de treino. Se os ficheiros de treino estiverem dentro de uma subpasta no recipiente, utilize o argumento da palavra-chave de prefixo para especificar em que pasta treinar.
Mais detalhes sobre a configuração de um recipiente e estrutura de arquivo necessária podem ser encontrados na documentação do serviço.
from azure.ai.formrecognizer import FormTrainingClient
from azure.core.credentials import AzureKeyCredential
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_training_client = FormTrainingClient(endpoint, credential)
container_sas_url = "<container-sas-url>" # training documents uploaded to blob storage
poller = form_training_client.begin_training(
container_sas_url, use_training_labels=False
)
model = poller.result()
# Custom model information
print("Model ID: {}".format(model.model_id))
print("Status: {}".format(model.status))
print("Training started on: {}".format(model.training_started_on))
print("Training completed on: {}".format(model.training_completed_on))
print("\nRecognized fields:")
for submodel in model.submodels:
print(
"The submodel with form type '{}' has recognized the following fields: {}".format(
submodel.form_type,
", ".join(
[
field.label if field.label else name
for name, field in submodel.fields.items()
]
),
)
)
# Training result information
for doc in model.training_documents:
print("Document name: {}".format(doc.name))
print("Document status: {}".format(doc.status))
print("Document page count: {}".format(doc.page_count))
print("Document errors: {}".format(doc.errors))
Gerir os seus modelos
Gerencie os modelos personalizados anexados à sua conta.
from azure.ai.formrecognizer import FormTrainingClient
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import ResourceNotFoundError
endpoint = "https://<region>.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("<api_key>")
form_training_client = FormTrainingClient(endpoint, credential)
account_properties = form_training_client.get_account_properties()
print("Our account has {} custom models, and we can have at most {} custom models".format(
account_properties.custom_model_count, account_properties.custom_model_limit
))
# Here we get a paged list of all of our custom models
custom_models = form_training_client.list_custom_models()
print("We have models with the following ids: {}".format(
", ".join([m.model_id for m in custom_models])
))
# Replace with the custom model ID from the "Train a model" sample
model_id = "<model_id from the Train a Model sample>"
custom_model = form_training_client.get_custom_model(model_id=model_id)
print("Model ID: {}".format(custom_model.model_id))
print("Status: {}".format(custom_model.status))
print("Training started on: {}".format(custom_model.training_started_on))
print("Training completed on: {}".format(custom_model.training_completed_on))
# Finally, we will delete this model by ID
form_training_client.delete_model(model_id=custom_model.model_id)
try:
form_training_client.get_custom_model(model_id=custom_model.model_id)
except ResourceNotFoundError:
print("Successfully deleted model with id {}".format(custom_model.model_id))
Resolução de problemas
Geral
Reconhecedor de Formulários biblioteca de clientes irá aumentar as exceções definidas no Núcleo Azure.
Registo
Esta biblioteca utiliza a biblioteca de registos padrão para registar registos. Informações básicas sobre sessões HTTP (URLs, cabeçalhos, etc.) são registadas ao nível info.
A registo detalhado do nível DEBUG, incluindo os órgãos de pedido/resposta e os cabeçalhos não redigidos, pode ser ativado num cliente com o argumento da logging_enable
palavra-chave:
import sys
import logging
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
endpoint = "https://<my-custom-subdomain>.cognitiveservices.azure.com/"
credential = AzureKeyCredential("<api_key>")
# This client will log detailed information about its HTTP sessions, at DEBUG level
form_recognizer_client = FormRecognizerClient(endpoint, credential, logging_enable=True)
Da mesma forma, logging_enable
pode permitir a registo detalhado para uma única operação, mesmo quando não está habilitado para o cliente:
poller = form_recognizer_client.begin_recognize_receipts(receipt, logging_enable=True)
Configuração opcional
Os argumentos de palavras-chave opcionais podem ser transmitidos ao cliente e ao nível por operação. A documentação de referência do núcleo azul descreve as configurações disponíveis para recaídas, registos, protocolos de transporte e muito mais.
Passos seguintes
A secção seguinte fornece vários fragmentos de código que ilustram padrões comuns usados na API python Reconhecedor de Formulários.
Mais código de amostra
Estas amostras de código mostram operações de cenário comum com a biblioteca de clientes Azure Reconhecedor de Formulários.
- Autenticação do cliente: sample_authentication.py
- Reconhecer recibos: sample_recognize_receipts.py
- Reconhecer recibos de um URL: sample_recognize_receipts_from_url.py
- Reconhecer conteúdo: sample_recognize_content.py
- Reconhecer formas personalizadas: sample_recognize_custom_forms.py
- Treine um modelo sem etiquetas: sample_train_model_without_labels.py
- Treine um modelo com rótulos: sample_train_model_with_labels.py
- Gerir modelos personalizados: sample_manage_custom_models.py
- Copiar um modelo entre recursos Reconhecedor de Formulários: sample_copy_model.py
Async APIs
Esta biblioteca também inclui uma API completa async suportada em Python 3.5+. Para usá-lo, primeiro deve instalar um transporte de async, como aiohttp. Os clientes async são encontrados sob o espaço de azure.ai.formrecognizer.aio
nome.
- Autenticação do cliente: sample_authentication_async.py
- Reconhecer recibos: sample_recognize_receipts_async.py
- Reconhecer recibos de um URL: sample_recognize_receipts_from_url_async.py
- Reconhecer conteúdo: sample_recognize_content_async.py
- Reconhecer formas personalizadas: sample_recognize_custom_forms_async.py
- Treine um modelo sem etiquetas: sample_train_model_without_labels_async.py
- Treine um modelo com rótulos: sample_train_model_with_labels_async.py
- Gerir modelos personalizados: sample_manage_custom_models_async.py
- Copiar um modelo entre recursos Reconhecedor de Formulários: sample_copy_model_async.py
Documentação adicional
Para documentação mais extensa sobre os serviços cognitivos da Azure Reconhecedor de Formulários, consulte a documentação Reconhecedor de Formulários sobre docs.microsoft.com.
Contribuir
Agradecemos todas as contribuições e sugestões para este projeto. A maioria das contribuições requerem que celebre um Contrato de Licença de Contribuição (CLA) no qual se declare que tem o direito de conceder e que, na verdade, concede-nos os direitos para utilizar a sua contribuição. Para mais detalhes, visite cla.microsoft.com.
Quando submete um pedido Pull, um bot do CLA determina automaticamente se tem de fornecer um CLA e decorar o PR de forma adequada (por exemplo, etiqueta, comentário). Só tem de seguir as instruções fornecidas pelo bot. Apenas terá de fazer isto uma vez em todos os repositórios com o nosso CLA.
Este projeto adotou o Microsoft Open Source Code of Conduct (Código de Conduta do Microsoft Open Source). Para mais informações consulte o Código de Conduta FAQ ou contacte opencode@microsoft.com com quaisquer perguntas ou comentários adicionais.
Azure SDK for Python