Azure Document Intelligence-Clientbibliothek für Java – Version 4.1.2
Azure Document Intelligence (früher bekannt als Formularerkennung) ist ein Clouddienst, der maschinelles Lernen verwendet, um Text und strukturierte Daten aus Ihren Dokumenten zu analysieren. Es enthält die folgenden Standard Features:
- Layout: Extrahieren Sie Text, Tabellenstrukturen und Auswahlmarkierungen zusammen mit ihren Begrenzungsbereichskoordinaten aus Dokumenten.
- Dokument: Analysieren von Entitäten, Schlüssel-Wert-Paaren, Tabellen und Auswahlzeichen aus Dokumenten mithilfe des allgemeinen vordefinierten Dokumentmodells.
- Vordefiniertes Analysieren von Daten aus bestimmten Arten gängiger Dokumente (z. B. Belege, Rechnungen, Visitenkarten, Identitätsdokumente oder US W2-Steuerformulare) mithilfe vordefinierter Modelle.
- Benutzerdefiniert: Erstellen Sie benutzerdefinierte Modelle, um Text, Feldwerte, Auswahlmarkierungen und Tabellendaten aus Dokumenten zu extrahieren. Benutzerdefinierte Modelle werden mit Ihren eigenen Daten erstellt, sodass sie auf Ihre Dokumente zugeschnitten sind.
- Lesen: Lesen Sie zusätzlich zu Textsprachinformationen Informationen zu Textelementen, z. B. Seitenwörter und Zeilen.
- Klassifizierer: Erstellen Sie benutzerdefinierte Klassifizierer, um Dokumente in vordefinierte Klassen zu kategorisieren.
Quellcode | Paket (Maven) | API-Referenzdokumentation | Produktdokumentation | Proben
Erste Schritte
Voraussetzungen
- Java Development Kit (JDK), Version 8 oder höher.
- Azure-Abonnement
- Cognitive Services oder Formularerkennung Konto, um dieses Paket zu verwenden.
Schließen Sie das Paket ein
BOM-Datei einfügen
Fügen Sie das azure-sdk-bom in Ihr Projekt ein, um die Abhängigkeit von der GA-Version der Bibliothek zu übernehmen. Ersetzen Sie im folgenden Codeausschnitt den Platzhalter {bom_version_to_target} durch die Versionsnummer. Weitere Informationen zur Stückliste finden Sie in der AZURE SDK-BOM-INFODATEI.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Fügen Sie dann die direkte Abhängigkeit ohne versionstag in den Abschnitt abhängigkeiten ein.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-formrecognizer</artifactId>
</dependency>
</dependencies>
Direkte Abhängigkeiten einfügen
Wenn Sie abhängigkeiten von einer bestimmten Version der Bibliothek übernehmen möchten, die in der Stückliste nicht vorhanden ist, fügen Sie die direkte Abhängigkeit wie folgt zu Ihrem Projekt hinzu.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-formrecognizer</artifactId>
<version>4.1.2</version>
</dependency>
Hinweis: Diese Version der Clientbibliothek verwendet standardmäßig die
"2023-07-31"
Version des Diensts.
Diese Tabelle gibt Aufschluss über die Beziehung zwischen SDK-Versionen und unterstützten API-Versionen des Diensts:
SDK-Version | Unterstützte API-Version des Diensts |
---|---|
3.0.x | 2.0 |
3.1.X – 3.1.12 | 2.0, 2.1 (Standard) |
4.0.0 | 2.0, 2.1, 31.08.2022 (Standard) |
4.1.0 | 2.0, 2.1, 2022-08-31, 2023-07-31 (Standard) |
Hinweis: Ab Version 4.0.X wurden neue Clients eingeführt, um die neuesten Features des Formularerkennung-Diensts zu nutzen. Im Migrationshandbuch finden Sie ausführliche Anweisungen zum Aktualisieren von Anwendungscode von Clientbibliotheksversion 3.1.X oder niedriger auf die neueste Version. Weitere Informationen finden Sie unter Changelog. In der folgenden Tabelle wird die Beziehung zwischen den einzelnen Clients und den unterstützten API-Versionen beschrieben:
API-Version | Unterstützte Clients |
---|---|
2023-07-31 | DocumentAnalysisClient und DocumentModelAdministrationClient |
2022-08-31 | DocumentAnalysisClient und DocumentModelAdministrationClient |
2.1 | FormRecognizerClient und FormTrainingClient |
2.0 | FormRecognizerClient und FormTrainingClient |
Erstellen einer Formularerkennungsressource
Formularerkennung unterstützt sowohl den Zugriff mit mehreren diensten als auch den Einzeldienst. Erstellen Sie eine Cognitive Service-Ressource, wenn Sie planen, auf mehrere Cognitive Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie eine Formularerkennungsressource, falls nur auf die Formularerkennung zugegriffen werden soll.
Sie können eine Der folgenden Ressourcen erstellen:
Option 1:Azure-Portal
Option 2:Azure CLI
Im Folgenden finden Sie ein Beispiel dafür, wie Sie eine Formularerkennung-Ressource mithilfe der CLI erstellen können:
# 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-group> --location <location>
# Create Form Recognizer
az cognitiveservices account create \
--name <your-form-recognizer-resource-name> \
--resource-group <your-resource-group> \
--kind FormRecognizer \
--sku <sku> \
--location <location> \
--yes
Authentifizieren des Clients
Um mit dem Formularerkennung-Dienst zu interagieren, müssen Sie eine instance des Dokumentanalyseclients erstellen.
Sowohl die asynchronen als auch die synchronen Clients können mithilfe DocumentAnalysisClientBuilder
von erstellt werden. Beim Aufrufen buildClient()
wird der synchrone Client erstellt, während beim Aufrufen buildAsyncClient
dessen asynchrones Pendant erstellt wird.
Sie benötigen einen Endpunkt und einen Schlüssel , um ein Clientobjekt zu instanziieren.
Nachschlagen des Endpunkts
Sie finden den Endpunkt für Ihre Formularerkennung-Ressource im Azure-Portal oder in der Azure CLI.
# Get the endpoint for the resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "endpoint"
Erstellen eines Dokumentanalyseclients mit AzureKeyCredential
Um die Authentifizierung zu verwenden AzureKeyCredential
, geben Sie den Schlüssel als Zeichenfolge für AzureKeyCredential an.
Diesen Schlüssel finden Sie in der Azure-Portal in Ihrer erstellten Formularerkennung-Ressource oder indem Sie den folgenden Azure CLI-Befehl ausführen, um den Schlüssel aus der Formularerkennung-Ressource abzurufen:
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Verwenden Sie den API-Schlüssel als Anmeldeinformationsparameter, um den Client zu authentifizieren:
DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildClient();
DocumentModelAdministrationClient client =
new DocumentModelAdministrationClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildClient();
Erstellen eines Dokumentanalyseclients mit Azure Active Directory-Anmeldeinformationen
Das Azure SDK für Java unterstützt ein Azure Identity-Paket, das das Abrufen von Anmeldeinformationen von Microsoft Identity Platform vereinfacht.
Die Authentifizierung mit AAD erfordert eine anfängliche Einrichtung:
- Hinzufügen des Azure Identity-Pakets
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.10.0</version>
</dependency>
- Registrieren einer neuen Azure Active Directory-Anwendung
- Gewähren Sie Zugriff auf Formularerkennung, indem Sie die
"Cognitive Services User"
Rolle Ihrem Dienstprinzipal zuweisen.
Nach dem Setup können Sie auswählen, welche Art von Anmeldeinformationen aus azure-identity verwendet werden sollen. Als Beispiel kann DefaultAzureCredential verwendet werden, um den Client zu authentifizieren: Legen Sie die Werte der Client-ID, der Mandanten-ID und des geheimen Clientschlüssels der AAD-Anwendung als Umgebungsvariablen fest: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.
Die Autorisierung ist am einfachsten mit DefaultAzureCredential. Es findet die besten Anmeldeinformationen, die in seiner ausgeführten Umgebung verwendet werden können. Weitere Informationen zur Verwendung der Azure Active Directory-Autorisierung mit Formularerkennung finden Sie in der zugehörigen Dokumentation.
DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
.endpoint("{endpoint}")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Wichtige Begriffe
DocumentAnalysisClient
DocumentAnalysisClient und DocumentAnalysisAsyncClient bieten synchrone und asynchrone Vorgänge zum Analysieren von Eingabedokumenten mithilfe benutzerdefinierter und vordefinierter Modelle über die beginAnalyzeDocument
Methoden undbeginAnalyzeDocumentFromUrl
.
Eine vollständige Liste der unterstützten Modelle finden Sie hier.
Beispielcodeausschnitte, um die Verwendung eines DocumentAnalysisClients zu veranschaulichen. Weitere Informationen zur Analyse von Dokumenten, einschließlich unterstützter Features, Gebietsschemas und Dokumenttypen, finden Sie hier.
DocumentModelAdministrationClient
DocumentModelAdministrationClient und DocumentModelAdministrationAsyncClient bieten sowohl synchrone als auch asynchrone Vorgänge.
- Erstellen Sie benutzerdefinierte Dokumentanalysemodelle, um Textinhalte, Felder und Werte in Ihren benutzerdefinierten Dokumenten zu analysieren. Siehe Beispiel Erstellen eines Dokumentmodells.
Ein
DocumentModelDetails
wird zurückgegeben, der die Dokumenttypen angibt, die das Modell analysieren kann, zusammen mit den Feldern und Schemas, die es extrahieren wird. - Verwalten von Modellen, die in Ihrem Konto erstellt wurden, indem Sie ihr Konto erstellen, auflisten, löschen und die Grenzwerte für benutzerdefinierte Modelle Ihres Kontos anzeigen. Weitere Informationen finden Sie unter Beispiel verwalten von Modellen.
- Kopieren eines benutzerdefinierten Modells aus einer Formularerkennungsressource in eine andere
- Erstellen eines zusammengesetzten Modells aus einer Sammlung vorhandener erstellter Modelle.
- Auflisten von Dokumentmodellvorgängen, die der Formularerkennung Ressource zugeordnet sind.
Beispielcodeausschnitte werden bereitgestellt, um die Verwendung eines DocumentModelAdministrationClient-Beispiels zu veranschaulichen.
Zeitintensive Vorgänge
Vorgänge mit langer Ausführungsdauer sind Vorgänge, die aus einer anfänglichen Anforderung bestehen, die an den Dienst gesendet wird, um einen Vorgang zu starten, gefolgt von der Abfrage des Diensts in Intervallen, um festzustellen, ob der Vorgang abgeschlossen oder fehlgeschlagen ist, und ob er erfolgreich war, um das Ergebnis zu erhalten.
Methoden, die Modelle erstellen, Werte aus Dokumenten analysieren oder Modelle kopieren und verfassen, werden als Vorgänge mit langer Ausführungsdauer modelliert.
Der Client macht eine begin<MethodName>
Methode verfügbar, die eine oder PollerFlux
instance SyncPoller
zurückgibt.
Aufrufer sollten warten, bis der Vorgang abgeschlossen ist, indem sie für den zurückgegebenen Vorgang von der begin<MethodName>
-Methode aufrufengetFinalResult()
. Beispielcodeausschnitte werden bereitgestellt, um die Verwendung von Vorgängen mit langer Ausführungszeit unten zu veranschaulichen.
Beispiele
Der folgende Abschnitt enthält mehrere Codeausschnitte, die einige der gängigsten Formularerkennung Aufgaben abdecken, einschließlich:
- Extrahieren des Layouts
- Verwenden eines allgemeinen Dokumentmodells
- Verwenden vordefinierter Modelle
- Erstellen eines Dokumentmodells
- Analysieren von Dokumenten mithilfe eines benutzerdefinierten Modells
- Verwalten Ihrer Modelle
- Klassifizieren eines Dokuments
Extrahieren des Layouts
Extrahieren Sie Text, Tabellenstrukturen und Auswahlzeichen wie Optionsfelder und Kontrollkästchen sowie deren Begrenzungsrahmenkoordinaten aus Dokumenten, ohne dass ein Modell erstellt werden muss.
// analyze document layout using file input stream
File layoutDocument = new File("local/file_path/filename.png");
Path filePath = layoutDocument.toPath();
BinaryData layoutDocumentData = BinaryData.fromFile(filePath, (int) layoutDocument.length());
SyncPoller<OperationResult, AnalyzeResult> analyzeLayoutResultPoller =
documentAnalysisClient.beginAnalyzeDocument("prebuilt-layout", layoutDocumentData);
AnalyzeResult analyzeLayoutResult = analyzeLayoutResultPoller.getFinalResult();
// pages
analyzeLayoutResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding box %s with confidence %.2f.%n",
documentSelectionMark.getSelectionMarkState().toString(),
documentSelectionMark.getBoundingPolygon().toString(),
documentSelectionMark.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeLayoutResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n", documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
Verwenden eines allgemeinen Dokumentmodells
Analysieren Sie Schlüssel-Wert-Paare, Tabellen, Stile und Auswahlmarkierungen aus Dokumenten mithilfe des allgemeinen Dokumentmodells, das vom Formularerkennung-Dienst bereitgestellt wird. Wählen Sie das Allgemeine Dokumentmodell aus, indem Sie modelId="prebuilt-document" wie folgt an die beginAnalyzeDocumentFromUrl-Methode übergeben:
String documentUrl = "{document-url}";
String modelId = "prebuilt-document";
SyncPoller<OperationResult, AnalyzeResult> analyzeDocumentPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();
for (int i = 0; i < analyzeResult.getDocuments().size(); i++) {
final AnalyzedDocument analyzedDocument = analyzeResult.getDocuments().get(i);
System.out.printf("----------- Analyzing document %d -----------%n", i);
System.out.printf("Analyzed document has doc type %s with confidence : %.2f%n",
analyzedDocument.getDocType(), analyzedDocument.getConfidence());
}
analyzeResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n",
documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
// Key-value
analyzeResult.getKeyValuePairs().forEach(documentKeyValuePair -> {
System.out.printf("Key content: %s%n", documentKeyValuePair.getKey().getContent());
System.out.printf("Key content bounding region: %s%n",
documentKeyValuePair.getKey().getBoundingRegions().toString());
System.out.printf("Value content: %s%n", documentKeyValuePair.getValue().getContent());
System.out.printf("Value content bounding region: %s%n", documentKeyValuePair.getValue().getBoundingRegions().toString());
});
Verwenden vordefinierter Modelle
Extrahieren Sie Felder aus ausgewählten Dokumenttypen wie Quittungen, Rechnungen, Visitenkarten und Identitätsdokumenten mithilfe vordefinierter Modelle, die vom Formularerkennung-Dienst bereitgestellt werden. Unterstützte vordefinierte Modelle sind:
- Analysieren von Belegen mithilfe des
prebuilt-receipt
Modells (vom Dienst erkannte Felder finden Sie hier). - Analysieren Von Visitenkarten mit dem
prebuilt-businessCard
Modell (vom Dienst erkannte Felder finden Sie hier). - Analysieren Sie Rechnungen mit dem
prebuilt-invoice
Modell (die vom Dienst erkannten Felder finden Sie hier). - Analysieren Sie Identitätsdokumente mithilfe des
prebuilt-idDocuments
Modells (vom Dienst erkannte Felder finden Sie hier). - Analysieren Sie US W2-Steuerformulare mithilfe des
prebuilt-tax.us.w2
Modells. Unterstützte Felder.
So analysieren Sie beispielsweise Felder aus einem Verkaufsbeleg in die beginAnalyzeDocumentFromUrl
-Methode:
String receiptUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/main/sdk/formrecognizer"
+ "/azure-ai-formrecognizer/src/samples/resources/sample-documents/receipts/contoso-allinone.jpg";
SyncPoller<OperationResult, AnalyzeResult> analyzeReceiptPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl("prebuilt-receipt", receiptUrl);
AnalyzeResult receiptResults = analyzeReceiptPoller.getFinalResult();
for (int i = 0; i < receiptResults.getDocuments().size(); i++) {
AnalyzedDocument analyzedReceipt = receiptResults.getDocuments().get(i);
Map<String, DocumentField> receiptFields = analyzedReceipt.getFields();
System.out.printf("----------- Analyzing receipt info %d -----------%n", i);
DocumentField merchantNameField = receiptFields.get("MerchantName");
if (merchantNameField != null) {
if (DocumentFieldType.STRING == merchantNameField.getType()) {
String merchantName = merchantNameField.getValueAsString();
System.out.printf("Merchant Name: %s, confidence: %.2f%n",
merchantName, merchantNameField.getConfidence());
}
}
DocumentField merchantPhoneNumberField = receiptFields.get("MerchantPhoneNumber");
if (merchantPhoneNumberField != null) {
if (DocumentFieldType.PHONE_NUMBER == merchantPhoneNumberField.getType()) {
String merchantAddress = merchantPhoneNumberField.getValueAsPhoneNumber();
System.out.printf("Merchant Phone number: %s, confidence: %.2f%n",
merchantAddress, merchantPhoneNumberField.getConfidence());
}
}
DocumentField transactionDateField = receiptFields.get("TransactionDate");
if (transactionDateField != null) {
if (DocumentFieldType.DATE == transactionDateField.getType()) {
LocalDate transactionDate = transactionDateField.getValueAsDate();
System.out.printf("Transaction Date: %s, confidence: %.2f%n",
transactionDate, transactionDateField.getConfidence());
}
}
DocumentField receiptItemsField = receiptFields.get("Items");
if (receiptItemsField != null) {
System.out.printf("Receipt Items: %n");
if (DocumentFieldType.LIST == receiptItemsField.getType()) {
List<DocumentField> receiptItems = receiptItemsField.getValueAsList();
receiptItems.stream()
.filter(receiptItem -> DocumentFieldType.MAP == receiptItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
if ("Name".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Name: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double quantity = documentField.getValueAsDouble();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
}));
}
}
}
Weitere Informationen und Beispiele für die Verwendung vordefinierter Modelle finden Sie unter:
Erstellen eines Dokumentmodells
Erstellen Sie ein durch maschinelles Lernen erlerntes Modell für Ihren eigenen Dokumenttyp. Das resultierende Modell kann Werte aus den Dokumenttypen analysieren, auf der es erstellt wurde. Geben Sie eine CONTAINER-SAS-URL für Ihren Azure Storage-Blobcontainer an, in dem Sie die Trainingsdokumente speichern. Ausführliche Informationen zum Einrichten finden Sie in der Schnellstartdokumentation des Diensts.
Hinweis
Sie können die Formularerkennung Studio-Vorschau verwenden, um eine beschriftete Datei für Ihre Trainingsformulare zu erstellen. Weitere Informationen zum Einrichten eines Containers und zur erforderlichen Dateistruktur finden Sie hier.
// Build custom document analysis model
String blobContainerUrl = "{SAS_URL_of_your_container_in_blob_storage}";
// The shared access signature (SAS) Url of your Azure Blob Storage container with your forms.
String prefix = "{blob_name_prefix}}";
SyncPoller<OperationResult, DocumentModelDetails> buildOperationPoller =
documentModelAdminClient.beginBuildDocumentModel(blobContainerUrl,
DocumentModelBuildMode.TEMPLATE,
prefix,
new BuildDocumentModelOptions().setModelId("my-build-model").setDescription("model desc"),
Context.NONE);
DocumentModelDetails documentModelDetails = buildOperationPoller.getFinalResult();
// Model Info
System.out.printf("Model ID: %s%n", documentModelDetails.getModelId());
System.out.printf("Model Description: %s%n", documentModelDetails.getDescription());
System.out.printf("Model created on: %s%n%n", documentModelDetails.getCreatedOn());
documentModelDetails.getDocumentTypes().forEach((key, documentTypeDetails) -> {
System.out.printf("Document type: %s%n", key);
documentTypeDetails.getFieldSchema().forEach((name, documentFieldSchema) -> {
System.out.printf("Document field: %s%n", name);
System.out.printf("Document field type: %s%n", documentFieldSchema.getType().toString());
System.out.printf("Document field confidence: %.2f%n", documentTypeDetails.getFieldConfidence().get(name));
});
});
Analysieren von Dokumenten mithilfe eines benutzerdefinierten Modells
Analysieren Sie die Schlüssel-Wert-Paare und Tabellendaten aus Dokumenten. Diese Modelle werden mit Ihren eigenen Daten erstellt, sodass sie auf Ihre Dokumente zugeschnitten sind. Sie sollten nur Dokumente mit demselben Dokumenttyp analysieren, auf dem das benutzerdefinierte Modell erstellt wurde.
String documentUrl = "{document-url}";
String modelId = "{custom-built-model-ID}";
SyncPoller<OperationResult, AnalyzeResult> analyzeDocumentPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();
for (int i = 0; i < analyzeResult.getDocuments().size(); i++) {
final AnalyzedDocument analyzedDocument = analyzeResult.getDocuments().get(i);
System.out.printf("----------- Analyzing custom document %d -----------%n", i);
System.out.printf("Analyzed document has doc type %s with confidence : %.2f%n",
analyzedDocument.getDocType(), analyzedDocument.getConfidence());
analyzedDocument.getFields().forEach((key, documentField) -> {
System.out.printf("Document Field content: %s%n", documentField.getContent());
System.out.printf("Document Field confidence: %.2f%n", documentField.getConfidence());
System.out.printf("Document Field Type: %s%n", documentField.getType());
System.out.printf("Document Field found within bounding region: %s%n",
documentField.getBoundingRegions().toString());
});
}
analyzeResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n",
documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
Verwalten Ihrer Modelle
Verwalten Sie die Modelle in Ihrem Formularerkennung-Konto.
AtomicReference<String> modelId = new AtomicReference<>();
// First, we see how many models we have, and what our limit is
ResourceDetails resourceDetails = documentModelAdminClient.getResourceDetails();
System.out.printf("The resource has %s models, and we can have at most %s models",
resourceDetails.getCustomDocumentModelCount(), resourceDetails.getCustomDocumentModelLimit());
// Next, we get a paged list of all of our models
PagedIterable<DocumentModelSummary> customDocumentModels = documentModelAdminClient.listDocumentModels();
System.out.println("We have following models in the account:");
customDocumentModels.forEach(documentModelSummary -> {
System.out.printf("Model ID: %s%n", documentModelSummary.getModelId());
modelId.set(documentModelSummary.getModelId());
// get custom document analysis model info
DocumentModelDetails documentModel = documentModelAdminClient.getDocumentModel(documentModelSummary.getModelId());
System.out.printf("Model ID: %s%n", documentModel.getModelId());
System.out.printf("Model Description: %s%n", documentModel.getDescription());
System.out.printf("Model created on: %s%n", documentModel.getCreatedOn());
documentModel.getDocumentTypes().forEach((key, documentTypeDetails) -> {
documentTypeDetails.getFieldSchema().forEach((field, documentFieldSchema) -> {
System.out.printf("Field: %s", field);
System.out.printf("Field type: %s", documentFieldSchema.getType());
System.out.printf("Field confidence: %.2f", documentTypeDetails.getFieldConfidence().get(field));
});
});
});
// Delete Model
documentModelAdminClient.deleteDocumentModel(modelId.get());
Klassifizieren eines Dokuments
Der Formularerkennung-Dienst unterstützt benutzerdefinierte Dokumentklassifizierer, die Dokumente basierend auf einem Trainingsdataset in einen Satz vordefinierter Kategorien klassifizieren können.
Dokumente können mit einem benutzerdefinierten Klassifizierer mithilfe der beginClassifyDocument
- oder beginClassifyDocumentFromUrl
-Methode von DocumentAnalysisClient
klassifiziert werden.
Im folgenden Beispiel wird gezeigt, wie Sie ein Dokument mithilfe eines benutzerdefinierten Klassifizierers klassifizieren:
String documentUrl = "{file_source_url}";
String classifierId = "{custom_trained_classifier_id}";
documentAnalysisClient.beginClassifyDocumentFromUrl(classifierId, documentUrl, Context.NONE)
.getFinalResult()
.getDocuments()
.forEach(analyzedDocument -> System.out.printf("Doc Type: %s%n", analyzedDocument.getDocType()));
Ausführlichere Beispiele finden Sie in den Beispielen.
Problembehandlung
Allgemein
Formularerkennung Clients lösen Ausnahmen ausHttpResponseException
. Wenn Sie z. B. versuchen, eine ungültige Dateiquellen-URL anzugeben, wird eine HttpResponseException
mit einem Hinweis auf die Fehlerursache ausgelöst.
Im folgenden Codeausschnitt wird der Fehler ordnungsgemäß behandelt, indem die Ausnahme abgefangen wird und zusätzliche Fehlerinformationen angezeigt werden.
try {
documentAnalysisClient.beginAnalyzeDocumentFromUrl("prebuilt-receipt", "invalidSourceUrl");
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
// Do something with the exception
}
Aktivieren der Clientprotokollierung
Azure SDKs für Java bieten einen konsistenten Protokollierungsverlauf, um die Problembehandlung von Anwendungsfehlern zu unterstützen und deren Lösung zu beschleunigen. Die erstellten Protokolle erfassen den Flow einer Anwendung, bevor sie den Endzustand erreichen. Dies trägt zur Ermittlung der Grundursache bei. Informationen zum Aktivieren der Protokollierung finden Sie im Protokollierungswiki.
HTTP-Standardclient
Alle Clientbibliotheken verwenden standardmäßig den Netty-HTTP-Client. Fügen Sie die oben genannte Abhängigkeit hinzu, um die Clientbibliothek automatisch für die Verwendung des Netty-HTTP-Clients zu konfigurieren. Das Konfigurieren oder Ändern des HTTP-Clients wird detailliert im Wiki zu HTTP-Clients beschrieben.
Nächste Schritte
Der folgende Abschnitt enthält mehrere Codeausschnitte, die gängige Muster veranschaulichen, die in der Formularerkennung-API verwendet werden. Diese Codebeispiele zeigen allgemeine Szenariovorgänge mit der Azure Formularerkennung-Clientbibliothek.
- Analysieren von geschäftsspezifischen Karte über eine URL: AnalyzeBusinessCardFromUrl
- Analysieren von Identitätsdokumenten aus einer URL: AnalyzeIdentityDocumentsFromUrl
- Analysieren der Rechnung über eine URL: AnalyzeInvoiceFromUrl
- Analysieren von Belegen: AnalyzeReceipts
- Analysieren von Belegen aus einer URL: AnalyzeReceiptsFromUrl
- Extrahieren des Layouts: AnalyzeLayout
- Analysieren von benutzerdefinierten Dokumenten aus einer URL: AnalyzeCustomDocumentFromUrl
- Erstellen eines Modells: BuildModel
- Verwalten von benutzerdefinierten Modellen: ManageCustomModels
- Kopieren eines Modells zwischen Formularerkennung Ressourcen: CopyModel
- Erstellen eines zusammengesetzten Modells aus einer Sammlung benutzerdefinierter Modelle: ComposeModel
- Abrufen/Auflisten von Dokumentmodellvorgängen, die der Formularerkennung-Ressource zugeordnet sind: GetOperation
- Erstellen einer Dokumentklassifizierung: BuildDocumentClassifier
Asynchrone APIs
Alle bisher gezeigten Beispiele haben synchrone APIs verwendet, aber wir bieten auch vollständige Unterstützung für asynchrone APIs.
Sie müssen DocumentAnalysisAsyncClient
DocumentAnalysisAsyncClient documentAnalysisAsyncClient = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildAsyncClient();
- Analysieren von geschäftsspezifischen Karte über eine URL: AnalyzeBusinessCardFromUrlAsync
- Analysieren von Identitätsdokumenten aus einer URL: AnalyzeIdentityDocumentsFromUrlAsync
- Rechnung analysieren: AnalyzeInvoiceAsync
- Analysieren von Belegen: AnalyzeReceiptsAsync
- Analysieren von Belegen aus einer URL: AnalyzeReceiptsFromUrlAsync
- Extrahieren des Layouts aus einer URL: AnalyzeLayoutFromUrlAsync
- Analysieren von benutzerdefinierten Dokumenten: AnalyzeCustomDocumentAsync
- Erstellen eines Dokumentmodells: BuildModelAsync
- Verwalten von benutzerdefinierten Modellen: ManageCustomModelsAsync
- Kopieren eines Dokumentmodells zwischen Formularerkennung Ressourcen: CopyModelAsync
- Erstellen eines zusammengesetzten Dokumentmodells aus einer Sammlung benutzerdefinierter Modelle: ComposeModelAsync
- Abrufen/Auflisten von Dokumentmodellvorgängen, die der Formularerkennung-Ressource zugeordnet sind: GetOperationAsync
- Erstellen einer Dokumentklassifizierung: BuildDocumentClassifierAsync
Zusätzliche Dokumentation
In der Beispiellesedatei finden Sie mehrere Codeausschnitte, die gängige Muster veranschaulichen, die im Formularerkennung Java SDK verwendet werden. Eine ausführlichere Dokumentation zu Azure Cognitive Services-Formularerkennung finden Sie in der Formularerkennung-Dokumentation.
Mitwirken
Beiträge und Vorschläge für dieses Projekt sind willkommen. Für die meisten Beiträge ist die Zustimmung zu einer Lizenzvereinbarung für Mitwirkende (Contributor License Agreement, CLA) erforderlich, in der Sie erklären, dass Sie dazu berechtigt sind, uns die Rechte für die Nutzung Ihres Beitrags zu erteilen, und dies auch tun.
Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen (z.B. mit einer Bezeichnung oder einem Kommentar). Führen Sie einfach die Anweisungen des Bots aus. Sie müssen dies nur einmal für alle Repositorys ausführen, die unsere CLA verwenden.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Kommentare haben.