Erste Schritte mit Dokument Intelligenz
Wichtig
- Die Azure Cognitive Services-Formularerkennung ist jetzt Azure KI Dokument Intelligenz.
- Einige Plattformen warten noch auf das Update mit der Umbenennung.
- Alle Erwähnung von Formularerkennung oder Document Intelligence in unserer Dokumentation beziehen sich auf denselben Azure-Dienst.
Dieser Inhalt gilt für: Version 4.0 (Vorschau) Frühere Versionen: Version 3.1 (GA) Version 3.0 (GA)
- Erste Schritte mit der neuesten Vorschauversion (2024-07-31-preview) von Azure KI Dokument Intelligenz.
Dieser Inhalt gilt für: Version 3.1 (GA) Frühere Versionen: Version 3.0 Version 2.1
- Erste Schritte mit der neuesten GA-Version der Azure-Formularerkennung (
2023-07-31
)
Dieser Inhalt gilt für: Version 3.0 (GA) Frühere Versionen: Version 3.1 Version 2.1
- Erste Schritte mit der neuesten Legacyversion der Azure-Formularerkennung (
2022-08-31
)
Azure KI Dokument Intelligenz und die Azure-Formularerkennung sind cloudbasierte Azure KI-Dienste, die maschinelles Lernen verwenden, um Schlüssel-Wert-Paare, Text, Tabellen und wichtige Daten aus Ihren Dokumenten zu extrahieren.
Sie können Dokumentverarbeitungsmodelle ganz einfach in Ihre Workflows und Anwendungen integrieren, indem Sie ein Programmiersprachen-SDK verwenden oder die REST-API aufrufen.
Für diesen Schnellstart sollten Sie den kostenlosen Dienst nutzen, wenn Sie die Technologie erlernen. Bedenken Sie, dass die Anzahl der kostenlosen Seiten auf 500 pro Monat beschränkt ist.
Weitere Informationen zu API-Features und Entwicklungsoptionen finden Sie auf unserer Übersichtsseite.
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket| Beispiele|Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | API-Referenz | Paket (NuGet) | Beispiele | Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket | Beispiele |Unterstützte REST-API-Version
In diesem Schnellstart verwenden Sie die folgenden Features, um Daten und Werte in Formularen und Dokumenten zu analysieren und daraus zu extrahieren:
Layout-Modell – Analysieren und Extrahieren von Tabellen, Zeilen, Wörtern und Auswahlmarkierungen wie Optionsfelder und Kontrollkästchen in Dokumenten, ohne dass ein Modell trainiert werden muss.
Vordefiniertes Modell – Analysieren und Extrahieren von gemeinsamen Feldern aus bestimmten Dokumenttypen mithilfe eines vordefinierten Modells.
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Aktuelle Version der Visual Studio-IDE
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Ihr Azure-Abonnement vorhanden ist, erstellen Sie im Azure-Portal eine Ressource für einen einzelnen Dienst oder für mehrere Azure KI-Dienste, um Ihren Schlüssel und Endpunkt zu erhalten.
Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Eine Azure KI Services- oder Formularerkennung-Ressource Sobald Ihr Azure-Abonnement vorhanden ist, erstellen Sie im Azure-Portal eine Ressource für einen einzelnen Dienst oder für mehrere Azure KI-Dienste, um Ihren Schlüssel und Endpunkt zu erhalten.
Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie eine Formularerkennungsressource, falls nur auf die Formularerkennung zugegriffen werden soll. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Formularerkennungs-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Starten Sie Visual Studio.
Wählen Sie auf der Startseite Neues Projekt erstellen aus.
Geben Sie auf der Seite Neues Projekt erstellen die Angabe Konsole in das Suchfeld ein. Wählen Sie die Vorlage Konsolenanwendung und dann Weiter aus.
- Geben Sie im Dialogfeld Neues Projekt konfigurieren im Feld für den Projektnamen den Namen
doc_intel_quickstart
ein. Klicken Sie dann auf Weiter.
- Geben Sie im Dialogfeld Neues Projekt konfigurieren im Feld für den Projektnamen den Namen
form_recognizer_quickstart
ein. Klicken Sie dann auf Weiter.
Wählen Sie im Dialogfenster Zusätzliche Informationen die Option .NET 8.0 (Langzeitunterstützung), und wählen Sie dann Erstellen.
Installieren der Clientbibliothek mit NuGet
Klicken Sie mit der rechten Maustaste auf Ihr Projekt doc_intel_quickstart, und wählen Sie NuGet-Pakete verwalten... aus.
Wählen Sie die Registerkarte Durchsuchen aus, und geben Sie Azure.AI.FormRecognizer ein.
Aktivieren Sie das Kontrollkästchen
Include prerelease
.Wählen Sie im Dropdownmenü eine Version aus, und installieren Sie das Paket in Ihrem Projekt.
Klicken Sie mit der rechten Maustaste auf das Projekt form_recognizer_quickstart, und wählen Sie die Option NuGet-Pakete verwalten... aus.
Wählen Sie die Registerkarte Durchsuchen aus, und geben Sie Azure.AI.FormRecognizer ein. Version 4.1.0 im Dropdownmenü auswählen
Klicken Sie mit der rechten Maustaste auf das Projekt form_recognizer_quickstart, und wählen Sie die Option NuGet-Pakete verwalten... aus.
Wählen Sie die Registerkarte Durchsuchen aus, und geben Sie Azure.AI.FormRecognizer ein. Version 4.0.0 im Dropdownmenü auswählen
Erstellen Ihrer Anwendung
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentIntelligenceClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentIntelligenceClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Für die Interaktion mit dem Dienst „Formularerkennung“ müssen Sie eine Instanz der DocumentAnalysisClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
-Element mit Ihrem key
-Element im Azure-Portal sowie eine DocumentAnalysisClient
-Instanz mit AzureKeyCredential
und dem Endpunkt (endpoint
) der Formularerkennung.
Hinweis
- Ab .NET 6 erzeugen neue Projekte, die die Vorlage
console
verwenden, einen neuen Programmstil, der sich von früheren Versionen unterscheidet. - Die neue Ausgabe verwendet aktuelle C#-Funktionen, die den zu schreibenden Code vereinfachen.
- Wenn Sie die neuere Version verwenden, müssen Sie nur den Text der
Main
-Methode schreiben. Sie müssen keine Top-Level-Anweisungen, globale Nutzungsanweisungen oder indirekte Nutzungsanweisungen einfügen. - Weitere Informationen finden Sie unter Neue C#-Vorlagen generieren übergeordnete Anweisungen.
Öffnen Sie die Datei Program.cs.
Löschen Sie den bereits vorhandenen Code, einschließlich der Zeile
Console.Writeline("Hello World!")
, und wählen Sie eins der folgenden Codebeispiele aus, um es zu kopieren und in die Datei „Program.cs“ Ihrer Anwendung zu kopieren:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Layoutmodell
Extrahieren von Text, Auswahlmarkierungen, Textstilen, Tabellenstrukturen und Koordinaten von Begrenzungsbereichen aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei von einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Wir haben den URI-Wert der Datei in die Variable
Uri fileUri
am Anfang des Skripts eingefügt. - Verwenden Sie zum Extrahieren des Layouts aus einer bestimmten Datei unter einem URI die
StartAnalyzeDocumentFromUri
-Methode, und übergeben Sieprebuilt-layout
als Modell-ID. Der zurückgegebene Wert ist einAnalyzeResult
-Objekt mit Daten aus dem übermittelten Dokument.
Fügen Sie das folgende Codebeispiel in die Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.DocumentIntelligence;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentIntelligenceClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentIntelligenceClient client = new DocumentIntelligenceClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentContent content = new AnalyzeDocumentContent()
{
UrlSource= fileUri
};
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-layout", content);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s)," +
$" and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i}:");
Console.WriteLine($" Content: '{line.Content}'");
Console.Write(" Bounding polygon, with points ordered clockwise:");
for (int j = 0; j < line.Polygon.Count; j += 2)
{
Console.Write($" ({line.Polygon[j]}, {line.Polygon[j + 1]})");
}
Console.WriteLine();
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" State: {selectionMark.State}");
Console.Write(" Bounding polygon, with points ordered clockwise:");
for (int j = 0; j < selectionMark.Polygon.Count; j++)
{
Console.Write($" ({selectionMark.Polygon[j]}, {selectionMark.Polygon[j + 1]})");
}
Console.WriteLine();
}
}
for (int i = 0; i < result.Paragraphs.Count; i++)
{
DocumentParagraph paragraph = result.Paragraphs[i];
Console.WriteLine($"Paragraph {i}:");
Console.WriteLine($" Content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
var handwrittenContent = result.Content.Substring(span.Offset, span.Length);
Console.WriteLine($" {handwrittenContent}");
}
}
}
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($"Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) is a '{cell.Kind}' with content: {cell.Content}");
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Fügen Sie das folgende Codebeispiel in die Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-layout", fileUri);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding box is:");
Console.WriteLine($" Upper left => X: {line.BoundingPolygon[0].X}, Y= {line.BoundingPolygon[0].Y}");
Console.WriteLine($" Upper right => X: {line.BoundingPolygon[1].X}, Y= {line.BoundingPolygon[1].Y}");
Console.WriteLine($" Lower right => X: {line.BoundingPolygon[2].X}, Y= {line.BoundingPolygon[2].Y}");
Console.WriteLine($" Lower left => X: {line.BoundingPolygon[3].X}, Y= {line.BoundingPolygon[3].Y}");
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding box is:");
Console.WriteLine($" Upper left => X: {selectionMark.BoundingPolygon[0].X}, Y= {selectionMark.BoundingPolygon[0].Y}");
Console.WriteLine($" Upper right => X: {selectionMark.BoundingPolygon[1].X}, Y= {selectionMark.BoundingPolygon[1].Y}");
Console.WriteLine($" Lower right => X: {selectionMark.BoundingPolygon[2].X}, Y= {selectionMark.BoundingPolygon[2].Y}");
Console.WriteLine($" Lower left => X: {selectionMark.BoundingPolygon[3].X}, Y= {selectionMark.BoundingPolygon[3].Y}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Ausgabe des Layoutmodells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
Document Page 1 has 69 line(s), 425 word(s), and 15 selection mark(s).
Line 0 has content: 'UNITED STATES'.
Its bounding box is:
Upper left => X: 3.4915, Y= 0.6828
Upper right => X: 5.0116, Y= 0.6828
Lower right => X: 5.0116, Y= 0.8265
Lower left => X: 3.4915, Y= 0.8265
Line 1 has content: 'SECURITIES AND EXCHANGE COMMISSION'.
Its bounding box is:
Upper left => X: 2.1937, Y= 0.9061
Upper right => X: 6.297, Y= 0.9061
Lower right => X: 6.297, Y= 1.0498
Lower left => X: 2.1937, Y= 1.0498
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des Layoutmodells anzuzeigen.
Fügen Sie das folgende Codebeispiel in die Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-layout", fileUri);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < line.BoundingPolygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {line.BoundingPolygon[j].X}, Y: {line.BoundingPolygon[j].Y}");
}
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < selectionMark.BoundingPolygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {selectionMark.BoundingPolygon[j].X}, Y: {selectionMark.BoundingPolygon[j].Y}");
}
}
}
Console.WriteLine("Paragraphs:");
foreach (DocumentParagraph paragraph in result.Paragraphs)
{
Console.WriteLine($" Paragraph content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Extract the layout of a document from a file stream
To extract the layout from a given file at a file stream, use the AnalyzeDocument method and pass prebuilt-layout as the model ID. The returned value is an AnalyzeResult object containing data about the submitted document.
string filePath = "<filePath>";
using var stream = new FileStream(filePath, FileMode.Open);
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-layout", stream);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < line.BoundingPolygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {line.BoundingPolygon[j].X}, Y: {line.BoundingPolygon[j].Y}");
}
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < selectionMark.BoundingPolygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {selectionMark.BoundingPolygon[j].X}, Y: {selectionMark.BoundingPolygon[j].Y}");
}
}
}
Console.WriteLine("Paragraphs:");
foreach (DocumentParagraph paragraph in result.Paragraphs)
{
Console.WriteLine($" Paragraph content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Vordefiniertes Modell
Analysieren und Extrahieren von gemeinsamen Feldern aus bestimmten Dokumenttypen mithilfe eines vordefinierten Modells. In diesem Beispiel analysieren Sie eine Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice).
Tipp
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den analyze
-Vorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Weitere Informationen finden Sie unter Extrahieren von Modelldaten.
- Analysieren einer Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice). Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Wir haben den Datei-URI-Wert zur Variable
Uri invoiceUri
am Anfang der Datei Program.cs hinzugefügt. - Verwenden Sie zum Analysieren einer bestimmten Datei unter einem URI die
StartAnalyzeDocumentFromUri
-Methode, und übergeben Sieprebuilt-invoice
als Modell-ID. Der zurückgegebene Wert ist einAnalyzeResult
-Objekt mit Daten aus dem übermittelten Dokument. - Der Einfachheit halber werden hier nicht alle Schlüssel-Wert-Paare angezeigt, die der Dienst zurückgibt. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Fügen Sie das folgende Codebeispiel in Ihre Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.DocumentIntelligence;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentIntelligenceClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentIntelligenceClient client = new DocumentIntelligenceClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
AnalyzeDocumentContent content = new AnalyzeDocumentContent()
{
UrlSource = invoiceUri
};
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-invoice", content);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField)
&& vendorNameField.Type == DocumentFieldType.String)
{
string vendorName = vendorNameField.ValueString;
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField)
&& customerNameField.Type == DocumentFieldType.String)
{
string customerName = customerNameField.ValueString;
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField)
&& itemsField.Type == DocumentFieldType.Array)
{
foreach (DocumentField itemField in itemsField.ValueArray)
{
Console.WriteLine("Item:");
if (itemField.Type == DocumentFieldType.Object)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.ValueObject;
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField)
&& itemDescriptionField.Type == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.ValueString;
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField)
&& itemAmountField.Type == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.ValueCurrency;
Console.WriteLine($" Amount: '{itemAmount.CurrencySymbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField)
&& subTotalField.Type == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.ValueCurrency;
Console.WriteLine($"Sub Total: '{subTotal.CurrencySymbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField)
&& totalTaxField.Type == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.ValueCurrency;
Console.WriteLine($"Total Tax: '{totalTax.CurrencySymbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)
&& invoiceTotalField.Type == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;
Console.WriteLine($"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Fügen Sie das folgende Codebeispiel in Ihre Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `FormRecognizerClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
Operation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-invoice", invoiceUri);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField))
{
if (vendorNameField.FieldType == DocumentFieldType.String)
{
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField))
{
if (customerNameField.FieldType == DocumentFieldType.String)
{
string customerName = customerNameField.Value.AsString();
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField))
{
if (itemsField.FieldType == DocumentFieldType.List)
{
foreach (DocumentField itemField in itemsField.Value.AsList())
{
Console.WriteLine("Item:");
if (itemField.FieldType == DocumentFieldType.Dictionary)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.Value.AsDictionary();
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField))
{
if (itemDescriptionField.FieldType == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.Value.AsString();
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField))
{
if (itemAmountField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.Value.AsCurrency();
Console.WriteLine($" Amount: '{itemAmount.Symbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField))
{
if (subTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.Value.AsCurrency();
Console.WriteLine($"Sub Total: '{subTotal.Symbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField))
{
if (totalTaxField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.Value.AsCurrency();
Console.WriteLine($"Total Tax: '{totalTax.Symbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField))
{
if (invoiceTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.Value.AsCurrency();
Console.WriteLine($"Invoice Total: '{invoiceTotal.Symbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Ausgabe des vordefinierten Modells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
Document 0:
Vendor Name: 'CONTOSO LTD.', with confidence 0.962
Customer Name: 'MICROSOFT CORPORATION', with confidence 0.951
Item:
Description: 'Test for 23 fields', with confidence 0.899
Amount: '100', with confidence 0.902
Sub Total: '100', with confidence 0.979
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des vordefinierten Rechnungsmodells anzuzeigen.
Fügen Sie das folgende Codebeispiel in Ihre Datei „Program.cs“ ein. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `FormRecognizerClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-invoice", invoiceUri);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField))
{
if (vendorNameField.FieldType == DocumentFieldType.String)
{
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField))
{
if (customerNameField.FieldType == DocumentFieldType.String)
{
string customerName = customerNameField.Value.AsString();
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField))
{
if (itemsField.FieldType == DocumentFieldType.List)
{
foreach (DocumentField itemField in itemsField.Value.AsList())
{
Console.WriteLine("Item:");
if (itemField.FieldType == DocumentFieldType.Dictionary)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.Value.AsDictionary();
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField))
{
if (itemDescriptionField.FieldType == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.Value.AsString();
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField))
{
if (itemAmountField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.Value.AsCurrency();
Console.WriteLine($" Amount: '{itemAmount.Symbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField))
{
if (subTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.Value.AsCurrency();
Console.WriteLine($"Sub Total: '{subTotal.Symbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField))
{
if (totalTaxField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.Value.AsCurrency();
Console.WriteLine($"Total Tax: '{totalTax.Symbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField))
{
if (invoiceTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.Value.AsCurrency();
Console.WriteLine($"Invoice Total: '{invoiceTotal.Symbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
}
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, wählen Sie die grüne Schaltfläche Start neben „formRecognizer_quickstart“ aus, um Ihre Programm zu erstellen und auszuführen, oder drücken Sie F5.
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (Maven) | Beispiele |Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (Maven) | Beispiele| Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (Maven) | Beispiele|Unterstützte REST-API-Version
In diesem Schnellstart verwenden Sie die folgenden Features, um Daten und Werte in Formularen und Dokumenten zu analysieren und daraus zu extrahieren:
Layout – Analysieren und Extrahieren von Tabellen, Zeilen, Wörtern und Auswahlmarkierungen, z. B. Optionsfelder und Kontrollkästchen in Dokumenten, ohne ein Modell trainieren zu müssen.
Beispielrechnung – Analysieren und Extrahieren gemeinsamer Felder aus bestimmten Dokumenttypen mithilfe eines vorab trainierten Modells.
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Die aktuelle Version von Visual Studio Code oder Ihrer bevorzugten IDE Weitere Informationen finden Sie unter Java in Visual Studio Code.
Tipp
- Visual Studio Code bietet ein Coding Pack für Java für Windows und macOS. Das Coding Pack ist ein Paket aus VS Code, dem Java Development Kit (JDK) und einer Sammlung vorgeschlagener Erweiterungen von Microsoft. Das Coding Pack kann auch verwendet werden, um eine vorhandene Entwicklungsumgebung zu korrigieren.
- Wenn Sie VS Code Code Pack für Java verwenden, installieren Sie die Erweiterung Gradle für Java.
Wenn Sie nicht Visual Studio Code verwenden, stellen Sie sicher, dass Folgendes in Ihrer Entwicklungsumgebung installiert ist:
Java Development Kit (JDK), Version 8 oder höher. Weitere Informationen finden Sie unter Microsoft Build von OpenJDK.
Az Version 6.8 oder höher.
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Zu einem späteren Zeitpunkt fügen Sie Ihren Schlüssel und den Endpunkt in den Code ein:
Einrichten
Erstellen eines neuen Gradle-Projekts
Erstellen Sie in einem Konsolenfenster (z. B. einer Eingabeaufforderung, PowerShell oder Bash) ein neues Verzeichnis für Ihre neue App mit dem Namen doc-intel-app, und navigieren Sie zu dem Verzeichnis.
mkdir doc-intel-app && doc-intel-app
mkdir doc-intel-app; cd doc-intel-app
Führen Sie den Befehl
gradle init
in Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden grundlegende Builddateien für Gradle erstellt, u. a. die Datei build.gradle.kts. Diese Datei wird zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet.gradle init --type basic
Wenn Sie zur Auswahl einer DSL aufgefordert werden, wählen Sie Kotlin aus.
Übernehmen Sie den Standardprojektnamen (doc-intel-app), indem Sie Return oder die EINGABETASTE auswählen.
Erstellen Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App mit dem Namen form-recognize-app, und navigieren Sie zu diesem Verzeichnis.
mkdir form-recognize-app && form-recognize-app
mkdir form-recognize-app; cd form-recognize-app
Führen Sie den Befehl
gradle init
in Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden grundlegende Builddateien für Gradle erstellt, u. a. die Datei build.gradle.kts. Diese Datei wird zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet.gradle init --type basic
Wenn Sie zur Auswahl einer DSL aufgefordert werden, wählen Sie Kotlin aus.
Akzeptieren Sie den Standardprojektnamen (form-recognize-app) durch Betätigen der RETURN- bzw. EINGABETASTE.
Installieren der Clientbibliothek
In dieser Schnellstartanleitung wird der Gradle-Abhängigkeits-Manager verwendet. Die Clientbibliothek und Informationen zu anderen Abhängigkeits-Managern finden Sie im zentralen Maven-Repository.
Öffnen Sie die Datei build.gradle.kts des Projekts in Ihrer IDE. Fügen Sie in die Datei implementation
build.gradle.kts Ihres Projekts die Clientbibliothek als -Anweisung sowie die erforderlichen Plug-Ins und Einstellungen ein.
plugins {
java
application
}
application {
mainClass.set("DocIntelligence")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-documentintelligence', version: '1.0.0-beta.4'
}
In dieser Schnellstartanleitung wird der Gradle-Abhängigkeits-Manager verwendet. Die Clientbibliothek und Informationen zu anderen Abhängigkeits-Managern finden Sie im zentralen Maven-Repository.
Öffnen Sie die Datei build.gradle.kts des Projekts in Ihrer IDE. Fügen Sie in die Datei implementation
build.gradle.kts Ihres Projekts die Clientbibliothek als -Anweisung sowie die erforderlichen Plug-Ins und Einstellungen ein.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-formrecognizer', version: '4.1.0'
}
In dieser Schnellstartanleitung wird der Gradle-Abhängigkeits-Manager verwendet. Die Clientbibliothek und Informationen zu anderen Abhängigkeits-Managern finden Sie im zentralen Maven-Repository.
Öffnen Sie die Datei build.gradle.kts des Projekts in Ihrer IDE. Fügen Sie in die Datei implementation
build.gradle.kts Ihres Projekts die Clientbibliothek als -Anweisung sowie die erforderlichen Plug-Ins und Einstellungen ein.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-formrecognizer', version: '4.0.0'
}
Erstellen einer Java-Anwendung
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentIntelligenceClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentIntelligenceClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentAnalysisClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentAnalysisClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Führen Sie im Verzeichnis „doc-intel-app“ den folgenden Befehl aus:
mkdir -p src/main/java
Sie erstellen die folgende Verzeichnisstruktur:
Navigieren Sie zum
java
-Verzeichnis, und erstellen Sie eine Datei namensDocIntelligence.java
.Tipp
- Sie können eine neue Datei mithilfe von PowerShell erstellen.
- Öffnen Sie ein PowerShell-Fenster in Ihrem Projektverzeichnis, indem Sie die UMSCHALTTASTE gedrückt halten und mit der rechten Maustaste auf den Ordner klicken.
- Geben Sie den Befehl New-Item DocIntelligence.java ein.
Öffnen Sie die Datei
DocIntelligence.java
. Kopieren Sie eines der folgenden Codebeispiele, und fügen Sie es in Ihre Anwendung ein:
Navigieren Sie zum
java
-Verzeichnis, und erstellen Sie eine Datei namensFormRecognizer.java
.Tipp
- Sie können eine neue Datei mithilfe von PowerShell erstellen.
- Öffnen Sie ein PowerShell-Fenster in Ihrem Projektverzeichnis, indem Sie die UMSCHALTTASTE gedrückt halten und mit der rechten Maustaste auf den Ordner klicken.
- Geben Sie in Ihrem Terminal den folgenden Befehl ein:
Öffnen Sie die Datei
FormRecognizer.java
. Kopieren Sie eines der folgenden Codebeispiele, und fügen Sie es in Ihre Anwendung ein:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Layoutmodell
Extrahieren von Text, Auswahlmarkierungen, Textstilen, Tabellenstrukturen und Koordinaten von Begrenzungsbereichen aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Um eine bestimmte Datei an einem URI zu analysieren, verwenden Sie die
beginAnalyzeDocumentFromUrl
-Methode und übergebenprebuilt-layout
als Modell-ID. Der Rückgabewert ist einAnalyzeResult
-Objekt, das Daten zum übermittelten Dokument enthält. - Wir haben den Datei-URI-Wert der Variablen
documentUrl
in der main-Methode hinzugefügt.
Fügen Sie der Datei DocIntelligence.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest;
import com.azure.ai.documentintelligence.models.AnalyzeResult;
import com.azure.ai.documentintelligence.models.AnalyzeResultOperation;
import com.azure.ai.documentintelligence.models.DocumentTable;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.util.List;
public class DocIntelligence {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentIntelligenceClient` instance and `AzureKeyCredential` variable
DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-layout";
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
SyncPoller <AnalyzeResultOperation, AnalyzeResultOperation> analyzeLayoutPoller =
client.beginAnalyzeDocument(modelId,
null,
null,
null,
null,
null,
null,
new AnalyzeDocumentRequest().setUrlSource(documentUrl));
AnalyzeResult analyzeLayoutResult = analyzeLayoutPoller.getFinalResult().getAnalyzeResult();
// 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 polygon %s.%n",
documentLine.getContent(),
documentLine.getPolygon()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getState().toString(),
documentSelectionMark.getPolygon(),
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();
}
// styles
analyzeLayoutResult.getStyles().forEach(documentStyle -
> System.out.printf("Document is handwritten %s.%n", documentStyle.isHandwritten()));
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis doc-intel-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Fügen Sie der Datei FormRecognizer.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.formrecognizer.documentanalysis.models.*;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.util.List;
import java.util.Arrays;
import java.time.LocalDate;
import java.util.Map;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
String modelId = "prebuilt-layout";
SyncPoller < OperationResult, AnalyzeResult > analyzeLayoutResultPoller =
client.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
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 polygon %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()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is %s and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getState().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();
}
}
// Utility function to get the bounding polygon coordinates
private static String getBoundingCoordinates(List < Point > boundingPolygon) {
return boundingPolygon.stream().map(point -> String.format("[%.2f, %.2f]", point.getX(),
point.getY())).collect(Collectors.joining(", "));
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis form-recognize-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Ausgabe des Layoutmodells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
Table 0 has 5 rows and 3 columns.
Cell 'Title of each class', has row index 0 and column index 0.
Cell 'Trading Symbol', has row index 0 and column index 1.
Cell 'Name of exchange on which registered', has row index 0 and column index 2.
Cell 'Common stock, $0.00000625 par value per share', has row index 1 and column index 0.
Cell 'MSFT', has row index 1 and column index 1.
Cell 'NASDAQ', has row index 1 and column index 2.
Cell '2.125% Notes due 2021', has row index 2 and column index 0.
Cell 'MSFT', has row index 2 and column index 1.
Cell 'NASDAQ', has row index 2 and column index 2.
Cell '3.125% Notes due 2028', has row index 3 and column index 0.
Cell 'MSFT', has row index 3 and column index 1.
Cell 'NASDAQ', has row index 3 and column index 2.
Cell '2.625% Notes due 2033', has row index 4 and column index 0.
Cell 'MSFT', has row index 4 and column index 1.
Cell 'NASDAQ', has row index 4 and column index 2.
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des Layoutmodells anzuzeigen.
Fügen Sie der Datei FormRecognizer.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzeResult;
import com.azure.ai.formrecognizer.documentanalysis.models.OperationResult;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentTable;
import com.azure.ai.formrecognizer.documentanalysis.models.Point;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.util.List;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
String modelId = "prebuilt-layout";
SyncPoller < OperationResult, AnalyzeResult > analyzeLayoutPoller =
client.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeLayoutResult = analyzeLayoutPoller.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 polygon %s.%n",
documentLine.getContent(),
getBoundingCoordinates(documentLine.getBoundingPolygon())));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getSelectionMarkState().toString(),
getBoundingCoordinates(documentSelectionMark.getBoundingPolygon()),
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();
}
// styles
analyzeLayoutResult.getStyles().forEach(documentStyle -
> System.out.printf("Document is handwritten %s.%n", documentStyle.isHandwritten()));
}
/**
* Utility function to get the bounding polygon coordinates.
*/
private static String getBoundingCoordinates(List < Point > boundingPolygon) {
return boundingPolygon.stream().map(point -> String.format("[%.2f, %.2f]", point.getX(),
point.getY())).collect(Collectors.joining(", "));
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis form-recognize-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Vordefiniertes Modell
Analysieren und Extrahieren von gemeinsamen Feldern aus bestimmten Dokumenttypen mithilfe eines vordefinierten Modells. In diesem Beispiel analysieren Sie eine Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice).
Tipp
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den analyze
-Vorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Weitere Informationen finden Sie unter Extrahieren von Modelldaten.
- Analysieren einer Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice). Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Der Wert der Datei-URL wurde der Variable
invoiceUrl
oben in der Datei hinzugefügt. - Um eine bestimmte Datei an einem URI zu analysieren, verwenden Sie die
beginAnalyzeDocuments
-Methode und übergebenPrebuiltModels.Invoice
als Modell-ID. Der Rückgabewert ist einresult
-Objekt, das Daten zum übermittelten Dokument enthält. - Der Einfachheit halber werden hier nicht alle Schlüssel-Wert-Paare angezeigt, die der Dienst zurückgibt. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Fügen Sie der Datei DocIntelligence.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest;
import com.azure.ai.documentintelligence.models.AnalyzeResult;
import com.azure.ai.documentintelligence.models.AnalyzeResultOperation;
import com.azure.ai.documentintelligence.models.Document;
import com.azure.ai.documentintelligence.models.DocumentField;
import com.azure.ai.documentintelligence.models.DocumentFieldType;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
public class DocIntelligence {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
public static void main(final String[] args) throws IOException {
// Instantiate a client that will be used to call the service.
DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
SyncPoller<AnalyzeResultOperation, AnalyzeResultOperation > analyzeInvoicesPoller =
client.beginAnalyzeDocument(modelId,
null,
null,
null,
null,
null,
null,
new AnalyzeDocumentRequest().setUrlSource(invoiceUrl));
AnalyzeResult analyzeInvoiceResult = analyzeInvoicesPoller.getFinalResult().getAnalyzeResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
Document analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.NUMBER == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueNumber();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.ARRAY == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueArray();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.OBJECT == invoiceItem.getType())
.map(documentField -> documentField.getValueObject())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/documentintelligence/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueString();
System.out.printf("Description: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double quantity = documentField.getValueNumber();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double unitPrice = documentField.getValueNumber();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double productCode = documentField.getValueNumber();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis doc-intel-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Fügen Sie der Datei FormRecognizer.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.formrecognizer.documentanalysis.models.*;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.util.List;
import java.util.Arrays;
import java.time.LocalDate;
import java.util.Map;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(final String[] args) throws IOException {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
SyncPoller < OperationResult, AnalyzeResult > analyzeInvoicePoller = client.beginAnalyzeDocumentFromUrl(modelId, invoiceUrl);
AnalyzeResult analyzeInvoiceResult = analyzeInvoicePoller.getFinalResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
AnalyzedDocument analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueAsString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueAsString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueAsString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueAsString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueAsString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueAsDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.DOUBLE == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueAsDouble();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.LIST == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueAsList();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.MAP == invoiceItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/formrecognizer/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Description: %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());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double unitPrice = documentField.getValueAsDouble();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double productCode = documentField.getValueAsDouble();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis doc-intel-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Ausgabe des vordefinierten Modells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
----------- Analyzing invoice 0 -----------
Analyzed document has doc type invoice with confidence : 1.00
Vendor Name: CONTOSO LTD., confidence: 0.92
Vendor address: 123 456th St New York, NY, 10001, confidence: 0.91
Customer Name: MICROSOFT CORPORATION, confidence: 0.84
Customer Address Recipient: Microsoft Corp, confidence: 0.92
Invoice ID: INV-100, confidence: 0.97
Invoice Date: 2019-11-15, confidence: 0.97
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des vordefinierten Rechnungsmodells anzuzeigen.
Fügen Sie der Datei FormRecognizer.java
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzeResult;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzedDocument;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentField;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentFieldType;
import com.azure.ai.formrecognizer.documentanalysis.models.OperationResult;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
SyncPoller < OperationResult, AnalyzeResult > analyzeInvoicePoller = client.beginAnalyzeDocumentFromUrl(modelId, invoiceUrl);
AnalyzeResult analyzeInvoiceResult = analyzeInvoicePoller.getFinalResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
AnalyzedDocument analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueAsString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueAsString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueAsString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueAsString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueAsString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueAsDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.DOUBLE == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueAsDouble();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.LIST == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueAsList();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.MAP == invoiceItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/formrecognizer/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Description: %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());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double unitPrice = documentField.getValueAsDouble();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double productCode = documentField.getValueAsDouble();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
Erstellen und Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, navigieren Sie zurück zu Ihrem Hauptprojektverzeichnis doc-intel-app.
Erstellen Sie Ihre Anwendung mit dem Befehl
build
:gradle build
Führen Sie Ihre Anwendung mit dem Befehl
run
aus:gradle run
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (npm) | Beispiele |Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (npm) | Beispiele |Unterstützte REST-API-Version
In diesem Schnellstart verwenden Sie die folgenden Features, um Daten und Werte in Formularen und Dokumenten zu analysieren und daraus zu extrahieren:
Layout: Analysieren und Extrahieren von Tabellen, Zeilen, Wörtern und Auswahlmarkierungen, z. B. Optionsfelder und Kontrollkästchen in Dokumenten, ohne ein Modell trainieren zu müssen.
Beispielrechnung – Analysieren und Extrahieren gemeinsamer Felder aus bestimmten Dokumenttypen mithilfe eines vorab trainierten Rechnungsmodells.
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Die aktuelle Version von Visual Studio Code oder Ihrer bevorzugten IDE Weitere Informationen finden Sie unter Node.js in Visual Studio Code.
Die aktuelle
LTS
-Version von Node.jsEine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Erstellen einer neuen Node.js Express-Anwendung: Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App namens
doc-intel-app
, und wechseln Sie in dieses Verzeichnis.mkdir doc-intel-app && cd doc-intel-app
Führen Sie den
npm init
Befehl aus, um die Anwendung zu initialisieren und ihr Projekt zu gerüsten.npm init
Geben Sie die Attribute Ihres Projekts an, indem Sie die im Terminal angezeigten Eingabeaufforderungen verwenden.
- Die wichtigsten Attribute sind Name, Versionsnummer und Einstiegspunkt.
- Es wird empfohlen,
index.js
den Namen des Einstiegspunkts zu behalten. Beschreibung, Testbefehl, GitHub-Repository, Schlüsselwörter, Autor und Lizenzinformationen sind optionale Attribute, die Sie für dieses Projekt überspringen können. - Akzeptieren Sie die Vorschläge in Klammern, indem Sie Zurückgeben oder eingebenauswählen.
- Nachdem Sie die Eingabeaufforderungen durchlaufen haben, wird im Verzeichnis „doc-intel-app“ die Datei
package.json
erstellt.
Installieren Sie das npm-Paket der Clientbibliothek
ai-document-intelligence
:azure/identity
npm i @azure-rest/ai-document-intelligence@1.0.0-beta.3 @azure/core-auth
Die Datei
package.json
Ihrer App wird mit den Abhängigkeiten aktualisiert.
Installieren Sie das npm-Paket der Clientbibliothek
ai-form-recognizer
:azure/identity
npm i @azure/ai-form-recognizer@5.0.0 @azure/identity
- Die Datei
package.json
Ihrer App wird mit den Abhängigkeiten aktualisiert.
- Die Datei
Installieren Sie das npm-Paket der Clientbibliothek
ai-form-recognizer
:azure/identity
npm i @azure/ai-form-recognizer@4.0.0 @azure/identity
Erstellen Sie eine Datei
index.js
mit der Bezeichnung Web.config im Anwendungsverzeichnis.Tipp
- Sie können eine neue Datei mithilfe von PowerShell erstellen.
- Öffnen Sie ein PowerShell-Fenster in Ihrem Projektverzeichnis, indem Sie die UMSCHALTTASTE gedrückt halten und mit der rechten Maustaste auf den Ordner klicken.
- Geben Sie in Ihrem Terminal den folgenden Befehl ein:
Erstellen Ihrer Anwendung
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentIntelligenceClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentIntelligenceClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentAnalysisClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
-Element mit Ihrem key
-Element im Azure-Portal sowie eine DocumentAnalysisClient
-Instanz mit AzureKeyCredential
und dem Endpunkt (endpoint
) der Formularerkennung.
index.js
Visual Studio Code oder Ihre bevorzugte IDE Kopieren Sie eines der folgenden Codebeispiele, und fügen Sie es in Ihre Anwendung ein:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Layoutmodell
Extrahieren von Text, Auswahlmarkierungen, Textstilen, Tabellenstrukturen und Koordinaten von Begrenzungsbereichen aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei von einer URL. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Sie haben den Datei-URI-Wert der Variable
formUrl
im oberen Bereich der Datei hinzugefügt.- Verwenden Sie zum Analysieren einer bestimmten Datei unter einem URI die
beginAnalyzeDocuments
-Methode, und übergeben Sieprebuilt-layout
als Modell-ID.
const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default,
{ getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence");
const { AzureKeyCredential } = require("@azure/core-auth");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
async function main() {
const client = DocumentIntelligence(endpoint, new AzureKeyCredential(key));
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
urlSource: formUrl
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult;
const documents = analyzeResult?.documents;
const document = documents && documents[0];
if (!document) {
throw new Error("Expected at least one document in the result.");
}
console.log(
"Extracted document:",
document.docType,
`(confidence: ${document.confidence || "<undefined>"})`,
);
console.log("Fields:", document.fields);
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, führen Sie Ihr Programm aus:
Navigieren Sie zu dem Ordner, in dem Ihre Dokument Intelligenz-Anwendung (doc-intel-app) installiert ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
node index.js
Fügen Sie der Datei index.js
das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocumentFromUrl("prebuilt-layout", formUrl);
const {
pages,
tables
} = await poller.pollUntilDone();
if (pages.length <= 0) {
console.log("No pages were extracted from the document.");
} else {
console.log("Pages:");
for (const page of pages) {
console.log("- Page", page.pageNumber, `(unit: ${page.unit})`);
console.log(` ${page.width}x${page.height}, angle: ${page.angle}`);
console.log(` ${page.lines.length} lines, ${page.words.length} words`);
}
}
if (tables.length <= 0) {
console.log("No tables were extracted from the document.");
} else {
console.log("Tables:");
for (const table of tables) {
console.log(
`- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)`
);
}
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, führen Sie Ihr Programm aus:
Navigieren Sie zu dem Ordner, in dem Ihre Dokument Intelligenz-Anwendung (doc-intel-app) installiert ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
node index.js
Ausgabe des Layoutmodells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
Pages:
- Page 1 (unit: inch)
8.5x11, angle: 0
69 lines, 425 words
Tables:
- Extracted table: 3 columns, 5 rows (15 cells)
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des Layoutmodells anzuzeigen.
Vordefiniertes Modell
In diesem Beispiel analysieren Sie eine Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice).
Tipp
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den analyze
-Vorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Weitere Informationen finden Sie unter Extrahieren von Modelldaten.
- Analysieren einer Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice). Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Der Wert der Datei-URL wurde der Variable
invoiceUrl
oben in der Datei hinzugefügt. - Um eine bestimmte Datei an einem URI zu analysieren, verwenden Sie die
beginAnalyzeDocuments
-Methode und übergebenPrebuiltModels.Invoice
als Modell-ID. Der Rückgabewert ist einresult
-Objekt, das Daten zum übermittelten Dokument enthält. - Der Einfachheit halber werden hier nicht alle Schlüssel-Wert-Paare angezeigt, die der Dienst zurückgibt. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default,
{ getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence");
const { AzureKeyCredential } = require("@azure/core-auth");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = DocumentIntelligence(endpoint, new AzureKeyCredential(key));
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-invoice")
.post({
contentType: "application/json",
body: {
// The Document Intelligence service will access the URL to the invoice image and extract data from it
urlSource: invoiceUrl,
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
poller.onProgress((state) => console.log("Operation:", state.result, state.status));
const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult;
const documents = analyzeResult?.documents;
const result = documents && documents[0];
if (result) {
console.log(result.fields);
} else {
throw new Error("Expected at least one invoice in the result.");
}
console.log(
"Extracted invoice:",
document.docType,
`(confidence: ${document.confidence || "<undefined>"})`,
);
console.log("Fields:", document.fields);
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, führen Sie Ihr Programm aus:
Navigieren Sie zu dem Ordner, in dem Ihre Dokument Intelligenz-Anwendung (doc-intel-app) installiert ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
node index.js
const {
AzureKeyCredential,
DocumentAnalysisClient
} = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocumentFromUrl("prebuilt-invoice", invoiceUrl);
const {
pages,
tables
} = await poller.pollUntilDone();
if (pages.length <= 0) {
console.log("No pages were extracted from the document.");
} else {
console.log("Pages:");
for (const page of pages) {
console.log("- Page", page.pageNumber, `(unit: ${page.unit})`);
console.log(` ${page.width}x${page.height}, angle: ${page.angle}`);
console.log(` ${page.lines.length} lines, ${page.words.length} words`);
if (page.lines && page.lines.length > 0) {
console.log(" Lines:");
for (const line of page.lines) {
console.log(` - "${line.content}"`);
// The words of the line can also be iterated independently. The words are computed based on their
// corresponding spans.
for (const word of line.words()) {
console.log(` - "${word.content}"`);
}
}
}
}
}
if (tables.length <= 0) {
console.log("No tables were extracted from the document.");
} else {
console.log("Tables:");
for (const table of tables) {
console.log(
`- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)`
);
}
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, führen Sie Ihr Programm aus:
Navigieren Sie zu dem Ordner, in dem Ihre Dokument Intelligenz-Anwendung (doc-intel-app) installiert ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
node index.js
Ausgabe des vordefinierten Modells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
Vendor Name: CONTOSO LTD.
Customer Name: MICROSOFT CORPORATION
Invoice Date: 2019-11-15T00:00:00.000Z
Due Date: 2019-12-15T00:00:00.000Z
Items:
- <no product code>
Description: Test for 23 fields
Quantity: 1
Date: undefined
Unit: undefined
Unit Price: 1
Tax: undefined
Amount: 100
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des vordefinierten Rechnungsmodells anzuzeigen.
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocument("prebuilt-invoice", invoiceUrl);
const {
documents: [document],
} = await poller.pollUntilDone();
if (document) {
const {
vendorName,
customerName,
invoiceDate,
dueDate,
items,
subTotal,
previousUnpaidBalance,
totalTax,
amountDue,
} = document.fields;
// The invoice model has many fields. For details, *see* [Invoice model field extraction](../../prebuilt/invoice.md#field-extraction)
console.log("Vendor Name:", vendorName && vendorName.value);
console.log("Customer Name:", customerName && customerName.value);
console.log("Invoice Date:", invoiceDate && invoiceDate.value);
console.log("Due Date:", dueDate && dueDate.value);
console.log("Items:");
for (const item of (items && items.values) || []) {
const { productCode, description, quantity, date, unit, unitPrice, tax, amount } =
item.properties;
console.log("-", (productCode && productCode.value) || "<no product code>");
console.log(" Description:", description && description.value);
console.log(" Quantity:", quantity && quantity.value);
console.log(" Date:", date && date.value);
console.log(" Unit:", unit && unit.value);
console.log(" Unit Price:", unitPrice && unitPrice.value);
console.log(" Tax:", tax && tax.value);
console.log(" Amount:", amount && amount.value);
}
console.log("Subtotal:", subTotal && subTotal.value);
console.log("Previous Unpaid Balance:", previousUnpaidBalance && previousUnpaidBalance.value);
console.log("Tax:", totalTax && totalTax.value);
console.log("Amount Due:", amountDue && amountDue.value);
} else {
throw new Error("Expected at least one receipt in the result.");
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, führen Sie Ihr Programm aus:
Navigieren Sie zu dem Ordner, in dem Ihre Dokument Intelligenz-Anwendung (doc-intel-app) installiert ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
node index.js
Clientbibliothek |SDK-Referenz | REST-API-Referenz | Paket (PyPi) | Beispiele | Unterstützte REST-API-Version
Clientbibliothek |SDK-Referenz | REST-API-Referenz | Paket (PyPi) | Beispiele | Unterstützte REST-API-Version
Clientbibliothek | SDK-Referenz | REST-API-Referenz | Paket (PyPi) | Beispiele | Unterstützte REST-API-Version
In diesem Schnellstart verwenden Sie die folgenden Features, um Daten in Formularen und Dokumenten zu analysieren und daraus zu extrahieren:
Layout: Analysieren und Extrahieren von Tabellen, Zeilen, Wörtern und Auswahlmarkierungen, z. B. Optionsfelder und Kontrollkästchen und Schlüssel-Wert-Paaren, ohne ein Modell trainieren zu müssen.
Beispielrechnung – Analysieren und Extrahieren gemeinsamer Felder aus bestimmten Dokumenttypen mithilfe eines vorab trainierten Modells.
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
-
- Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie
pip --version
in der Befehlszeile ausführen. Installieren Sie die aktuelle Python-Version, um pip zu erhalten.
- Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie
Die aktuelle Version von Visual Studio Code oder Ihrer bevorzugten IDE Weitere Informationen finden Sie unter Erste Schritte mit Python in Visual Studio Code.
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Öffnen Sie in Ihrer lokalen Umgebung ein Terminalfenster, und installieren Sie die Azure KI Dokument Intelligenz-Clientbibliothek für Python mit pip:
pip install azure-ai-documentintelligence==1.0.0b4
pip install azure-ai-formrecognizer==3.3.0
pip install azure-ai-formrecognizer==3.2.0b6
Erstellen Ihrer Python-Anwendung
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentIntelligenceClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentIntelligenceClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Erstellen Sie eine neue Python-Datei namens doc_intel_quickstart.py in Ihrem bevorzugten Editor oder Ihrer bevorzugten IDE.
Öffnen Sie die Datei doc_intel_quickstart.py, und wählen Sie eins der folgenden Codebeispiele aus, das Sie kopieren und in Ihre Anwendung einfügen möchten:
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der DocumentAnalysisClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem key
im Azure-Portal sowie eine DocumentAnalysisClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Erstellen Sie eine neue Python-Datei namens form_recognizer_quickstart.py in Ihrem bevorzugten Editor oder IDE.
Öffnen Sie die Datei form_recognizer_quickstart.py, und wählen Sie eins der folgenden Codebeispiele aus, um es zu kopieren und in Ihre Anwendung einzufügen:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Layoutmodell
Extrahieren von Text, Auswahlmarkierungen, Textstilen, Tabellenstrukturen und Koordinaten von Begrenzungsbereichen aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei von einer URL. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Wir haben den Wert der Datei-URL zur Variable
formUrl
in der Funktionanalyze_layout
hinzugefügt.
Fügen Sie der Anwendung „doc_intel_quickstart.py“das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeResult
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
# helper functions
def get_words(page, line):
result = []
for word in page.words:
if _in_span(word, line.spans):
result.append(word)
return result
def _in_span(word, spans):
for span in spans:
if word.span.offset >= span.offset and (
word.span.offset + word.span.length
) <= (span.offset + span.length):
return True
return False
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_intelligence_client = DocumentIntelligenceClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout", AnalyzeDocumentRequest(url_source=formUrl
))
result: AnalyzeResult = poller.result()
if result.styles and any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
for page in result.pages:
print(f"----Analyzing layout from page #{page.page_number}----")
print(
f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}"
)
if page.lines:
for line_idx, line in enumerate(page.lines):
words = get_words(page, line)
print(
f"...Line # {line_idx} has word count {len(words)} and text '{line.content}' "
f"within bounding polygon '{line.polygon}'"
)
for word in words:
print(
f"......Word '{word.content}' has a confidence of {word.confidence}"
)
if page.selection_marks:
for selection_mark in page.selection_marks:
print(
f"Selection mark is '{selection_mark.state}' within bounding polygon "
f"'{selection_mark.polygon}' and has a confidence of {selection_mark.confidence}"
)
if result.tables:
for table_idx, table in enumerate(result.tables):
print(
f"Table # {table_idx} has {table.row_count} rows and "
f"{table.column_count} columns"
)
if table.bounding_regions:
for region in table.bounding_regions:
print(
f"Table # {table_idx} location on page: {region.page_number} is {region.polygon}"
)
for cell in table.cells:
print(
f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
)
if cell.bounding_regions:
for region in cell.bounding_regions:
print(
f"...content on page {region.page_number} is within bounding polygon '{region.polygon}'"
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem sich die Datei doc_intel_quickstart.py befindet.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python doc_intel_quickstart.py
Um eine bestimmte Datei unter einer URL zu analysieren, verwenden Sie die Methode begin_analyze_document_from_url
und geben prebuilt-layout
als Modell-ID an. Der Rückgabewert ist ein result
Objekt, das Daten über das übermittelte Dokument enthält.
Fügen Sie Ihrer Anwendung „form_recognizer_quickstart.py“ das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren.
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl)
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 box '{}'".format(
line_idx,
len(words),
line.content,
format_polygon(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 box '{}' and has a confidence of {}".format(
selection_mark.state,
format_polygon(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,
format_polygon(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 box '{}'".format(
region.page_number,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem Ihre Datei form_recognizer_quickstart.py enthalten ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python form_recognizer_quickstart.py
Ausgabe des Layoutmodells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
----Analyzing layout from page #1----
Page has width: 8.5 and height: 11.0, measured with unit: inch
...Line # 0 has word count 2 and text 'UNITED STATES' within bounding box '[3.4915, 0.6828], [5.0116, 0.6828], [5.0116, 0.8265], [3.4915, 0.8265]'
......Word 'UNITED' has a confidence of 1.0
......Word 'STATES' has a confidence of 1.0
...Line # 1 has word count 4 and text 'SECURITIES AND EXCHANGE COMMISSION' within bounding box '[2.1937, 0.9061], [6.297, 0.9061], [6.297, 1.0498], [2.1937, 1.0498]'
......Word 'SECURITIES' has a confidence of 1.0
......Word 'AND' has a confidence of 1.0
......Word 'EXCHANGE' has a confidence of 1.0
......Word 'COMMISSION' has a confidence of 1.0
...Line # 2 has word count 3 and text 'Washington, D.C. 20549' within bounding box '[3.4629, 1.1179], [5.031, 1.1179], [5.031, 1.2483], [3.4629, 1.2483]'
......Word 'Washington,' has a confidence of 1.0
......Word 'D.C.' has a confidence of 1.0
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des Layoutmodells anzuzeigen.
Fügen Sie Ihrer Anwendung „form_recognizer_quickstart.py“ das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren.
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl
)
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,
format_polygon(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,
format_polygon(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,
format_polygon(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,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem Ihre Datei form_recognizer_quickstart.py enthalten ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python form_recognizer_quickstart.py
Vordefiniertes Modell
Analysieren und Extrahieren von gemeinsamen Feldern aus bestimmten Dokumenttypen mithilfe eines vordefinierten Modells. In diesem Beispiel analysieren Sie eine Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice).
Tipp
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den analyze
-Vorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Weitere Informationen finden Sie unter Extrahieren von Modelldaten.
- Analysieren einer Rechnung mithilfe des vordefinierten Rechnungsmodells (prebuilt-invoice). Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Der Wert der Datei-URL wurde der Variable
invoiceUrl
oben in der Datei hinzugefügt. - Der Einfachheit halber werden hier nicht alle Schlüssel-Wert-Paare angezeigt, die der Dienst zurückgibt. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Fügen Sie der Anwendung „doc_intel_quickstart.py“das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeResult
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def analyze_invoice():
# sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
document_intelligence_client = DocumentIntelligenceClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-invoice", AnalyzeDocumentRequest(url_source=invoiceUrl)
)
invoices = poller.result()
if invoices.documents:
for idx, invoice in enumerate(invoices.documents):
print(f"--------Analyzing invoice #{idx + 1}--------")
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
f"Vendor Name: {vendor_name.get('content')} has confidence: {vendor_name.get('confidence')}"
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
f"Vendor Address: {vendor_address.get('content')} has confidence: {vendor_address.get('confidence')}"
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
f"Vendor Address Recipient: {vendor_address_recipient.get('content')} has confidence: {vendor_address_recipient.get('confidence')}"
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
f"Customer Name: {customer_name.get('content')} has confidence: {customer_name.get('confidence')}"
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
f"Customer Id: {customer_id.get('content')} has confidence: {customer_id.get('confidence')}"
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
f"Customer Address: {customer_address.get('content')} has confidence: {customer_address.get('confidence')}"
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
f"Customer Address Recipient: {customer_address_recipient.get('content')} has confidence: {customer_address_recipient.get('confidence')}"
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
f"Invoice Id: {invoice_id.get('content')} has confidence: {invoice_id.get('confidence')}"
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
f"Invoice Date: {invoice_date.get('content')} has confidence: {invoice_date.get('confidence')}"
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
f"Invoice Total: {invoice_total.get('content')} has confidence: {invoice_total.get('confidence')}"
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
f"Due Date: {due_date.get('content')} has confidence: {due_date.get('confidence')}"
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
f"Purchase Order: {purchase_order.get('content')} has confidence: {purchase_order.get('confidence')}"
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
f"Billing Address: {billing_address.get('content')} has confidence: {billing_address.get('confidence')}"
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
f"Billing Address Recipient: {billing_address_recipient.get('content')} has confidence: {billing_address_recipient.get('confidence')}"
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
f"Shipping Address: {shipping_address.get('content')} has confidence: {shipping_address.get('confidence')}"
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
f"Shipping Address Recipient: {shipping_address_recipient.get('content')} has confidence: {shipping_address_recipient.get('confidence')}"
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").get("valueArray")):
print(f"...Item #{idx + 1}")
item_description = item.get("valueObject").get("Description")
if item_description:
print(
f"......Description: {item_description.get('content')} has confidence: {item_description.get('confidence')}"
)
item_quantity = item.get("valueObject").get("Quantity")
if item_quantity:
print(
f"......Quantity: {item_quantity.get('content')} has confidence: {item_quantity.get('confidence')}"
)
unit = item.get("valueObject").get("Unit")
if unit:
print(
f"......Unit: {unit.get('content')} has confidence: {unit.get('confidence')}"
)
unit_price = item.get("valueObject").get("UnitPrice")
if unit_price:
unit_price_code = (
unit_price.get("valueCurrency").get("currencyCode")
if unit_price.get("valueCurrency").get("currencyCode")
else ""
)
print(
f"......Unit Price: {unit_price.get('content')}{unit_price_code} has confidence: {unit_price.get('confidence')}"
)
product_code = item.get("valueObject").get("ProductCode")
if product_code:
print(
f"......Product Code: {product_code.get('content')} has confidence: {product_code.get('confidence')}"
)
item_date = item.get("valueObject").get("Date")
if item_date:
print(
f"......Date: {item_date.get('content')} has confidence: {item_date.get('confidence')}"
)
tax = item.get("valueObject").get("Tax")
if tax:
print(
f"......Tax: {tax.get('content')} has confidence: {tax.get('confidence')}"
)
amount = item.get("valueObject").get("Amount")
if amount:
print(
f"......Amount: {amount.get('content')} has confidence: {amount.get('confidence')}"
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
f"Subtotal: {subtotal.get('content')} has confidence: {subtotal.get('confidence')}"
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
f"Total Tax: {total_tax.get('content')} has confidence: {total_tax.get('confidence')}"
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
f"Previous Unpaid Balance: {previous_unpaid_balance.get('content')} has confidence: {previous_unpaid_balance.get('confidence')}"
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
f"Amount Due: {amount_due.get('content')} has confidence: {amount_due.get('confidence')}"
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
f"Service Start Date: {service_start_date.get('content')} has confidence: {service_start_date.get('confidence')}"
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
f"Service End Date: {service_end_date.get('content')} has confidence: {service_end_date.get('confidence')}"
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
f"Service Address: {service_address.get('content')} has confidence: {service_address.get('confidence')}"
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
f"Service Address Recipient: {service_address_recipient.get('content')} has confidence: {service_address_recipient.get('confidence')}"
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
f"Remittance Address: {remittance_address.get('content')} has confidence: {remittance_address.get('confidence')}"
)
remittance_address_recipient = invoice.fields.get(
"RemittanceAddressRecipient"
)
if remittance_address_recipient:
print(
f"Remittance Address Recipient: {remittance_address_recipient.get('content')} has confidence: {remittance_address_recipient.get('confidence')}"
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_invoice()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem sich die Datei doc_intel_quickstart.py befindet.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python doc_intel_quickstart.py
Um eine bestimmte Datei an einem URI zu analysieren, verwenden Sie die begin_analyze_document_from_url
-Methode und übergeben prebuilt-invoice
als Modell-ID. Der Rückgabewert ist ein result
-Objekt, das Daten zum übermittelten Dokument enthält.
Fügen Sie Ihrer Anwendung „form_recognizer_quickstart.py“ das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren.
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_bounding_region(bounding_regions):
if not bounding_regions:
return "N/A"
return ", ".join(
"Page #{}: {}".format(region.page_number, format_polygon(region.polygon))
for region in bounding_regions
)
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_invoice():
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-invoice", invoiceUrl
)
invoices = poller.result()
for idx, invoice in enumerate(invoices.documents):
print("--------Recognizing invoice #{}--------".format(idx + 1))
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
"Vendor Name: {} has confidence: {}".format(
vendor_name.value, vendor_name.confidence
)
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
"Vendor Address: {} has confidence: {}".format(
vendor_address.value, vendor_address.confidence
)
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
"Vendor Address Recipient: {} has confidence: {}".format(
vendor_address_recipient.value, vendor_address_recipient.confidence
)
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
"Customer Name: {} has confidence: {}".format(
customer_name.value, customer_name.confidence
)
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
"Customer Id: {} has confidence: {}".format(
customer_id.value, customer_id.confidence
)
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
"Customer Address: {} has confidence: {}".format(
customer_address.value, customer_address.confidence
)
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
"Customer Address Recipient: {} has confidence: {}".format(
customer_address_recipient.value,
customer_address_recipient.confidence,
)
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
"Invoice Id: {} has confidence: {}".format(
invoice_id.value, invoice_id.confidence
)
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
"Invoice Date: {} has confidence: {}".format(
invoice_date.value, invoice_date.confidence
)
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
"Invoice Total: {} has confidence: {}".format(
invoice_total.value, invoice_total.confidence
)
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
"Due Date: {} has confidence: {}".format(
due_date.value, due_date.confidence
)
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
"Purchase Order: {} has confidence: {}".format(
purchase_order.value, purchase_order.confidence
)
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
"Billing Address: {} has confidence: {}".format(
billing_address.value, billing_address.confidence
)
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
"Billing Address Recipient: {} has confidence: {}".format(
billing_address_recipient.value,
billing_address_recipient.confidence,
)
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
"Shipping Address: {} has confidence: {}".format(
shipping_address.value, shipping_address.confidence
)
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
"Shipping Address Recipient: {} has confidence: {}".format(
shipping_address_recipient.value,
shipping_address_recipient.confidence,
)
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
print("...Item #{}".format(idx + 1))
item_description = item.value.get("Description")
if item_description:
print(
"......Description: {} has confidence: {}".format(
item_description.value, item_description.confidence
)
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
"......Quantity: {} has confidence: {}".format(
item_quantity.value, item_quantity.confidence
)
)
unit = item.value.get("Unit")
if unit:
print(
"......Unit: {} has confidence: {}".format(
unit.value, unit.confidence
)
)
unit_price = item.value.get("UnitPrice")
if unit_price:
print(
"......Unit Price: {} has confidence: {}".format(
unit_price.value, unit_price.confidence
)
)
product_code = item.value.get("ProductCode")
if product_code:
print(
"......Product Code: {} has confidence: {}".format(
product_code.value, product_code.confidence
)
)
item_date = item.value.get("Date")
if item_date:
print(
"......Date: {} has confidence: {}".format(
item_date.value, item_date.confidence
)
)
tax = item.value.get("Tax")
if tax:
print(
"......Tax: {} has confidence: {}".format(tax.value, tax.confidence)
)
amount = item.value.get("Amount")
if amount:
print(
"......Amount: {} has confidence: {}".format(
amount.value, amount.confidence
)
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
"Subtotal: {} has confidence: {}".format(
subtotal.value, subtotal.confidence
)
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
"Total Tax: {} has confidence: {}".format(
total_tax.value, total_tax.confidence
)
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
"Previous Unpaid Balance: {} has confidence: {}".format(
previous_unpaid_balance.value, previous_unpaid_balance.confidence
)
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
"Amount Due: {} has confidence: {}".format(
amount_due.value, amount_due.confidence
)
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
"Service Start Date: {} has confidence: {}".format(
service_start_date.value, service_start_date.confidence
)
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
"Service End Date: {} has confidence: {}".format(
service_end_date.value, service_end_date.confidence
)
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
"Service Address: {} has confidence: {}".format(
service_address.value, service_address.confidence
)
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
"Service Address Recipient: {} has confidence: {}".format(
service_address_recipient.value,
service_address_recipient.confidence,
)
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
"Remittance Address: {} has confidence: {}".format(
remittance_address.value, remittance_address.confidence
)
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
"Remittance Address Recipient: {} has confidence: {}".format(
remittance_address_recipient.value,
remittance_address_recipient.confidence,
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_invoice()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem Ihre Datei form_recognizer_quickstart.py enthalten ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python form_recognizer_quickstart.py
Ausgabe des vordefinierten Modells
Hier sehen Sie einen Codeausschnitt der erwarteten Ausgabe:
--------Recognizing invoice #1--------
Vendor Name: CONTOSO LTD. has confidence: 0.919
Vendor Address: 123 456th St New York, NY, 10001 has confidence: 0.907
Vendor Address Recipient: Contoso Headquarters has confidence: 0.919
Customer Name: MICROSOFT CORPORATION has confidence: 0.84
Customer Id: CID-12345 has confidence: 0.956
Customer Address: 123 Other St, Redmond WA, 98052 has confidence: 0.909
Customer Address Recipient: Microsoft Corp has confidence: 0.917
Invoice Id: INV-100 has confidence: 0.972
Invoice Date: 2019-11-15 has confidence: 0.971
Invoice Total: CurrencyValue(amount=110.0, symbol=$) has confidence: 0.97
Due Date: 2019-12-15 has confidence: 0.973
Um die gesamte Ausgabe anzuzeigen, besuchen Sie das Repository mit Azure-Beispielen auf GitHub, um die Ausgabe des vordefinierten Rechnungsmodells anzuzeigen.
Fügen Sie Ihrer Anwendung „form_recognizer_quickstart.py“ das folgende Codebeispiel hinzu. Stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Formularerkennungsinstanz im Azure-Portal aktualisieren.
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl
)
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,
format_polygon(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,
format_polygon(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,
format_polygon(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,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Ausführen der Anwendung
Nachdem Sie Ihrer Anwendung ein Codebeispiel hinzugefügt haben, erstellen Sie Ihr Programm, und führen Sie es aus:
Navigieren Sie zu dem Ordner, in dem Ihre Datei form_recognizer_quickstart.py enthalten ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python form_recognizer_quickstart.py
In diesem Schnellstart erfahren Sie, wie Sie die Dokument Intelligenz-REST-API verwenden, um Daten und Werte in Dokumenten zu analysieren und daraus zu extrahieren:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Curl-Befehlszeilentool installiert.
PowerShell ab Version 7.* (oder eine ähnliche Befehlszeilenanwendung):
Geben Sie den folgenden Befehl entsprechend Ihres Betriebssystems ein, um Ihre PowerShell-Version zu überprüfen:
- Windows:
Get-Host | Select-Object Version
- macOS oder Linux:
$PSVersionTable
- Windows:
Eine Dokument Intelligenz-Ressource (einzelner Dienst) oder Azure KI Services-Ressource (mehrere Dienste). Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.
Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Analysieren von Dokumenten und Erhalten von Ergebnissen
Eine POST-Anforderung wird verwendet, um Dokumente mit einem vordefinierten oder benutzerdefinierten Modell zu analysieren. Eine GET-Anforderung wird verwendet, um das Ergebnis eines Dokumentanalyseaufrufs abzurufen. modelId
wird mit POST- und resultId
mit GET-Vorgängen verwendet.
Analysieren eines Dokuments (POST-Anforderung)
Nehmen Sie vor dem Ausführen des cURL-Befehls die folgenden Änderungen an der POST-Anforderung vor:
Ersetzen Sie
{endpoint}
durch den Endpunktwert aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal.Ersetzen Sie
{key}
durch den Schlüsselwert aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal.Ersetzen Sie
{modelID}
und{your-document-url}
anhand der nachstehenden Tabelle durch die gewünschten Werte.Sie benötigen eine Dokumentdatei unter einer URL. Für diese Schnellstartanleitung können Sie für jedes Feature die in der folgenden Tabelle angegebenen Beispielformulare verwenden.
Beispieldokumente
Feature | {modelID} | {your-document-url} |
---|---|---|
Lesen | prebuilt-read | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png |
Layout | prebuilt-layout | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/layout.png |
Krankenversicherungskarte | prebuilt-healthInsuranceCard.us | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/insurance-card.png |
W-2 | prebuilt-tax.us.w2 | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/w2.png |
Rechnung | Vordefinierte Rechnung | https://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf |
Rechnung | prebuilt-receipt | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/receipt.png |
Ausweisdokument | prebuilt-idDocument | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/identity_documents.png |
Beispieldokumente
Feature | {modelID} | {your-document-url} |
---|---|---|
Allgemeines Dokument | prebuilt-document | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf |
Lesen | prebuilt-read | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png |
Layout | prebuilt-layout | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/layout.png |
Krankenversicherungskarte | prebuilt-healthInsuranceCard.us | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/insurance-card.png |
W-2 | prebuilt-tax.us.w2 | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/w2.png |
Rechnung | Vordefinierte Rechnung | https://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf |
Rechnung | prebuilt-receipt | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/receipt.png |
Ausweisdokument | prebuilt-idDocument | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/identity_documents.png |
Visitenkarte | prebuilt-businessCard | https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/de5e0d8982ab754823c54de47a47e8e499351523/curl/form-recognizer/rest-api/business_card.jpg |
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
POST-Anforderung
curl -v -i POST "{endpoint}/documentintelligence/documentModels/{modelId}:analyze?api-version=2024-07-31-preview" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelID}:analyze?api-version=2023-07-31" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelId}:analyze?api-version=2022-08-31" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
POST-Antwort (resultID)
Sie erhalten die Antwort 202 (Success)
mit einem schreibgeschützten Operation-Location-Header. Der Wert dieses Headers enthält eine resultID
, die abgefragt werden kann, um den Status des asynchronen Vorgangs und die Ergebnisse mithilfe einer GET-Anforderung mit demselben Ressourcenabonnementschlüssel abzurufen:
Abrufen von Analyseergebnissen (GET-Anforderung)
Rufen Sie nach dem Aufrufen der Analyze document
-API die API Analyseergebnisse abrufen auf, um den Status des Vorgangs und die extrahierten Daten abzurufen. Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
Rufen Sie nach dem Aufrufen der Analyze document
-API die API Analyseergebnisse abrufen auf, um den Status des Vorgangs und die extrahierten Daten abzurufen. Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
Rufen Sie nach dem Aufrufen der Analyze document
-API die API Analyseergebnisse abrufen auf, um den Status des Vorgangs und die extrahierten Daten abzurufen. Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
Ersetzen Sie den Operation-Location-Header
{resultID}
aus der POST-Antwort.Ersetzen Sie
{key}
durch den Schlüsselwert aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal.
GET-Anforderung
curl -v -X GET "{endpoint}/documentintelligence/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2024-07-31-preview" -H "Ocp-Apim-Subscription-Key: {key}"
curl -v -X GET "{endpoint}/formrecognizer/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2023-07-31" -H "Ocp-Apim-Subscription-Key: {key}"
curl -v -X GET "{endpoint}/formrecognizer/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2022-08-31" -H "Ocp-Apim-Subscription-Key: {key}"
Untersuchen der Antwort
Sie erhalten die Antwort 200 (Success)
mit einer JSON-Ausgabe. Das erste Feld, "status"
, gibt den Status des Vorgangs an. Wenn der Vorgang nicht abgeschlossen ist, wird für "status"
der Wert "running"
oder "notStarted"
angezeigt, und Sie sollten die API entweder manuell oder über ein Skript erneut aufrufen. Ein Intervall von mindestens einer Sekunde zwischen den Aufrufen wird empfohlen.
Beispielantwort für „prebuilt-invoice“
{
"status": "succeeded",
"createdDateTime": "2024-03-25T19:31:37Z",
"lastUpdatedDateTime": "2024-03-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2024-07-31-preview",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
{
"status": "succeeded",
"createdDateTime": "2023-08-25T19:31:37Z",
"lastUpdatedDateTime": "2023-08-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2023-07-31",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
{
"status": "succeeded",
"createdDateTime": "2022-09-25T19:31:37Z",
"lastUpdatedDateTime": "2022-09-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2022-08-31",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
Unterstützte Dokumentfelder
Die vordefinierten Modelle extrahieren vordefinierte Sätze von Dokumentfeldern. Informationen zu extrahierten Feldnamen, Typen, Beschreibungen und Beispielen finden Sie unter Extraktion von Modelldaten.
Das war's, herzlichen Glückwunsch!
In diesem Schnellstart haben Sie ein Dokument Intelligenz-Modell verwendet, um verschiedene Formulare und Dokumente zu analysieren. Erkunden Sie als nächstes das Dokument Intelligenz-Studio und die Referenzdokumentation, um vertiefte Informationen über die Dokument Intelligenz-API zu erhalten.
Nächste Schritte
Testen Sie Dokument Intelligenz Studio für eine verbesserte Erfahrung und Modellqualität.
Informationen zur Migration von v3.1 zu v4.0 finden Sie in den Migrationsleitfäden im Änderungsprotokoll.
Dieser Inhalt gilt für: Version 2.1 | Neueste Version: Version 4.0 (Vorschau)
Verwenden Sie die Programmiersprache Ihrer Wahl oder die REST-API für die ersten Schritte mit Azure KI Dokument Intelligenz. Dokument Intelligenz ist ein cloudbasierter Azure KI-Dienst, der maschinelles Lernen verwendet, um Schlüssel/Wert-Paare, Text und Tabellen aus Ihren Dokumenten zu extrahieren. Sie sollten den kostenlosen Dienst nutzen, wenn Sie die Technologie erlernen. Bedenken Sie, dass die Anzahl der kostenlosen Seiten auf 500 pro Monat beschränkt ist.
Um mehr über die Funktionen der Dokument Intelligenz und zu Entwicklungsoptionen zu erfahren, besuchen Sie unsere Übersichtsseite.
Referenzdokumentation | Quellcode der Bibliothek | Paket (NuGet) | Beispiele
In dieser Schnellstartanleitung verwenden Sie die folgenden APIs zum Extrahieren strukturierter Daten aus Formularen und Dokumenten:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Aktuelle Version der Visual Studio-IDE
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Starten Sie Visual Studio 2019.
Wählen Sie auf der Startseite Neues Projekt erstellen aus.
Geben Sie auf der Seite Neues Projekt erstellen die Angabe Konsole in das Suchfeld ein. Wählen Sie die Vorlage Konsolenanwendung und dann Weiter aus.
Geben Sie im Dialogfeld Neues Projekt konfigurieren im Feld für den Projektnamen den Namen
formRecognizer_quickstart
ein. Klicken Sie dann auf Weiter.Wählen Sie im Dialogfeld Weitere Informationen die Option .NET 5.0 (aktuell) und dann Erstellen aus.
Installieren der Clientbibliothek mit NuGet
Klicken Sie mit der rechten Maustaste auf das Projekt formRecognizer_quickstart, und wählen Sie die Option NuGet-Pakete verwalten... aus.
Wählen Sie die Registerkarte „Durchsuchen“ aus, und geben Sie „Azure.AI.FormRecognizer“ ein.
Wählen Sie im Dropdownmenü die Version 3.1.1 und anschließend die Option Installieren aus.
Erstellen Ihrer Anwendung
Für die Interaktion mit dem Dokument Intelligenz-Dienst müssen Sie eine Instanz der FormRecognizerClient
-Klasse erstellen. Hierzu erstellen Sie ein AzureKeyCredential
mit Ihrem Schlüssel sowie eine FormRecognizerClient
-Instanz mit der AzureKeyCredential
und Ihrem Dokument Intelligenz-endpoint
.
Hinweis
- Ab .NET 6 erzeugen neue Projekte, die die Vorlage
console
verwenden, einen neuen Programmstil, der sich von früheren Versionen unterscheidet. - Die neue Ausgabe verwendet aktuelle C#-Funktionen, die den zu schreibenden Code vereinfachen.
- Wenn Sie die neuere Version verwenden, müssen Sie nur den Text der
Main
-Methode schreiben. Sie müssen keine Top-Level-Anweisungen, globale Nutzungsanweisungen oder indirekte Nutzungsanweisungen einfügen. - Weitere Informationen finden Sie unter Neue C#-Vorlagen generieren übergeordnete Anweisungen.
Öffnen Sie die Datei Program.cs.
Fügen Sie die folgenden using-Direktiven ein:
using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using System.Threading.Tasks;
- Legen Sie Ihre Umgebungsvariablen
endpoint
undkey
fest, und erstellen Sie Ihre Instanzen vonAzureKeyCredential
undFormRecognizerClient
:
private static readonly string endpoint = "your-form-recognizer-endpoint";
private static readonly string key = "your-api-key";
private static readonly AzureKeyCredential credential = new AzureKeyCredential(key);
Löschen Sie die Zeile
Console.Writeline("Hello World!");
, und fügen Sie die Codebeispiele für Try It (Ausprobieren) der Datei Program.cs hinzu:Wählen Sie ein Codebeispiel zum Kopieren und Einfügen in die Main-Methode Ihrer Anwendung aus:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.
Try it (Ausprobieren): Layoutmodell
Dient zum Extrahieren von Text, Auswahlmarkierungen, Textformaten und Tabellenstrukturen sowie der zugehörigen Begrenzungsbereichskoordinaten aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Wir haben den Datei-URI-Wert der Variablen
formUri
hinzugefügt. - Verwenden Sie zum Extrahieren des Layouts aus einer bestimmten Datei unter einem URI die
StartRecognizeContentFromUriAsync
-Methode.
Fügen Sie der Datei „Program.cs“ für Ihre Layoutanwendung den folgenden Code hinzu:
FormRecognizerClient recognizerClient = AuthenticateClient();
Task recognizeContent = RecognizeContent(recognizerClient);
Task.WaitAll(recognizeContent);
private static FormRecognizerClient AuthenticateClient()
{
var credential = new AzureKeyCredential(key);
var client = new FormRecognizerClient(new Uri(endpoint), credential);
return client;
}
private static async Task RecognizeContent(FormRecognizerClient recognizerClient)
{
string formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
FormPageCollection formPages = await recognizerClient
.StartRecognizeContentFromUri(new Uri(formUrl))
.WaitForCompletionAsync();
foreach (FormPage page in formPages)
{
Console.WriteLine($"Form Page {page.PageNumber} has {page.Lines.Count} lines.");
for (int i = 0; i < page.Lines.Count; i++)
{
FormLine line = page.Lines[i];
Console.WriteLine($" Line {i} has {line.Words.Count} word{(line.Words.Count > 1 ? "s" : "")}, and text: '{line.Text}'.");
}
for (int i = 0; i < page.Tables.Count; i++)
{
FormTable table = page.Tables[i];
Console.WriteLine($"Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (FormTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) contains text: '{cell.Text}'.");
}
}
}
}
}
}
Probieren Sie es aus: Vordefiniertes Modell
Dieses Beispiel zeigt Ihnen, wie Sie Daten aus bestimmten Arten von gängigen Dokumenten mit vortrainierten Modellen analysieren können.
- In diesem Beispiel analysieren Sie ein Rechnungsdokument mithilfe eines vordefinierten Modells. Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Sie haben den Datei-URI-Wert oben in der Main-Methode der Variable
invoiceUri
hinzugefügt. - Verwenden Sie für die Analyse einer bestimmten Datei unter einem URI die
StartRecognizeInvoicesFromUriAsync
-Methode. - Der Einfachheit halber werden hier nicht alle Felder angezeigt, die vom Dienst zurückgegeben werden. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Auswählen eines vordefinierten Modells
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den Analysevorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Hier finden Sie die vordefinierten Modelle, die vom Dokument Intelligenz-Dienst derzeit unterstützt werden:
- Rechnung: Extrahieren von Text, Auswahlmarkierungen, Tabellen, Feldern und wichtigen Informationen aus Rechnungen
- Beleg: Extrahieren von Text und wichtigen Informationen aus Belegen
- Ausweisdokument: Extrahieren von Text und wichtigen Informationen aus Führerscheinen und Reisepässen
- Visitenkarte: Extrahieren von Text und wichtigen Informationen aus Visitenkarten
Fügen Sie den folgenden Code zu Ihrer vordefinierten Methode für die Rechnungsanwendung der Datei „Program.cs“ hinzu.
FormRecognizerClient recognizerClient = AuthenticateClient();
Task analyzeinvoice = AnalyzeInvoice(recognizerClient, invoiceUrl);
Task.WaitAll(analyzeinvoice);
private static FormRecognizerClient AuthenticateClient() {
var credential = new AzureKeyCredential(key);
var client = new FormRecognizerClient(new Uri(endpoint), credential);
return client;
}
static string invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
private static async Task AnalyzeInvoice(FormRecognizerClient recognizerClient, string invoiceUrl) {
var options = new RecognizeInvoicesOptions() {
Locale = "en-US"
};
RecognizedFormCollection invoices = await recognizerClient.StartRecognizeInvoicesFromUriAsync(new Uri(invoiceUrl), options).WaitForCompletionAsync();
RecognizedForm invoice = invoices[0];
FormField invoiceIdField;
if (invoice.Fields.TryGetValue("InvoiceId", out invoiceIdField)) {
if (invoiceIdField.Value.ValueType == FieldValueType.String) {
string invoiceId = invoiceIdField.Value.AsString();
Console.WriteLine($" Invoice Id: '{invoiceId}', with confidence {invoiceIdField.Confidence}");
}
}
FormField invoiceDateField;
if (invoice.Fields.TryGetValue("InvoiceDate", out invoiceDateField)) {
if (invoiceDateField.Value.ValueType == FieldValueType.Date) {
DateTime invoiceDate = invoiceDateField.Value.AsDate();
Console.WriteLine($" Invoice Date: '{invoiceDate}', with confidence {invoiceDateField.Confidence}");
}
}
FormField dueDateField;
if (invoice.Fields.TryGetValue("DueDate", out dueDateField)) {
if (dueDateField.Value.ValueType == FieldValueType.Date) {
DateTime dueDate = dueDateField.Value.AsDate();
Console.WriteLine($" Due Date: '{dueDate}', with confidence {dueDateField.Confidence}");
}
}
FormField vendorNameField;
if (invoice.Fields.TryGetValue("VendorName", out vendorNameField)) {
if (vendorNameField.Value.ValueType == FieldValueType.String) {
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($" Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
FormField vendorAddressField;
if (invoice.Fields.TryGetValue("VendorAddress", out vendorAddressField)) {
if (vendorAddressField.Value.ValueType == FieldValueType.String) {
string vendorAddress = vendorAddressField.Value.AsString();
Console.WriteLine($" Vendor Address: '{vendorAddress}', with confidence {vendorAddressField.Confidence}");
}
}
FormField customerNameField;
if (invoice.Fields.TryGetValue("CustomerName", out customerNameField)) {
if (customerNameField.Value.ValueType == FieldValueType.String) {
string customerName = customerNameField.Value.AsString();
Console.WriteLine($" Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
FormField customerAddressField;
if (invoice.Fields.TryGetValue("CustomerAddress", out customerAddressField)) {
if (customerAddressField.Value.ValueType == FieldValueType.String) {
string customerAddress = customerAddressField.Value.AsString();
Console.WriteLine($" Customer Address: '{customerAddress}', with confidence {customerAddressField.Confidence}");
}
}
FormField customerAddressRecipientField;
if (invoice.Fields.TryGetValue("CustomerAddressRecipient", out customerAddressRecipientField)) {
if (customerAddressRecipientField.Value.ValueType == FieldValueType.String) {
string customerAddressRecipient = customerAddressRecipientField.Value.AsString();
Console.WriteLine($" Customer address recipient: '{customerAddressRecipient}', with confidence {customerAddressRecipientField.Confidence}");
}
}
FormField invoiceTotalField;
if (invoice.Fields.TryGetValue("InvoiceTotal", out invoiceTotalField)) {
if (invoiceTotalField.Value.ValueType == FieldValueType.Float) {
float invoiceTotal = invoiceTotalField.Value.AsFloat();
Console.WriteLine($" Invoice Total: '{invoiceTotal}', with confidence {invoiceTotalField.Confidence}");
}
}
}
}
}
Ausführen der Anwendung
Wählen Sie die grüne Schaltfläche Starten neben „formRecognizer_quickstart“ aus, um Ihr Programm zu kompilieren und auszuführen, oder drücken Sie F5.
Referenzdokumentation | Quellcode der Bibliothek | Paket (Maven) | Beispiele
In dieser Schnellstartanleitung verwenden Sie die folgenden APIs zum Extrahieren strukturierter Daten aus Formularen und Dokumenten:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Java Development Kit (JDK), Version 8 oder höher. Weitere Informationen finden Sie unter Unterstützte Java-Versionen und Zeitplan für Updates.
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Erstellen eines neuen Gradle-Projekts
Erstellen Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App mit dem Namen form-recognizer-app, und navigieren Sie zu diesem Verzeichnis.
mkdir form-recognizer-app && form-recognizer-app
Führen Sie den Befehl
gradle init
in Ihrem Arbeitsverzeichnis aus. Mit diesem Befehl werden grundlegende Builddateien für Gradle erstellt, u. a. die Datei build.gradle.kts. Diese Datei wird zur Laufzeit zum Erstellen und Konfigurieren Ihrer Anwendung verwendet.gradle init --type basic
Wenn Sie zur Auswahl einer DSL aufgefordert werden, wählen Sie Kotlin aus.
Übernehmen Sie den Standardprojektnamen (form-recognizer-app).
Installieren der Clientbibliothek
In dieser Schnellstartanleitung wird der Gradle-Abhängigkeits-Manager verwendet. Die Clientbibliothek und Informationen zu anderen Abhängigkeits-Managern finden Sie im zentralen Maven-Repository.
Fügen Sie in die Datei build.gradle.kts Ihres Projekts die Clientbibliothek als als implementation
-Anweisung sowie die erforderlichen Plug-Ins und Einstellungen ein.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation(group = "com.azure", name = "azure-ai-formrecognizer", version = "3.1.1")
}
Erstellen einer Java-Datei
Führen Sie in Ihrem Arbeitsverzeichnis den folgenden Befehl aus:
mkdir -p src/main/java
Sie erstellen die folgende Verzeichnisstruktur:
Navigieren Sie zum Java-Verzeichnis, und erstellen Sie eine Datei mit dem Namen FormRecognizer.java. Öffnen Sie sie in Ihrem bevorzugten Editor bzw. Ihrer bevorzugten IDE, und fügen Sie die folgende Paketdeklaration und die folgenden import
-Anweisungen hinzu:
import com.azure.ai.formrecognizer.*;
import com.azure.ai.formrecognizer.models.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.List;
import java.util.Map;
import java.time.LocalDate;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.util.Context;
import com.azure.core.util.polling.SyncPoller;
Wählen Sie ein Codebeispiel zum Kopieren und Einfügen in die main-Methode Ihrer Anwendung aus:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Try it (Ausprobieren): Layoutmodell
Dient zum Extrahieren von Text, Auswahlmarkierungen, Textformaten und Tabellenstrukturen sowie der zugehörigen Begrenzungsbereichskoordinaten aus Dokumenten.
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Für die Analyse einer bestimmten Datei unter einem URI verwenden Sie die
beginRecognizeContentFromUrl
-Methode. - Wir haben den Datei-URI-Wert der Variablen
formUrl
in der main-Methode hinzugefügt.
Aktualisieren Sie die FormRecognizer-Klasse Ihrer Anwendung mit dem folgenden Code (stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren):
static final String key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
public static void main(String[] args) {FormRecognizerClient recognizerClient = new FormRecognizerClientBuilder()
.credential(new AzureKeyCredential(key)).endpoint(endpoint).buildClient();
String formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
System.out.println("Get form content...");
GetContent(recognizerClient, formUrl);
}
private static void GetContent(FormRecognizerClient recognizerClient, String invoiceUri) {
String analyzeFilePath = invoiceUri;
SyncPoller<FormRecognizerOperationResult, List<FormPage>> recognizeContentPoller = recognizerClient
.beginRecognizeContentFromUrl(analyzeFilePath);
List<FormPage> contentResult = recognizeContentPoller.getFinalResult();
// </snippet_getcontent_call>
// <snippet_getcontent_print>
contentResult.forEach(formPage -> {
// Table information
System.out.println("----Recognizing content ----");
System.out.printf("Has width: %f and height: %f, measured with unit: %s.%n", formPage.getWidth(),
formPage.getHeight(), formPage.getUnit());
formPage.getTables().forEach(formTable -> {
System.out.printf("Table has %d rows and %d columns.%n", formTable.getRowCount(),
formTable.getColumnCount());
formTable.getCells().forEach(formTableCell -> {
System.out.printf("Cell has text %s.%n", formTableCell.getText());
});
System.out.println();
});
});
}
Probieren Sie es aus: Vordefiniertes Modell
Dieses Beispiel zeigt Ihnen, wie Sie Daten aus bestimmten Arten von gängigen Dokumenten mit vortrainierten Modellen analysieren können.
- In diesem Beispiel analysieren Sie ein Rechnungsdokument mithilfe eines vordefinierten Modells. Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Für die Analyse einer bestimmten Datei unter einem URI verwenden Sie
beginRecognizeInvoicesFromUrl
. - Wir haben den Datei-URI-Wert der Variablen
invoiceUrl
in der main-Methode hinzugefügt. - Der Einfachheit halber werden hier nicht alle Felder angezeigt, die vom Dienst zurückgegeben werden. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Auswählen eines vordefinierten Modells
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den Analysevorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Hier finden Sie die vordefinierten Modelle, die vom Dokument Intelligenz-Dienst derzeit unterstützt werden:
- Rechnung: Extrahieren von Text, Auswahlmarkierungen, Tabellen, Feldern und wichtigen Informationen aus Rechnungen
- Beleg: Extrahieren von Text und wichtigen Informationen aus Belegen
- Ausweisdokument: Extrahieren von Text und wichtigen Informationen aus Führerscheinen und Reisepässen
- Visitenkarte: Extrahieren von Text und wichtigen Informationen aus Visitenkarten
Aktualisieren Sie die FormRecognizer-Klasse Ihrer Anwendung mit dem folgenden Code (stellen Sie sicher, dass Sie die Schlüssel- und Endpunktvariablen mit Werten aus Ihrer Dokument Intelligenz-Instanz im Azure-Portal aktualisieren):
static final String key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
public static void main(String[] args) {
FormRecognizerClient recognizerClient = new FormRecognizerClientBuilder().credential(new AzureKeyCredential(key)).endpoint(endpoint).buildClient();
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
System.out.println("Analyze invoice...");
AnalyzeInvoice(recognizerClient, invoiceUrl);
}
private static void AnalyzeInvoice(FormRecognizerClient recognizerClient, String invoiceUrl) {
SyncPoller < FormRecognizerOperationResult,
List < RecognizedForm >> recognizeInvoicesPoller = recognizerClient.beginRecognizeInvoicesFromUrl(invoiceUrl);
List < RecognizedForm > recognizedInvoices = recognizeInvoicesPoller.getFinalResult();
for (int i = 0; i < recognizedInvoices.size(); i++) {
RecognizedForm recognizedInvoice = recognizedInvoices.get(i);
Map < String,
FormField > recognizedFields = recognizedInvoice.getFields();
System.out.printf("----------- Recognized invoice info for page %d -----------%n", i);
FormField vendorNameField = recognizedFields.get("VendorName");
if (vendorNameField != null) {
if (FieldValueType.STRING == vendorNameField.getValue().getValueType()) {
String merchantName = vendorNameField.getValue().asString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n", merchantName, vendorNameField.getConfidence());
}
}
FormField vendorAddressField = recognizedFields.get("VendorAddress");
if (vendorAddressField != null) {
if (FieldValueType.STRING == vendorAddressField.getValue().getValueType()) {
String merchantAddress = vendorAddressField.getValue().asString();
System.out.printf("Vendor address: %s, confidence: %.2f%n", merchantAddress, vendorAddressField.getConfidence());
}
}
FormField customerNameField = recognizedFields.get("CustomerName");
if (customerNameField != null) {
if (FieldValueType.STRING == customerNameField.getValue().getValueType()) {
String merchantAddress = customerNameField.getValue().asString();
System.out.printf("Customer Name: %s, confidence: %.2f%n", merchantAddress, customerNameField.getConfidence());
}
}
FormField customerAddressRecipientField = recognizedFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (FieldValueType.STRING == customerAddressRecipientField.getValue().getValueType()) {
String customerAddr = customerAddressRecipientField.getValue().asString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n", customerAddr, customerAddressRecipientField.getConfidence());
}
}
FormField invoiceIdField = recognizedFields.get("InvoiceId");
if (invoiceIdField != null) {
if (FieldValueType.STRING == invoiceIdField.getValue().getValueType()) {
String invoiceId = invoiceIdField.getValue().asString();
System.out.printf("Invoice Id: %s, confidence: %.2f%n", invoiceId, invoiceIdField.getConfidence());
}
}
FormField invoiceDateField = recognizedFields.get("InvoiceDate");
if (customerNameField != null) {
if (FieldValueType.DATE == invoiceDateField.getValue().getValueType()) {
LocalDate invoiceDate = invoiceDateField.getValue().asDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n", invoiceDate, invoiceDateField.getConfidence());
}
}
FormField invoiceTotalField = recognizedFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (FieldValueType.FLOAT == invoiceTotalField.getValue().getValueType()) {
Float invoiceTotal = invoiceTotalField.getValue().asFloat();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n", invoiceTotal, invoiceTotalField.getConfidence());
}
}
}
}
Erstellen und Ausführen der Anwendung
Navigieren Sie zurück zum Hauptverzeichnis (form-recognizer-app) Ihres Projekts.
- Erstellen Sie Ihre Anwendung mit dem Befehl
build
:
gradle build
- Führen Sie Ihre Anwendung mit dem Befehl
run
aus:
gradle run
Referenzdokumentation | Quellcode der Bibliothek | Paket (npm) | Beispiele
In dieser Schnellstartanleitung verwenden Sie die folgenden APIs zum Extrahieren strukturierter Daten aus Formularen und Dokumenten:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
Die aktuelle Version von Visual Studio Code oder Ihrer bevorzugten IDE
Die aktuelle LTS-Version von Node.js
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Erstellen Sie eine neue Node.js-Anwendung. Erstellen Sie in einem Konsolenfenster (etwa cmd, PowerShell oder Bash) ein neues Verzeichnis für Ihre App, und rufen Sie es auf.
mkdir form-recognizer-app && cd form-recognizer-app
Führen Sie den Befehl
npm init
aus, um eine Knotenanwendung mit der Dateipackage.json
zu erstellen.npm init
Installieren Sie das npm-Paket der Clientbibliothek
ai-form-recognizer
:npm install @azure/ai-form-recognizer
Die Datei
package.json
Ihrer App wird mit den Abhängigkeiten aktualisiert.Erstellen Sie eine Datei mit dem Namen
index.js
, öffnen Sie sie, und importieren Sie die folgenden Bibliotheken:const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
Erstellen Sie Variablen für den Azure-Endpunkt und -Schlüssel Ihrer Ressource:
const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE"; const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
An diesem Punkt sollte Ihre JavaScript-Anwendung die folgenden Codezeilen enthalten:
const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer"); const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE"; const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
Wählen Sie ein Codebeispiel zum Kopieren und Einfügen in Ihre Anwendung aus:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Try it (Ausprobieren): Layoutmodell
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Sie haben den Datei-URI-Wert der Variable
formUrl
im oberen Bereich der Datei hinzugefügt. - Für die Analyse einer bestimmten Datei unter einem URI verwenden Sie die
beginRecognizeContent
-Methode.
Fügen Sie Ihrer Layoutanwendung in der Zeile unterhalb der Variablen key
den folgenden Code hinzu:
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
async function recognizeContent() {
const client = new FormRecognizerClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginRecognizeContentFromUrl(formUrl);
const pages = await poller.pollUntilDone();
if (!pages || pages.length === 0) {
throw new Error("Expecting non-empty list of pages!");
}
for (const page of pages) {
console.log(
`Page ${page.pageNumber}: width ${page.width} and height ${page.height} with unit ${page.unit}`
);
for (const table of page.tables) {
for (const cell of table.cells) {
console.log(`cell [${cell.rowIndex},${cell.columnIndex}] has text ${cell.text}`);
}
}
}
}
recognizeContent().catch((err) => {
console.error("The sample encountered an error:", err);
});
Probieren Sie es aus: Vordefiniertes Modell
Dieses Beispiel zeigt Ihnen, wie Sie Daten aus bestimmten Arten von gängigen Dokumenten mit vortrainierten Modellen analysieren können. Eine vollständige Liste mit Rechnungsfeldernfinden Sie auf unserer Seite mit den vordefinierten Konzepten.
- In diesem Beispiel analysieren Sie ein Rechnungsdokument mithilfe eines vordefinierten Modells. Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Sie haben den Datei-URI-Wert der Variable
invoiceUrl
im oben in der Datei hinzugefügt. - Für die Analyse einer bestimmten Datei unter einem URI verwenden Sie die
beginRecognizeInvoices
-Methode. - Der Einfachheit halber werden hier nicht alle Felder angezeigt, die vom Dienst zurückgegeben werden. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Auswählen eines vordefinierten Modells
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den Analysevorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Hier finden Sie die vordefinierten Modelle, die vom Dokument Intelligenz-Dienst derzeit unterstützt werden:
- Rechnung: Extrahieren von Text, Auswahlmarkierungen, Tabellen, Feldern und wichtigen Informationen aus Rechnungen
- Beleg: Extrahieren von Text und wichtigen Informationen aus Belegen
- Ausweisdokument: Extrahieren von Text und wichtigen Informationen aus Führerscheinen und Reisepässen
- Visitenkarte: Extrahieren von Text und wichtigen Informationen aus Visitenkarten
Fügen Sie Ihrer vordefinierten Rechnungsanwendung unterhalb der Variablen key
den folgenden Code hinzu:
const invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
async function recognizeInvoices() {
const client = new FormRecognizerClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginRecognizeInvoicesFromUrl(invoiceUrl);
const [invoice] = await poller.pollUntilDone();
if (invoice === undefined) {
throw new Error("Failed to extract data from at least one invoice.");
}
/**
* This is a helper function for printing a simple field with an elemental type.
*/
function fieldToString(field) {
const {
name,
valueType,
value,
confidence
} = field;
return `${name} (${valueType}): '${value}' with confidence ${confidence}'`;
}
console.log("Invoice fields:");
/**
* Invoices contain a lot of optional fields, but they are all of elemental types
* such as strings, numbers, and dates, so we will just enumerate them all.
*/
for (const [name, field] of Object.entries(invoice.fields)) {
if (field.valueType !== "array" && field.valueType !== "object") {
console.log(`- ${name} ${fieldToString(field)}`);
}
}
// Invoices also support nested line items, so we can iterate over them.
let idx = 0;
console.log("- Items:");
const items = invoice.fields["Items"]?.value;
for (const item of items ?? []) {
const value = item.value;
// Each item has several subfields that are nested within the item. We'll
// map over this list of the subfields and filter out any fields that
// weren't found. Not all fields will be returned every time, only those
// that the service identified for the particular document in question.
const subFields = [
"Description",
"Quantity",
"Unit",
"UnitPrice",
"ProductCode",
"Date",
"Tax",
"Amount"
]
.map((fieldName) => value[fieldName])
.filter((field) => field !== undefined);
console.log(
[
` - Item #${idx}`,
// Now we will convert those fields into strings to display
...subFields.map((field) => ` - ${fieldToString(field)}`)
].join("\n")
);
}
}
recognizeInvoices().catch((err) => {
console.error("The sample encountered an error:", err);
});
Referenzdokumentation | Quellcode der Bibliothek | Paket (PyPi) | Beispiele
In dieser Schnellstartanleitung verwenden Sie die folgenden APIs zum Extrahieren strukturierter Daten aus Formularen und Dokumenten:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
-
- Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie
pip --version
in der Befehlszeile ausführen. Installieren Sie die aktuelle Python-Version, um pip zu erhalten.
- Ihre Python-Installation sollte pip enthalten. Sie können überprüfen, ob pip installiert ist, indem Sie
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Einrichten
Öffnen Sie in Ihrer lokalen Umgebung ein Terminalfenster, und installieren Sie die Azure KI Dokument Intelligenz-Clientbibliothek für Python mit pip:
pip install azure-ai-formrecognizer
Erstellen einer neuen Python-Anwendung
Erstellen Sie mit Ihrem bevorzugten Editor bzw. Ihrer IDE eine neue Python-Anwendung mit dem Namen form_recognizer_quickstart.py. Importieren Sie anschließend die folgenden Bibliotheken:
import os
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
Erstellen von Variablen für den Endpunkt und Schlüssel Ihrer Azure-Ressource
endpoint = "YOUR_FORM_RECOGNIZER_ENDPOINT"
key = "YOUR_FORM_RECOGNIZER_KEY"
An diesem Punkt sollte Ihre Python-Anwendung die folgenden Codezeilen enthalten:
import os
from azure.core.exceptions import ResourceNotFoundError
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
endpoint = "YOUR_FORM_RECOGNIZER_ENDPOINT"
key = "YOUR_FORM_RECOGNIZER_KEY"
Wählen Sie ein Codebeispiel zum Kopieren und Einfügen in Ihre Anwendung aus:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Try it (Ausprobieren): Layoutmodell
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Sie haben den Datei-URI-Wert der Variable
formUrl
im oberen Bereich der Datei hinzugefügt. - Für die Analyse einer bestimmten Datei unter einem URI verwenden Sie die
begin_recognize_content_from_url
-Methode.
Fügen Sie Ihrer Layoutanwendung in der Zeile unterhalb der Variablen key
den folgenden Code hinzu:
def format_bounding_box(bounding_box):
if not bounding_box:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in bounding_box])
def recognize_content():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
form_recognizer_client = FormRecognizerClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = form_recognizer_client.begin_recognize_content_from_url(formUrl)
form_pages = poller.result()
for idx, content in enumerate(form_pages):
print(
"Page has width: {} and height: {}, measured with unit: {}".format(
content.width, content.height, content.unit
)
)
for table_idx, table in enumerate(content.tables):
print(
"Table # {} has {} rows and {} columns".format(
table_idx, table.row_count, table.column_count
)
)
print(
"Table # {} location on page: {}".format(
table_idx, format_bounding_box(table.bounding_box)
)
)
for cell in table.cells:
print(
"...Cell[{}][{}] has text '{}' within bounding box '{}'".format(
cell.row_index,
cell.column_index,
cell.text,
format_bounding_box(cell.bounding_box),
)
)
for line_idx, line in enumerate(content.lines):
print(
"Line # {} has word count '{}' and text '{}' within bounding box '{}'".format(
line_idx,
len(line.words),
line.text,
format_bounding_box(line.bounding_box),
)
)
if line.appearance:
if (
line.appearance.style_name == "handwriting"
and line.appearance.style_confidence > 0.8
):
print(
"Text line '{}' is handwritten and might be a signature.".format(
line.text
)
)
for word in line.words:
print(
"...Word '{}' has a confidence of {}".format(
word.text, word.confidence
)
)
for selection_mark in content.selection_marks:
print(
"Selection mark is '{}' within bounding box '{}' and has a confidence of {}".format(
selection_mark.state,
format_bounding_box(selection_mark.bounding_box),
selection_mark.confidence,
)
)
print("----------------------------------------")
if __name__ == "__main__":
recognize_content()
Probieren Sie es aus: Vordefiniertes Modell
Dieses Beispiel zeigt Ihnen, wie Sie Daten aus bestimmten Arten von gängigen Dokumenten mit vortrainierten Modellen analysieren können. Eine vollständige Liste mit Rechnungsfeldernfinden Sie auf unserer Seite mit den vordefinierten Konzepten.
- In diesem Beispiel analysieren Sie ein Rechnungsdokument mithilfe eines vordefinierten Modells. Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
- Wir haben den Datei-URI-Wert der Variablen „formUrl“ oben in der Datei hinzugefügt.
- Sie verwenden die Methode „begin_recognize_invoices_from_url“, um eine bestimmte Datei unter einem URI zu analysieren.
- Der Einfachheit halber werden hier nicht alle Felder angezeigt, die vom Dienst zurückgegeben werden. Eine Liste aller unterstützten Felder mit den entsprechenden Typen finden Sie auf der Konzeptseite Rechnung.
Auswählen eines vordefinierten Modells
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den Analysevorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Hier finden Sie die vordefinierten Modelle, die vom Dokument Intelligenz-Dienst derzeit unterstützt werden:
- Rechnung: Extrahieren von Text, Auswahlmarkierungen, Tabellen, Feldern und wichtigen Informationen aus Rechnungen
- Beleg: Extrahieren von Text und wichtigen Informationen aus Belegen
- Ausweisdokument: Extrahieren von Text und wichtigen Informationen aus Führerscheinen und Reisepässen
- Visitenkarte: Extrahieren von Text und wichtigen Informationen aus Visitenkarten
Fügen Sie Ihrer vordefinierten Rechnungsanwendung unterhalb der Variablen key
den folgenden Code hinzu:
def recognize_invoice():
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
form_recognizer_client = FormRecognizerClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = form_recognizer_client.begin_recognize_invoices_from_url(
invoiceUrl, locale="en-US"
)
invoices = poller.result()
for idx, invoice in enumerate(invoices):
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
"Vendor Name: {} has confidence: {}".format(
vendor_name.value, vendor_name.confidence
)
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
"Vendor Address: {} has confidence: {}".format(
vendor_address.value, vendor_address.confidence
)
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
"Vendor Address Recipient: {} has confidence: {}".format(
vendor_address_recipient.value, vendor_address_recipient.confidence
)
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
"Customer Name: {} has confidence: {}".format(
customer_name.value, customer_name.confidence
)
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
"Customer Id: {} has confidence: {}".format(
customer_id.value, customer_id.confidence
)
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
"Customer Address: {} has confidence: {}".format(
customer_address.value, customer_address.confidence
)
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
"Customer Address Recipient: {} has confidence: {}".format(
customer_address_recipient.value,
customer_address_recipient.confidence,
)
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
"Invoice Id: {} has confidence: {}".format(
invoice_id.value, invoice_id.confidence
)
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
"Invoice Date: {} has confidence: {}".format(
invoice_date.value, invoice_date.confidence
)
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
"Invoice Total: {} has confidence: {}".format(
invoice_total.value, invoice_total.confidence
)
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
"Due Date: {} has confidence: {}".format(
due_date.value, due_date.confidence
)
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
"Purchase Order: {} has confidence: {}".format(
purchase_order.value, purchase_order.confidence
)
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
"Billing Address: {} has confidence: {}".format(
billing_address.value, billing_address.confidence
)
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
"Billing Address Recipient: {} has confidence: {}".format(
billing_address_recipient.value,
billing_address_recipient.confidence,
)
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
"Shipping Address: {} has confidence: {}".format(
shipping_address.value, shipping_address.confidence
)
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
"Shipping Address Recipient: {} has confidence: {}".format(
shipping_address_recipient.value,
shipping_address_recipient.confidence,
)
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
item_description = item.value.get("Description")
if item_description:
print(
"......Description: {} has confidence: {}".format(
item_description.value, item_description.confidence
)
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
"......Quantity: {} has confidence: {}".format(
item_quantity.value, item_quantity.confidence
)
)
unit = item.value.get("Unit")
if unit:
print(
"......Unit: {} has confidence: {}".format(
unit.value, unit.confidence
)
)
unit_price = item.value.get("UnitPrice")
if unit_price:
print(
"......Unit Price: {} has confidence: {}".format(
unit_price.value, unit_price.confidence
)
)
product_code = item.value.get("ProductCode")
if product_code:
print(
"......Product Code: {} has confidence: {}".format(
product_code.value, product_code.confidence
)
)
item_date = item.value.get("Date")
if item_date:
print(
"......Date: {} has confidence: {}".format(
item_date.value, item_date.confidence
)
)
tax = item.value.get("Tax")
if tax:
print(
"......Tax: {} has confidence: {}".format(tax.value, tax.confidence)
)
amount = item.value.get("Amount")
if amount:
print(
"......Amount: {} has confidence: {}".format(
amount.value, amount.confidence
)
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
"Subtotal: {} has confidence: {}".format(
subtotal.value, subtotal.confidence
)
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
"Total Tax: {} has confidence: {}".format(
total_tax.value, total_tax.confidence
)
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
"Previous Unpaid Balance: {} has confidence: {}".format(
previous_unpaid_balance.value, previous_unpaid_balance.confidence
)
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
"Amount Due: {} has confidence: {}".format(
amount_due.value, amount_due.confidence
)
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
"Service Start Date: {} has confidence: {}".format(
service_start_date.value, service_start_date.confidence
)
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
"Service End Date: {} has confidence: {}".format(
service_end_date.value, service_end_date.confidence
)
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
"Service Address: {} has confidence: {}".format(
service_address.value, service_address.confidence
)
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
"Service Address Recipient: {} has confidence: {}".format(
service_address_recipient.value,
service_address_recipient.confidence,
)
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
"Remittance Address: {} has confidence: {}".format(
remittance_address.value, remittance_address.confidence
)
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
"Remittance Address Recipient: {} has confidence: {}".format(
remittance_address_recipient.value,
remittance_address_recipient.confidence,
)
)
if __name__ == "__main__":
recognize_invoice()
Ausführen der Anwendung
Navigieren Sie zu dem Ordner, in dem Ihre Datei form_recognizer_quickstart.py enthalten ist.
Geben Sie in Ihrem Terminal den folgenden Befehl ein:
python form_recognizer_quickstart.py
| Dokument Intelligenz-REST-API | Azure REST API-Referenz |
In dieser Schnellstartanleitung verwenden Sie die folgenden APIs zum Extrahieren strukturierter Daten aus Formularen und Dokumenten:
Voraussetzungen
Azure-Abonnement – Erstellen eines kostenlosen Kontos
cURL muss installiert sein.
PowerShell-Version 6.0 oder höher oder eine ähnliche Befehlszeilenanwendung
Eine Azure KI Services- oder Dokument Intelligenz-Ressource. Sobald Sie über Ihr Azure-Abonnement verfügen, erstellen Sie im Azure-Portal eine Dokument Intelligenz-Ressource für einen einzelnen Dienst oder für mehrere Dienste, um Ihren Schlüssel und Endpunkt zu erhalten. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden.Tipp
Erstellen Sie eine Azure KI Services-Ressource, wenn Sie planen, auf mehrere Azure KI Services unter einem einzelnen Endpunkt/Schlüssel zuzugreifen. Erstellen Sie nur für den Zugriff auf Dokument Intelligenz eine Dokument Intelligenz-Ressource. Beachten Sie hierbei, dass Sie eine Ressource mit einem einzelnen Dienst benötigen, falls Sie die Microsoft Entra-Authentifizierung nutzen möchten.
Wählen Sie nach der Bereitstellung der Ressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um Ihre Anwendung mit der Dokument Intelligenz-API zu verbinden. Der Schlüssel und der Endpunkt werden später in der Schnellstartanleitung in den Code eingefügt.
Wählen Sie ein Codebeispiel zum Kopieren und Einfügen in Ihre Anwendung aus:
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Für weitere Informationen lesen Sie Azure KI Services-Sicherheit.
Try it (Ausprobieren): Layoutmodell
- Für dieses Beispiel benötigen Sie eine Dokumentdatei unter einem URI. Für diesen Schnellstart können Sie das Beispieldokument verwenden.
- Ersetzen Sie
{endpoint}
durch den Endpunkt, den Sie mit Ihrem Dokument Intelligenz-Abonnement erhalten haben. - Ersetzen Sie
{key}
durch den Schlüssel, den Sie im vorherigen Schritt kopiert haben. - Ersetzen Sie
\"{your-document-url}
durch die URL eines Beispieldokuments:
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf
Anforderung
curl -v -i POST "https://{endpoint}/formrecognizer/v2.1/layout/analyze" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
Operation-Location
Sie erhalten die Antwort 202 (Success)
mit einem Operation-Location-Header. Der Wert dieses Headers enthält eine Ergebnis-ID, mit der Sie den Status des asynchronen Vorgangs abfragen und die Ergebnisse abrufen können:
https://cognitiveservice/formrecognizer/v2.1/layout/analyzeResults/ {resultId} .
Im folgenden Beispiel als Teil der URL ist die Zeichenfolge nach analyzeResults/
die Ergebnis-ID.
https://cognitiveservice/formrecognizer/v2/layout/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb
Abrufen von Layoutergebnissen
Nachdem Sie die Analyze Layout -API aufgerufen haben, rufen Sie die Get Analyze Layout Result -API auf, um den Status des Vorgangs und die extrahierten Daten abzurufen. Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
- Ersetzen Sie
{endpoint}
durch den Endpunkt, den Sie mit Ihrem Dokument Intelligenz-Abonnement erhalten haben. - Ersetzen Sie
{key}
durch den Schlüssel, den Sie im vorherigen Schritt kopiert haben. - Ersetzen Sie
{resultId}
durch die Ergebnis-ID aus dem vorherigen Schritt.
Anforderung
curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/layout/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"
Untersuchen der Ergebnisse
Sie erhalten die Antwort 200 (success)
mit dem JSON-Inhalt.
Vergleichen Sie das folgende Bild einer Rechnung mit der entsprechenden JSON-Ausgabe.
- Der Knoten
"readResults"
enthält jede Textzeile mit der Platzierung des zugehörigen Begrenzungsrahmens auf der Seite. - Der Knoten
selectionMarks
zeigt jede Auswahlmarkierung (Kontrollkästchen, Optionsfeld) und ihren Status –selected
oderunselected
– an. - Der Abschnitt
"pageResults"
enthält die extrahierten Tabellen. Für jede Tabelle werden der Text-, Zeilen- und Spaltenindex, die Zeilen- und Spaltenaufteilung, der Begrenzungsrahmen und mehr extrahiert.
Antworttext
Sie können die vollständige Beispielausgabe auf GitHub anzeigen.
Probieren Sie es aus: Vordefiniertes Modell
- In diesem Beispiel analysieren Sie ein Rechnungsdokument mithilfe eines vordefinierten Modells. Für diese Schnellstartanleitung können Sie unser Beispiel für ein Rechnungsdokument verwenden.
Auswählen eines vordefinierten Modells
Sie sind hierbei nicht auf Rechnungen beschränkt, sondern können zwischen mehreren vordefinierten Modellen wählen, von denen jedes über eine Gruppe unterstützter Felder verfügt. Welches Modell für den Analysevorgang verwendet wird, hängt vom Typ des zu analysierenden Dokuments ab. Hier finden Sie die vordefinierten Modelle, die vom Dokument Intelligenz-Dienst derzeit unterstützt werden:
- Rechnung: Extrahieren von Text, Auswahlmarkierungen, Tabellen, Feldern und wichtigen Informationen aus Rechnungen
- Beleg: Extrahieren von Text und wichtigen Informationen aus Belegen
- Ausweisdokument: Extrahieren von Text und wichtigen Informationen aus Führerscheinen und Reisepässen
- Visitenkarte: Extrahieren von Text und wichtigen Informationen aus Visitenkarten
Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
Ersetzen Sie
{endpoint}
durch den Endpunkt, den Sie mit Ihrem Dokument Intelligenz-Abonnement erhalten haben.Ersetzen Sie
{key}
durch den Schlüssel, den Sie im vorherigen Schritt kopiert haben.Ersetzen Sie
\"{your-document-url}
durch eine URL für ein Rechnungsbeispiel:https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf
Anforderung
curl -v -i POST https://{endpoint}/formrecognizer/v2.1/prebuilt/invoice/analyze" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your invoice URL}'}"
Operation-Location
Sie erhalten die Antwort 202 (Success)
mit einem Operation-Location-Header. Der Wert dieses Headers enthält eine Ergebnis-ID, mit der Sie den Status des asynchronen Vorgangs abfragen und die Ergebnisse abrufen können:
https://cognitiveservice/formrecognizer/v2.1/prebuilt/receipt/analyzeResults/ {resultId}
Im folgenden Beispiel als Teil der URL ist die Zeichenfolge nach analyzeResults/
die Ergebnis-ID:
https://cognitiveservice/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb
Abrufen von Rechnungsergebnissen
Nachdem Sie die Analyze Invoice-API aufgerufen haben, rufen Sie die Get Analyze Invoice Result -API auf, um den Status des Vorgangs und die extrahierten Daten abzurufen. Nehmen Sie die folgenden Änderungen vor, bevor Sie den Befehl ausführen:
- Ersetzen Sie
{endpoint}
durch den Endpunkt, den Sie mit Ihrem Dokument Intelligenz-Schlüssel erhalten haben. Sie finden ihn auf der Registerkarte Übersicht ihrer Dokument Intelligenz-Ressource. - Ersetzen Sie
{resultId}
durch die Ergebnis-ID aus dem vorherigen Schritt. - Ersetzen Sie
{key}
durch Ihren Schlüssel.
Anforderung
curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"
Untersuchen der Antwort
Sie erhalten die Antwort 200 (Success)
mit einer JSON-Ausgabe.
- Das
"readResults"
-Feld enthält alle Textzeilen, die aus der Rechnung extrahiert wurden. "pageResults"
beinhaltet die Tabellen und Informationen zu den Auswahlkästchen, die aus der Rechnung extrahiert wurden.- Das
"documentResults"
-Feld enthält die Schlüssel-/Wertinformationen für die relevantesten Teile der Rechnung.
Weitere Informationen finden Sie im Dokument mit der Beispielrechnung.
Antworttext
Auf GitHub finden Sie die vollständige Beispielausgabe.
Sie sind fertig. Gut gemacht!
Nächste Schritte
Testen Sie Dokument Intelligenz Studio für eine verbesserte Erfahrung und Modellqualität.
Studio unterstützt jedes Modell, das mit in v2.1 gekennzeichneten Daten trainiert wurde.
Die Änderungsprotokolle enthalten detaillierte Informationen zur Migration von v3.1 zu v4.0.