Komma igång med Formigenkänning

Den här artikeln gäller för bockmarkeringen:Formigenkänning v3.0Formigenkänning v3.0. Tidigare version:Formigenkänning v2.1

Kom igång med den senaste versionen av Azure Formigenkänning. Azure Formigenkänning är en molnbaserad Azure Applied AI-tjänst som använder maskininlärning för att extrahera nyckel/värde-par, text, tabeller och nyckeldata från dina dokument. Du kan enkelt integrera Formigenkänning modeller i dina arbetsflöden och program med hjälp av en SDK på valfritt programmeringsspråk eller genom att anropa REST-API:et. I den här snabbstarten rekommenderar vi att du använder den kostnadsfria tjänsten medan du lär dig tekniken. Kom ihåg att antalet kostnadsfria sidor är begränsat till 500 per månad.

Mer information om Formigenkänning funktioner och utvecklingsalternativ finns på vår översiktssida.

SDK-referens|API-referens | Paket (NuGet) | Prover | REST API-versioner som stöds

I den här snabbstarten använder du följande funktioner för att analysera och extrahera data och värden från formulär och dokument:

  • Allmän dokumentmodell – Analysera och extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter.

  • Layoutmodell – Analysera och extrahera tabeller, linjer, ord och markeringsmarkeringar som alternativknappar och kryssrutor i dokument, utan att behöva träna en modell.

  • Fördefinierad modell – Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en fördefinierad modell.

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt.

  • Den aktuella versionen av Visual Studio IDE.

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt.

  • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Tips

Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

  1. Starta Visual Studio.

  2. På startsidan väljer du Skapa ett nytt projekt.

    Skärmbild: Visual Studio-startfönstret.

  3. sidan Skapa ett nytt projekt anger du konsolen i sökrutan. Välj mallen Konsolprogram och välj sedan Nästa.

    Skärmbild: Sidan Skapa nytt projekt i Visual Studio.

  4. I dialogrutan Konfigurera det nya projektet anger du formRecognizer_quickstart i rutan Projektnamn. Välj sedan Nästa.

    Skärmbild: Dialogrutan Konfigurera nytt projekt i Visual Studio.

  5. I dialogrutan Ytterligare information väljer du .NET 6.0 (långsiktigt stöd) och väljer sedan Skapa.

    Skärmbild: Visual Studio ytterligare informationsdialogruta.

Installera klientbiblioteket med NuGet

  1. Högerklicka på ditt formRecognizer_quickstart projekt och välj Hantera NuGet-paket... .

    Skärmbild av välj NuGet-paketfönstret i Visual Studio.

  2. Välj fliken Bläddra och skriv Azure.AI.FormRecognizer.

    Skärmbild av välj NuGet-paket i förväg i Visual Studio.

  3. Välj version 4.0.0 i listrutan och installera paketet i projektet.

Skapa ditt program

Om du vill interagera med Formigenkänning-tjänsten måste du skapa en instans av DocumentAnalysisClient klassen. För att göra det skapar du en AzureKeyCredential med din key från Azure Portal och en DocumentAnalysisClient instans med AzureKeyCredential och din Formigenkänning endpoint.

Anteckning

  • Från och med .NET 6 genererar nya projekt med mallen console ett nytt programformat som skiljer sig från tidigare versioner.
  • De nya utdata använder de senaste C#-funktionerna som förenklar koden du behöver skriva.
  • När du använder den nyare versionen behöver du bara skriva metodens Main brödtext. Du behöver inte inkludera instruktioner på toppnivå, globala användningsdirektiv eller implicita med hjälp av direktiv.
  • Mer information finns iNya C#-mallar genererar instruktioner på toppnivå.
  1. Öppna filen Program.cs .

  2. Ta bort den befintliga koden, inklusive raden Console.Writeline("Hello World!"), och välj något av följande kodexempel för att kopiera och klistra in i programmets Program.cs-fil:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i Cognitive Services-säkerhet.

Allmän dokumentmodell

Analysera och extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter.

  • I det här exemplet behöver du en formulärdokumentfil från en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil vid en URI använder StartAnalyzeDocumentFromUri du metoden och skickar prebuilt-document den som modell-ID. Det returnerade värdet är ett AnalyzeResult objekt som innehåller data om det skickade dokumentet.
  • Vi har lagt till fil-URI-värdet i variabeln Uri fileUri överst i skriptet.

Lägg till följande kodexempel i filen Program.cs. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:

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 form 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-document", fileUri);

AnalyzeResult result = operation.Value;

Console.WriteLine("Detected key-value pairs:");

foreach (DocumentKeyValuePair kvp in result.KeyValuePairs)
{
    if (kvp.Value == null)
    {
        Console.WriteLine($"  Found key with no value: '{kvp.Key.Content}'");
    }
    else
    {
        Console.WriteLine($"  Found key-value pair: '{kvp.Key.Content}' and '{kvp.Value.Content}'");
    }
}

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}'.");
    }
}

Köra ditt program

När du har lagt till ett kodexempel i programmet väljer du den gröna Start-knappen bredvid formRecognizer_quickstart för att skapa och köra programmet, eller tryck på F5.

Skärmbild: kör ditt Visual Studio-program.

Allmänna dokumentmodellutdata

Här är ett kodfragment av förväntade utdata:

  Detected key-value pairs:
  Found key with no value: '?'
  Found key-value pair: 'QUARTERLY REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934' and ':selected:'
  Found key-value pair: 'For the Quarterly Period Ended March 31, 2020' and 'OR'
  Found key with no value: '?'
  Found key-value pair: 'TRANSITION REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934' and ':unselected:'
  Found key with no value: 'For the Transition Period From'
  Found key-value pair: 'to Commission File Number' and '001-37845'

Om du vill visa hela utdata går du till Azure-exempellagringsplatsen på GitHub för att visa utdata för den allmänna dokumentmodellen.

Layoutmodell

Extrahera text, markeringsmarkeringar, textformat, tabellstrukturer och avgränsningsregionkoordinater från dokument.

  • I det här exemplet behöver du en formulärdokumentfil från en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln Uri fileUri överst i skriptet.
  • Om du vill extrahera layouten från en viss fil vid en URI använder du StartAnalyzeDocumentFromUri metoden och skickar prebuilt-layout den som modell-ID. Det returnerade värdet är ett AnalyzeResult objekt som innehåller data från det skickade dokumentet.

Lägg till följande kodexempel i filen Program.cs. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:

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}'.");
    }
}

Köra ditt program

När du har lagt till ett kodexempel i programmet väljer du den gröna Start-knappen bredvid formRecognizer_quickstart för att skapa och köra programmet, eller tryck på F5.

Skärmbild: kör ditt Visual Studio-program.

Jag stötte på ett problem när jag körde programmet.

Utdata för layoutmodell

Här är ett kodfragment av förväntade utdata:

  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

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa layoutmodellens utdata.

Fördefinierad modell

Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en fördefinierad modell. I det här exemplet analyserar vi en faktura med den fördefinierade fakturamodellen .

Tips

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Se extrahering av modelldata.

  • Analysera en faktura med den fördefinierade fakturamodellen. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln Uri invoiceUri överst i Filen Program.cs.
  • Om du vill analysera en viss fil vid en URI använder du StartAnalyzeDocumentFromUri metoden och skickar prebuilt-invoice den som modell-ID. Det returnerade värdet är ett AnalyzeResult objekt som innehåller data från det skickade dokumentet.
  • För enkelhetens skull visas inte alla nyckel/värde-par som tjänsten returnerar här. Om du vill se listan över alla fält som stöds och motsvarande typer kan du läsa vår sida med fakturakoncept .

Lägg till följande kodexempel i filen Program.cs. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:



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 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}");
        }
    }
}

Köra ditt program

När du har lagt till ett kodexempel i programmet väljer du den gröna Start-knappen bredvid formRecognizer_quickstart för att skapa och köra programmet, eller tryck på F5.

Skärmbild: kör ditt Visual Studio-program.

Jag stötte på ett problem när jag körde programmet.

Fördefinierade modellutdata

Här är ett kodfragment av förväntade utdata:

  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

Om du vill visa hela utdata går du till Azure-exempellagringsplatsen på GitHub för att visa de fördefinierade fakturamodellens utdata.

SDK-referens | API-referens | Paket (Maven) | Prover| REST API-versioner som stöds

I den här snabbstarten använder du följande funktioner för att analysera och extrahera data och värden från formulär och dokument:

  • Allmänt dokument – Analysera och extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter.

  • Layout – Analysera och extrahera tabeller, linjer, ord och markeringsmarkeringar som alternativknappar och kryssrutor i dokument, utan att behöva träna en modell.

  • Fördefinierad faktura – Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en förtränad modell.

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt.

  • Den senaste versionen av Visual Studio Code eller önskad IDE. SeJava i Visual Studio Code.

    Tips

    • Visual Studio Code erbjuder ett kodningspaket för Java för Windows och macOS.Kodningspaketet är ett paket med VS Code, Java Development Kit (JDK) och en samling föreslagna tillägg från Microsoft. Kodningspaketet kan också användas för att åtgärda en befintlig utvecklingsmiljö.
    • Om du använder VS Code och kodningspaketet för Java installerar du Tillägget Gradle för Java .
  • Om du inte använder VS Code kontrollerar du att följande är installerat i utvecklingsmiljön:

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Senare klistrar du in nyckeln och slutpunkten i koden nedan:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

Skapa ett nytt Gradle-projekt

  1. I konsolfönstret (till exempel cmd, PowerShell eller Bash) skapar du en ny katalog för din app med namnet formigenkänningsapp och navigerar till den.

    mkdir form-recognizer-app && form-recognizer-app
    
    mkdir translator-text-app; cd translator-text-app
    
  2. Kör kommandot från arbetskatalogen gradle init . Det här kommandot skapar viktiga byggfiler för Gradle, inklusive build.gradle.kts, som används vid körning för att skapa och konfigurera ditt program.

    gradle init --type basic
    
  3. Välj en DSL när du uppmanas till det och välj Kotlin.

  4. Acceptera standardprojektets namn (formigenkänningsapp) genom att välja Retur eller Retur.

Installera klientbiblioteket

Den här snabbstarten använder Gradle-beroendehanteraren. Du hittar klientbiblioteket och information för andra beroendehanterare på Den centrala Maven-lagringsplatsen.

  1. Öppna projektets build.gradle.kts-fil i din IDE. Copay och förbi följande kod för att inkludera klientbiblioteket som en implementation instruktion, tillsammans med nödvändiga plugin-program och inställningar.

    plugins {
        java
        application
    }
    application {
        mainClass.set("FormRecognizer")
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        implementation(group = "com.azure", name = "azure-ai-formrecognizer", version = "4.0.0")
    }
    

Jag stötte på ett problem med att installera klientbiblioteket.

Skapa ett Java-program

Om du vill interagera med Formigenkänning-tjänsten måste du skapa en instans av DocumentAnalysisClient klassen. För att göra det skapar du en AzureKeyCredential med din key från Azure Portal och en DocumentAnalysisClient instans med AzureKeyCredential och din Formigenkänning endpoint.

  1. Kör följande kommando från katalogen form-recognizer-app:

    mkdir -p src/main/java
    

    Du skapar följande katalogstruktur:

    Skärmbild: Java-katalogstruktur

  2. Gå till java katalogen och skapa en fil med namnet FormRecognizer.java.

    Tips

    • Du kan skapa en ny fil med PowerShell.
    • Öppna ett PowerShell-fönster i projektkatalogen genom att hålla ned Skift-tangenten och högerklicka på mappen.
    • Skriv följande kommando New-Item FormRecognizer.java.
  3. FormRecognizer.java Öppna filen och välj något av följande kodexempel för att kopiera och klistra in i ditt program:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i Cognitive Services-säkerhet.

Allmän dokumentmodell

Extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter från dokument.

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil vid en URI använder beginAnalyzeDocumentFromUrl du metoden och skickar prebuilt-document den som modell-ID. Det returnerade värdet är ett AnalyzeResult objekt som innehåller data om det skickade dokumentet.
  • Vi har lagt till fil-URI-värdet i variabeln documentUrl i huvudmetoden.

Lägg till följande kodexempel i FormRecognizer.java filen. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


import com.azure.ai.formrecognizer.*;

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-document";
    SyncPoller < OperationResult, AnalyzeResult > analyzeDocumentPoller =
      client.beginAnalyzeDocumentFromUrl(modelId, documentUrl);

    AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();

    // pages
    analyzeResult.getPages().forEach(documentPage -> {
      System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
        documentPage.getWidth(),
        documentPage.getHeight(),
        documentPage.getUnit());

      // lines
      documentPage.getLines().forEach(documentLine ->
        System.out.printf("Line %s is within a bounding 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()));
    });

    // tables
    List < DocumentTable > tables = analyzeResult.getTables();
    for (int i = 0; i < tables.size(); i++) {
      DocumentTable documentTable = tables.get(i);
      System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
        documentTable.getColumnCount());
      documentTable.getCells().forEach(documentTableCell -> {
        System.out.printf("Cell '%s', has row index %d and column index %d.%n",
          documentTableCell.getContent(),
          documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
      });
      System.out.println();
    }

    // Key-value pairs
    analyzeResult.getKeyValuePairs().forEach(documentKeyValuePair -> {
      System.out.printf("Key content: %s%n", documentKeyValuePair.getKey().getContent());
      System.out.printf("Key content bounding region: %s%n",
        documentKeyValuePair.getKey().getBoundingRegions().toString());

      if (documentKeyValuePair.getValue() != null) {
        System.out.printf("Value content: %s%n", documentKeyValuePair.getValue().getContent());
        System.out.printf("Value content bounding region: %s%n", documentKeyValuePair.getValue().getBoundingRegions().toString());
      }
    });
  }
}

Skapa och köra programmet

När du har lagt till ett kodexempel i ditt program går du tillbaka till huvudprojektkatalogen – formigenkänningsappen.

  1. Skapa ditt program med build kommandot :

    gradle build
    
  2. Kör programmet med run kommandot :

    gradle run
    

Allmänna dokumentmodellutdata

Här är ett kodfragment av förväntade utdata:

Key content: For the Transition Period From
Key content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@14c053c6]
Key content: to Commission File Number
Key content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@6c2d4cc6]
Value content: 001-37845
Value content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@30865a90]
Key content: (I.R.S. ID)
Key content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@6134ac4a]
Value content: 91-1144442
Value content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@777c9dc9]
Key content: Securities registered pursuant to Section 12(g) of the Act:
Key content bounding region: [com.azure.ai.formrecognizer.models.BoundingRegion@71b1a49c]
Value content: NONE

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa utdata för den allmänna dokumentmodellen.

Layoutmodell

Extrahera text, markeringsmarkeringar, textformat, tabellstrukturer och avgränsningsområdeskoordinater från dokument.

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil vid en URI använder beginAnalyzeDocumentFromUrl du metoden och skickar prebuilt-layout som modell-ID. Det returnerade värdet är ett AnalyzeResult objekt som innehåller data om det skickade dokumentet.
  • Vi har lagt till fil-URI-värdet i variabeln documentUrl i main-metoden.

Lägg till följande kodexempel i FormRecognizer.java filen. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


import com.azure.ai.formrecognizer.*;

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(", "));
  }
}

Skapa och köra programmet

När du har lagt till ett kodexempel i programmet går du tillbaka till huvudprojektkatalogen – formigenkänningsappen.

  1. Skapa ditt program med build kommandot :

    gradle build
    
  2. Kör programmet med run kommandot :

    gradle run
    

Utdata för layoutmodell

Här är ett kodfragment av förväntade utdata:

  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.

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa utdata för layoutmodellen.

Fördefinierad modell

Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en fördefinierad modell. I det här exemplet analyserar vi en faktura med hjälp av den fördefinierade fakturamodellen .

Tips

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Se extrahering av modelldata.

  • Analysera en faktura med hjälp av den fördefinierade fakturamodellen. Du kan använda vårt exempelfakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URL-värdet i variabeln invoiceUrl överst i filen.
  • Om du vill analysera en viss fil vid en URI använder beginAnalyzeDocuments du metoden och skickar PrebuiltModels.Invoice som modell-ID. Det returnerade värdet är ett result objekt som innehåller data om det skickade dokumentet.
  • För enkelhetens skull visas inte alla nyckel/värde-par som tjänsten returnerar här. En lista över alla fält och motsvarande typer som stöds finns på sidan fakturakoncept .

Lägg till följande kodexempel i FormRecognizer.java filen. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


import com.azure.ai.formrecognizer.*;

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());
                }
              }
            }));
        }
      }
    }
  }
}

Skapa och köra programmet

När du har lagt till ett kodexempel i programmet går du tillbaka till huvudprojektkatalogen – formigenkänningsappen.

  1. Skapa ditt program med build kommandot :

    gradle build
    
  2. Kör programmet med run kommandot :

    gradle run
    

Fördefinierade modellutdata

Här är ett kodfragment av förväntade utdata:

  ----------- 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

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa de fördefinierade fakturamodellutdata

SDK-referens | API-referens | Paket (npm) | Prover |REST API-versioner som stöds

I den här snabbstarten använder du följande funktioner för att analysera och extrahera data och värden från formulär och dokument:

  • Allmänt dokument – Analysera och extrahera nyckel/värde-par, urvalsmarkeringar och entiteter från dokument.

  • Layout – Analysera och extrahera tabeller, rader, ord och markeringsmarkeringar som alternativknappar och kryssrutor i dokument, utan att behöva träna en modell.

  • Fördefinierad faktura – Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en förtränad fakturamodell.

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt.

  • Den senaste versionen av Visual Studio Code eller önskad IDE. Mer information finns iNode.js i Visual Studio Code

  • Den senaste LTS-versionen av Node.js

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. För endast Formigenkänning åtkomst skapar du en Formigenkänning resurs. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

  1. Skapa ett nytt Node.js Express-program: I ett konsolfönster (till exempel cmd, PowerShell eller Bash) skapar och navigerar du till en ny katalog för din app med namnet form-recognizer-app.

    mkdir form-recognizer-app && cd form-recognizer-app
    
  2. npm init Kör kommandot för att initiera programmet och autogenerera projektet.

    npm init
    
  3. Ange projektets attribut med hjälp av de prompter som visas i terminalen.

    • De viktigaste attributen är namn, versionsnummer och startpunkt.
    • Vi rekommenderar att du behåller index.js namnet på startpunkten. Beskrivningen, testkommandot, GitHub-lagringsplatsen, nyckelorden, författaren och licensinformationen är valfria attribut – de kan hoppas över för det här projektet.
    • Acceptera förslagen inom parentes genom att välja Retur eller Retur.
    • När du har slutfört prompterna skapas en package.json fil i katalogen form-recognizer-app.
  4. ai-form-recognizer Installera klientbiblioteket och azure/identity npm-paketen:

    npm i @azure/ai-form-recognizer @azure/identity
    
    • Appens package.json fil uppdateras med beroendena.
  5. Skapa en fil med namnet index.js i programkatalogen.

    Tips

    • Du kan skapa en ny fil med PowerShell.
    • Öppna ett PowerShell-fönster i projektkatalogen genom att hålla ned Skift-tangenten och högerklicka på mappen.
    • Skriv följande kommando New-Item index.js.

Skapa ditt program

Om du vill interagera med Formigenkänning-tjänsten måste du skapa en instans av DocumentAnalysisClient klassen. För att göra det skapar du en AzureKeyCredential med din key från Azure Portal och en DocumentAnalysisClient instans med AzureKeyCredential och din Formigenkänning endpoint.

  1. index.js Öppna filen i Visual Studio Code eller din favorit-IDE och välj något av följande kodexempel för att kopiera och klistra in i ditt program:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns iCognitive Services-säkerhet.

Allmän dokumentmodell

Extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter från dokument.

  • I det här exemplet behöver du en formulärdokumentfil från en URL. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil från en URL använder beginAnalyzeDocuments du metoden och skickar in prebuilt-document som modell-ID.
  • Vi har lagt till fil-URL-värdet i variabeln formUrl längst upp i filen.

Lägg till följande kodexempel i index.js filen. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


  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-document", formUrl);

    const {keyValuePairs} = await poller.pollUntilDone();

    if (!keyValuePairs || keyValuePairs.length <= 0) {
        console.log("No key-value pairs were extracted from the document.");
    } else {
        console.log("Key-Value Pairs:");
        for (const {key, value, confidence} of keyValuePairs) {
            console.log("- Key  :", `"${key.content}"`);
            console.log("  Value:", `"${(value && value.content) || "<undefined>"}" (${confidence})`);
        }
    }

}

main().catch((error) => {
    console.error("An error occurred:", error);
    process.exit(1);
});

Köra ditt program

När du har lagt till ett kodexempel i programmet kör du programmet:

  1. Navigera till mappen där du har ditt program för formulärigenkänning (formigenkänningsapp).

  2. Skriv följande kommando i terminalen:

    node index.js
    

Allmänna dokumentmodellutdata

Här är ett kodfragment av förväntade utdata:

Key-Value Pairs:
- Key  : "For the Quarterly Period Ended"
  Value: "March 31, 2020" (0.35)
- Key  : "From"
  Value: "1934" (0.119)
- Key  : "to"
  Value: "<undefined>" (0.317)
- Key  : "Commission File Number"
  Value: "001-37845" (0.87)
- Key  : "(I.R.S. ID)"
  Value: "91-1144442" (0.87)
- Key  : "Class"
  Value: "Common Stock, $0.00000625 par value per share" (0.748)
- Key  : "Outstanding as of April 24, 2020"
  Value: "7,583,440,247 shares" (0.838)
Entities:
- "$0.00000625" Quantity - Currency (0.8)
- "MSFT" Organization - <none> (0.99)
- "NASDAQ" Organization - StockExchange (0.99)
- "2.125%" Quantity - Percentage (0.8)
- "2021" DateTime - DateRange (0.8)

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa utdata från den allmänna dokumentmodellen

Layoutmodell

Extrahera text, markeringsmarkeringar, textformat, tabellstrukturer och avgränsningsregionkoordinater från dokument.

  • I det här exemplet behöver du en formulärdokumentfil från en URL. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URL-värdet i variabeln formUrl längst upp i filen.
  • Om du vill analysera en viss fil från en URL använder beginAnalyzeDocuments du metoden och skickar den prebuilt-layout som modell-ID.

Lägg till följande kodexempel i index.js filen. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


 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", formUrlLayout);

    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);
});

Köra ditt program

När du har lagt till ett kodexempel i programmet kör du programmet:

  1. Navigera till mappen där du har ditt program för formulärigenkänning (formigenkänningsapp).

  2. Skriv följande kommando i terminalen:

    node index.js
    

Utdata för layoutmodell

Här är ett kodfragment av förväntade utdata:

Pages:
- Page 1 (unit: inch)
  8.5x11, angle: 0
  69 lines, 425 words
Tables:
- Extracted table: 3 columns, 5 rows (15 cells)

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa layoutmodellens utdata

Fördefinierad modell

I det här exemplet analyserar vi en faktura med den fördefinierade fakturamodellen .

Tips

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Se extrahering av modelldata.

  • Analysera en faktura med den fördefinierade fakturamodellen. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URL-värdet i variabeln invoiceUrl överst i filen.
  • Om du vill analysera en viss fil vid en URI använder beginAnalyzeDocuments du metoden och skickar PrebuiltModels.Invoice den som modell-ID. Det returnerade värdet är ett result objekt som innehåller data om det skickade dokumentet.
  • För enkelhetens skull visas inte alla nyckel/värde-par som tjänsten returnerar här. Om du vill se listan över alla fält som stöds och motsvarande typer kan du läsa vår sida med fakturakoncept .

 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>";


async function main() {
    const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));

    const poller = await client.beginAnalyzeDocumentFromUrl("prebuilt-layout", formUrlLayout);

    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);
});

Köra ditt program

När du har lagt till ett kodexempel i programmet kör du programmet:

  1. Navigera till mappen där du har ditt program för formulärigenkänning (formigenkänningsapp).

  2. Skriv följande kommando i terminalen:

    node index.js
    

Fördefinierade modellutdata

Här är ett kodfragment av förväntade utdata:

  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

Om du vill visa hela utdata går du till Azure-exempellagringsplatsen på GitHub för att visa de fördefinierade fakturamodellutdata

SDK-referens | API-referens | Paket (PyPi) | Prover | REST API-versioner som stöds

I den här snabbstarten använder du följande funktioner för att analysera och extrahera data och värden från formulär och dokument:

  • Allmänt dokument – Analysera och extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter.

  • Layout – Analysera och extrahera tabeller, linjer, ord och markeringsmarkeringar som alternativknappar och kryssrutor i dokument, utan att behöva träna en modell.

  • Fördefinierad faktura – Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en förtränad modell.

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt

  • Python 3.7 eller senare

    • Python-installationen bör innehålla pip. Du kan kontrollera om pip har installerats genom att köra pip --version på kommandoraden. Hämta pip genom att installera den senaste versionen av Python.
  • Den senaste versionen av Visual Studio Code eller önskad IDE. Mer information finns iKomma igång med Python i VS Code.

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Tips

Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

Öppna ett terminalfönster i din lokala miljö och installera Azure Formigenkänning-klientbiblioteket för Python med pip:

pip install azure-ai-formrecognizer==3.2.0

Skapa ditt Python-program

Om du vill interagera med Formigenkänning-tjänsten måste du skapa en instans av DocumentAnalysisClient klassen. För att göra det skapar du en AzureKeyCredential med din key från Azure Portal och en DocumentAnalysisClient instans med AzureKeyCredential och din Formigenkänning endpoint.

  1. Skapa en ny Python-fil med namnet form_recognizer_quickstart.py i önskad redigerare eller IDE.

  2. Öppna filen form_recognizer_quickstart.py och välj något av följande kodexempel för att kopiera och klistra in i programmet:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i Cognitive Services-säkerhet.

Allmän dokumentmodell

Extrahera text, tabeller, struktur, nyckel/värde-par och namngivna entiteter från dokument.

  • I det här exemplet behöver du en formulärdokumentfil från en URL. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil på en URL använder begin_analyze_document_from_url du metoden och skickar den prebuilt-document som modell-ID. Det returnerade värdet är ett result objekt som innehåller data om det skickade dokumentet.
  • Vi har lagt till fil-URL-värdet i variabeln docUrlanalyze_general_documents i funktionen.

Lägg till följande kodexempel i form_recognizer_quickstart.py-programmet. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


# 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_general_documents():
    # sample document
    docUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"

    # create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
    document_analysis_client = DocumentAnalysisClient(endpoint=endpoint, credential=AzureKeyCredential(key))

    poller = document_analysis_client.begin_analyze_document_from_url(
            "prebuilt-document", docUrl)
    result = poller.result()

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

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

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

        for line_idx, line in enumerate(page.lines):
            print(
                "...Line # {} has text content '{}' within bounding box '{}'".format(
                    line_idx,
                    line.content,
                    format_polygon(line.polygon),
                )
            )

        for word in page.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 '{}'\n".format(
                        region.page_number,
                        format_polygon(region.polygon),
                    )
                )
    print("----------------------------------------")


if __name__ == "__main__":
    analyze_general_documents()

Kör programmet

När du har lagt till ett kodexempel i ditt program skapar och kör du programmet:

  1. Gå till mappen där du har filen form_recognizer_quickstart.py .

  2. Skriv följande kommando i terminalen:

    python form_recognizer_quickstart.py
    

Allmänna dokumentmodellutdata

Här är ett kodfragment av förväntade utdata:

  ----Key-value pairs found in document----
  Key '☒' found within 'Page #1: [0.6694, 1.7746], [0.7764, 1.7746], [0.7764, 1.8833], [0.6694, 1.8833]' bounding regions
  Key 'QUARTERLY REPORT PURSUANT TO SECTION 13 OR 15(d) OF THE SECURITIES EXCHANGE ACT OF 1934' found within 'Page #1: [0.996, 1.7804], [7.8449, 1.7804], [7.8449, 2.0559], [0.996, 2.0559]' bounding regions
  Value ':selected:' found within 'Page #1: [0.6694, 1.7746], [0.7764, 1.7746], [0.7764, 1.8833], [0.6694, 1.8833]' bounding regions

  Key 'For the Quarterly Period Ended March 31, 2020' found within 'Page #1: [0.9982, 2.1626], [3.4543, 2.1626], [3.4543, 2.2665], [0.9982, 2.2665]' bounding regions
  Value 'OR' found within 'Page #1: [4.1471, 2.2972], [4.3587, 2.2972], [4.3587, 2.4049], [4.1471, 2.4049]' bounding regions

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa utdata från den allmänna dokumentmodellen

Layoutmodell

Extrahera text, markeringsmarkeringar, textformat, tabellstrukturer och avgränsningsregionkoordinater från dokument.

  • I det här exemplet behöver du en formulärdokumentfil från en URL. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URL-värdet i variabeln formUrlanalyze_layout i funktionen.
  • Om du vill analysera en viss fil på en URL använder begin_analyze_document_from_url du metoden och skickar den prebuilt-layout som modell-ID. Det returnerade värdet är ett result objekt som innehåller data om det skickade dokumentet.

Lägg till följande kodexempel i form_recognizer_quickstart.py-programmet. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:


# 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 form 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()

Kör programmet

När du har lagt till ett kodexempel i ditt program skapar och kör du programmet:

  1. Gå till mappen där du har filen form_recognizer_quickstart.py .

  2. Skriv följande kommando i terminalen:

    python form_recognizer_quickstart.py
    

Utdata för layoutmodell

Här är ett kodfragment av förväntade utdata:

  ----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

Om du vill visa hela utdata går du till Lagringsplatsen för Azure-exempel på GitHub för att visa layoutmodellens utdata


Fördefinierad modell

Analysera och extrahera vanliga fält från specifika dokumenttyper med hjälp av en fördefinierad modell. I det här exemplet analyserar vi en faktura med den fördefinierade fakturamodellen .

Tips

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Se extrahering av modelldata.

  • Analysera en faktura med den fördefinierade fakturamodellen. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URL-värdet i variabeln invoiceUrl överst i filen.
  • Om du vill analysera en viss fil vid en URI använder begin_analyze_document_from_url du metoden och skickar prebuilt-invoice den som modell-ID. Det returnerade värdet är ett result objekt som innehåller data om det skickade dokumentet.
  • För enkelhetens skull visas inte alla nyckel/värde-par som tjänsten returnerar här. Om du vill se listan över alla fält som stöds och motsvarande typer kan du läsa vår sida med fakturakoncept .

Lägg till följande kodexempel i form_recognizer_quickstart.py-programmet. Se till att du uppdaterar nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans:

# 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,
                )
            )

if __name__ == "__main__":
    analyze_invoice()

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

Kör programmet

När du har lagt till ett kodexempel i ditt program skapar och kör du programmet:

  1. Gå till mappen där du har filen form_recognizer_quickstart.py .

  2. Skriv följande kommando i terminalen:

    python form_recognizer_quickstart.py
    

Fördefinierade modellutdata

Här är ett kodfragment av förväntade utdata:

  --------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

Om du vill visa hela utdata går du till Azure-exempellagringsplatsen på GitHub för att visa de fördefinierade fakturamodellutdata

| Formigenkänning REST API | Azure SDKS-SDK | :er som stöds

I den här snabbstarten använder du rest-API:et Formigenkänning för att analysera och extrahera data och värden från formulär och dokument:

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt

  • curl-kommandoradsverktyget installerat.

  • PowerShell version 7.*+ (eller ett liknande kommandoradsprogram.):

  • Om du vill kontrollera din PowerShell-version skriver du följande kommando i förhållande till operativsystemet:

    • Windows: Get-Host | Select-Object Version
    • macOS eller Linux: $PSVersionTable
  • En resurs för Formigenkänning (enskild tjänst) eller Cognitive Services (flera tjänster). När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Tips

Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Analysera dokument och få resultat

En POST-begäran används för att analysera dokument med en fördefinierad eller anpassad modell. En GET-begäran används för att hämta resultatet av ett dokumentanalysanrop. modelId Används med POST och resultId med GET-åtgärder.

Analysera dokument (POST-begäran)

Innan du kör cURL-kommandot gör du följande ändringar i efterbegäran:

  1. Ersätt {endpoint} med slutpunktsvärdet från din Azure Portal Formigenkänning-instans.

  2. Ersätt {key} med nyckelvärdet från din Azure Portal Formigenkänning-instans.

  3. Använd tabellen nedan som referens och ersätt {modelID} och {your-document-url} med önskade värden.

  4. Du behöver en dokumentfil på en URL. I den här snabbstarten kan du använda exempelformulären i tabellen nedan för varje funktion:

    Exempeldokument

    Funktion {modelID} {your-document-url}
    Allmänt dokument fördefiniera dokument https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf
    Läs fördefinierad läsning https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png
    Layout fördefinierad layout https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/layout.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
    Fakturor fördefinierad faktura https://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf
    Kvitton fördefinierad kvitto https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/receipt.png
    ID-dokument prebuilt-idDocument https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/identity_documents.png
    Visitkort prebuilt-businessCard https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/de5e0d8982ab754823c54de47a47e8e499351523/curl/form-recognizer/rest-api/business_card.jpg

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i Cognitive Services-säkerhet.

POST-begäran

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-svar

Du får ett 202 (Success) svar som innehåller ett åtgärdsplatshuvud . Värdet för det här huvudet innehåller en resultID som kan efterfrågas för att hämta status för den asynkrona åtgärden:

{alt-text}

Hämta analysresultat (GET-begäran)

När du har anropat API:et Analysera dokument anropar du API:et För att analysera resultat för att hämta status för åtgärden och extraherade data. Innan du kör kommandot gör du följande ändringar:

  1. Ersätt {POST response} rubriken Operation-location från POST-svaret.

  2. Ersätt {key} med nyckelvärdet från din Formigenkänning-instans i Azure Portal.

GET-begäranden

curl -v -X GET "{POST response}" -H "Ocp-Apim-Subscription-Key: {key}"

Granska svaret

Du får ett 200 (Success) svar med JSON-utdata. Det första fältet, "status", anger status för åtgärden. Om åtgärden inte är slutförd blir "running" värdet "status" för eller "notStarted", och du bör anropa API:et igen, antingen manuellt eller via ett skript. Vi rekommenderar ett intervall på en sekund eller flera mellan anrop.

Exempelsvar för fördefinierad faktura

{
    "status": "succeeded",
    "createdDateTime": "2022-03-25T19:31:37Z",
    "lastUpdatedDateTime": "2022-03-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
                        }
                    },
}

Dokumentfält som stöds

De fördefinierade modellerna extraherar fördefinierade uppsättningar med dokumentfält. Se Extrahering av modelldata för extraherade fältnamn, typer, beskrivningar och exempel.

Det var allt, grattis!

I den här snabbstarten använde du ett formulär Formigenkänning modell för att analysera olika formulär och dokument. Utforska sedan Formigenkänning Studio och referensdokumentationen för att lära dig mer om Formigenkänning API på djupet.

Nästa steg

Den här artikeln gäller bockmarkeringen:Formigenkänning v2.1Formigenkänning v2.1. Senare version:Formigenkänning v3.0

Kom igång med Azure Formigenkänning med valfritt programmeringsspråk eller REST API. Azure Formigenkänning är en molnbaserad Azure Applied AI-tjänst som använder maskininlärning för att extrahera nyckel/värde-par, text och tabeller från dina dokument. Du kan enkelt anropa Formigenkänning modeller genom att integrera våra klientbiblioteks-SDK:er i dina arbetsflöden och program. Vi rekommenderar att du använder den kostnadsfria tjänsten när du lär dig tekniken. Kom ihåg att antalet kostnadsfria sidor är begränsat till 500 per månad.

Mer information om Formigenkänning funktioner och utvecklingsalternativ finns på vår översiktssida.

Referensdokumentation | Bibliotekskällans kod | Paket (NuGet) | Prover

I den här snabbstarten använder du följande API:er för att extrahera strukturerade data från formulär och dokument:

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt.

  • Den aktuella versionen av Visual Studio IDE.

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en resurs för en tjänst eller flera tjänster Formigenkänning i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. För endast Formigenkänning åtkomst skapar du en Formigenkänning resurs. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

  1. Starta Visual Studio 2019.

  2. På startsidan väljer du Skapa ett nytt projekt.

    Skärmbild: Startfönstret i Visual Studio.

  3. sidan Skapa ett nytt projekt anger du konsolen i sökrutan. Välj mallen Konsolprogram och välj sedan Nästa.

    Skärmbild av sidan Skapa nytt projekt i Visual Studio.

  4. I dialogrutan Konfigurera det nya projektet anger du formRecognizer_quickstart i rutan Projektnamn. Välj sedan Nästa.

    Skärmbild: Visual Studios konfigurerar dialogrutan nytt projekt.

  5. I dialogrutan Ytterligare information väljer du .NET 5.0 (Aktuell) och sedan Skapa.

    Skärmbild: Dialogrutan Ytterligare information i Visual Studio.

Installera klientbiblioteket med NuGet

  1. Högerklicka på ditt formRecognizer_quickstart projekt och välj Hantera NuGet-paket... .

    Skärmbild som visar fönstret Välj NuGet-paket.

  2. Välj fliken Bläddra och skriv Azure.AI.FormRecognizer.

    Skärmbild som visar listrutan Välj Formigenkänning paket.

  3. Välj version 3.1.1 på den nedrullningsbara menyn och välj Installera.

Skapa ditt program

Om du vill interagera med Formigenkänning-tjänsten måste du skapa en instans av FormRecognizerClient klassen. För att göra det skapar du en AzureKeyCredential med din nyckel och en FormRecognizerClient instans med AzureKeyCredential och din Formigenkänning endpoint.

Anteckning

  • Från och med .NET 6 genererar nya projekt med mallen console ett nytt programformat som skiljer sig från tidigare versioner.
  • De nya utdata använder de senaste C#-funktionerna som förenklar koden du behöver skriva.
  • När du använder den nyare versionen behöver du bara skriva metodens Main brödtext. Du behöver inte inkludera toppnivåinstruktioner, globala användningsdirektiv eller implicita användningsdirektiv.
  • Mer information finns iNya C#-mallar genererar instruktioner på den översta nivån.
  1. Öppna filen Program.cs .

  2. Inkludera följande användningsdirektiv:

using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using System.Threading.Tasks;
  1. Ange miljövariablerna endpoint och key skapa instansen AzureKeyCredential och FormRecognizerClient :
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);
  1. Ta bort raden, Console.Writeline("Hello World!"); , och lägg till något av kodexemplen Try It i filen Program.cs :

    Skärmbild: Lägg till exempelkoden i Main-metoden.

  2. Välj ett kodexempel för att kopiera och klistra in i programmets Main-metod:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i säkerhetsartikeln för Cognitive Services.

Prova: Layoutmodell

Extrahera text, markeringsmarkeringar, textformat och tabellstrukturer, tillsammans med deras koordinater för avgränsningsregion från dokument.

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln formUri .
  • Om du vill extrahera layouten från en viss fil vid en URI använder du StartRecognizeContentFromUriAsync metoden .

Lägg till följande kod i program.cs-filen för layoutprogrammet:


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}'.");
                    }
                }
            }
        }
    }
}

Prova: Fördefinierad modell

Det här exemplet visar hur du analyserar data från vissa typer av vanliga dokument med förtränade modeller med hjälp av en faktura som exempel.

  • I det här exemplet ska vi analysera ett fakturadokument med hjälp av en fördefinierad modell. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln invoiceUri överst i Main-metoden.
  • Om du vill analysera en viss fil vid en URI använder du StartRecognizeInvoicesFromUriAsync metoden .
  • För enkelhetens skull visas inte alla fält som tjänsten returnerar här. Om du vill se listan över alla fält som stöds och motsvarande typer kan du läsa vår sida med fakturakoncept .

Välj en fördefinierad modell

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Här är de fördefinierade modeller som för närvarande stöds av Formigenkänning-tjänsten:

  • Faktura: extraherar text, urvalsmarkeringar, tabeller, fält och nyckelinformation från fakturor.
  • Kvitto: extraherar text och nyckelinformation från kvitton.
  • ID-dokument: extraherar text och viktig information från körkort och internationella pass.
  • Visitkort: extraherar text och viktig information från visitkort.

Lägg till följande kod i din fördefinierade fakturaprogram Program.cs-filmetod

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}");
       }
     }
   }
 }
}

Köra ditt program

Välj den gröna Start-knappen bredvid formRecognizer_quickstart för att skapa och köra programmet, eller tryck på F5.

Skärmbild: kör ditt Visual Studio-program.

Referensdokumentation | Källkod | för bibliotek Paket (Maven) | Prover

I den här snabbstarten använder du följande API:er för att extrahera strukturerade data från formulär och dokument:

Förutsättningar

Tips

Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

Skapa ett nytt Gradle-projekt

I ett konsolfönster (till exempel cmd, PowerShell eller Bash) skapar du en ny katalog för din app med namnet formigenkänningsapp och navigerar till den.

mkdir form-recognizer-app && form-recognizer-app
  1. Kör kommandot från arbetskatalogen gradle init . Det här kommandot skapar viktiga byggfiler för Gradle, inklusive build.gradle.kts, som används vid körning för att skapa och konfigurera ditt program.

    gradle init --type basic
    
  2. Välj en DSL när du uppmanas till det och välj Kotlin.

  3. Acceptera standardprojektets namn (formigenkänningsapp)

Installera klientbiblioteket

Den här snabbstarten använder Gradle-beroendehanteraren. Du hittar klientbiblioteket och information för andra beroendehanterare på Den centrala Maven-lagringsplatsen.

I projektets build.gradle.kts-fil inkluderar du klientbiblioteket som en implementation instruktion, tillsammans med nödvändiga plugin-program och inställningar.

plugins {
    java
    application
}
application {
    mainClass.set("FormRecognizer")
}
repositories {
    mavenCentral()
}
dependencies {
    implementation(group = "com.azure", name = "azure-ai-formrecognizer", version = "3.1.1")
}

Skapa en Java-fil

Kör följande kommando från arbetskatalogen:

mkdir -p src/main/java

Du skapar följande katalogstruktur:

Skärmbild av programmets Java-katalogstruktur.

Gå till Java-katalogen och skapa en fil med namnet FormRecognizer.java. Öppna den i önskad redigerare eller IDE och lägg till följande paketdeklaration och import -instruktioner:

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;

Välj ett kodexempel för att kopiera och klistra in i programmets huvudmetod:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i cognitive services-säkerhetsartikeln .

Prova: Layoutmodell

Extrahera text, markeringsmarkeringar, textformat och tabellstrukturer, tillsammans med deras avgränsningsregionkoordinater från dokument.

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Om du vill analysera en viss fil vid en URI använder beginRecognizeContentFromUrl du metoden .
  • Vi har lagt till fil-URI-värdet i variabeln formUrl i huvudmetoden.

Uppdatera programmets FormRecognizer-klass med följande kod (se till att uppdatera nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans):


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();
            });
        });
    }

Prova: Fördefinierad modell

Det här exemplet visar hur du analyserar data från vissa typer av vanliga dokument med förtränade modeller med hjälp av en faktura som exempel.

  • I det här exemplet ska vi analysera ett fakturadokument med hjälp av en fördefinierad modell. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.
  • Om du vill analysera en viss fil vid en URI använder beginRecognizeInvoicesFromUrl du .
  • Vi har lagt till fil-URI-värdet i variabeln invoiceUrl i huvudmetoden.
  • För enkelhetens skull visas inte alla fält som tjänsten returnerar här. Om du vill se listan över alla fält som stöds och motsvarande typer kan du läsa vår sida med fakturakoncept .

Välj en fördefinierad modell

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Här är de fördefinierade modeller som för närvarande stöds av Formigenkänning-tjänsten:

  • Faktura: extraherar text, urvalsmarkeringar, tabeller, fält och nyckelinformation från fakturor.
  • Kvitto: extraherar text och nyckelinformation från kvitton.
  • ID-dokument: extraherar text och viktig information från körkort och internationella pass.
  • Visitkort: extraherar text och viktig information från visitkort.

Uppdatera programmets FormRecognizer-klass med följande kod (se till att uppdatera nyckel- och slutpunktsvariablerna med värden från din Azure Portal Formigenkänning-instans):


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());
            }
        }
    }
}

Skapa och köra ditt program

Gå tillbaka till huvudprojektkatalogen – form-recognizer-app.

  1. Skapa ditt program med build kommandot :
gradle build
  1. Kör programmet med run kommandot :
gradle run

Referensdokumentation | Källkod | för bibliotek Paket (npm) | Prover

I den här snabbstarten använder du följande API:er för att extrahera strukturerade data från formulär och dokument:

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt.

  • Den senaste versionen av Visual Studio Code eller önskad IDE.

  • Den senaste LTS-versionen av Node.js

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. För endast Formigenkänning åtkomst skapar du en Formigenkänning resurs. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

  1. Skapa ett nytt Node.js program. I ett konsolfönster (till exempel cmd, PowerShell eller Bash) skapar du en ny katalog för din app och navigerar till den.

    mkdir form-recognizer-app && cd form-recognizer-app
    
  2. npm init Kör kommandot för att skapa ett nodprogram med en package.json fil.

    npm init
    
  3. Installera npm-paketet för ai-form-recognizer klientbiblioteket:

    npm install @azure/ai-form-recognizer
    

    Appens package.json fil uppdateras med beroendena.

  4. Skapa en fil med namnet index.js, öppna den och importera följande bibliotek:

    const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
    
  5. Skapa variabler för resursens Azure-slutpunkt och nyckel:

    const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
    const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
    
  6. Nu bör JavaScript-programmet innehålla följande kodrader:

    
    const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
    
    const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
    const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
    

Välj ett kodexempel för att kopiera och klistra in i ditt program:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i cognitive services-säkerhetsartikeln .

Prova: Layoutmodell

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln formUrl längst upp i filen.
  • Om du vill analysera en viss fil vid en URI använder beginRecognizeContent du metoden .

Lägg till följande kod i layoutprogrammet på raden under variabeln key

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);
});

Prova: Fördefinierad modell

Det här exemplet visar hur du analyserar data från vissa typer av vanliga dokument med förtränade modeller med hjälp av en faktura som exempel. Se vår fördefinierade konceptsida för en fullständig lista över fakturafält

  • I det här exemplet ska vi analysera ett fakturadokument med hjälp av en fördefinierad modell. Du kan använda vårt exempelfakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln invoiceUrl överst i filen.
  • Om du vill analysera en viss fil vid en URI använder beginRecognizeInvoices du metoden .
  • För enkelhetens skull visas inte alla fält som tjänsten returnerar här. En lista över alla fält och motsvarande typer som stöds finns på sidan fakturakoncept .

Välj en fördefinierad modell

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Här är de fördefinierade modeller som för närvarande stöds av Formigenkänning-tjänsten:

  • Faktura: extraherar text, urvalsmarkeringar, tabeller, fält och viktig information från fakturor.
  • Kvitto: extraherar text och nyckelinformation från kvitton.
  • ID-dokument: extraherar text- och nyckelinformation från körkort och internationella pass.
  • Visitkort: extraherar text och nyckelinformation från visitkort.

Lägg till följande kod i ditt fördefinierade fakturaprogram under variabeln key


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);
});

Referensdokumentation | Bibliotekskällans kod | Paket (PyPi) | Prover

I den här snabbstarten använder du följande API:er för att extrahera strukturerade data från formulär och dokument:

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt

  • Python 3.x

    • Python-installationen bör innehålla pip. Du kan kontrollera om pip har installerats genom att köra pip --version på kommandoraden. Hämta pip genom att installera den senaste versionen av Python.
  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en resurs för en tjänst eller flera tjänster Formigenkänning i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. För endast Formigenkänning åtkomst skapar du en Formigenkänning resurs. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Konfigurera

Öppna ett terminalfönster i din lokala miljö och installera Azure Formigenkänning-klientbiblioteket för Python med pip:

pip install azure-ai-formrecognizer

Skapa ett nytt Python-program

Skapa ett nytt Python-program med namnet form_recognizer_quickstart.py i önskad redigerare eller IDE. Importera sedan följande bibliotek:

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

Skapa variabler för din Azure-resursslutpunkt och nyckel

endpoint = "YOUR_FORM_RECOGNIZER_ENDPOINT"
key = "YOUR_FORM_RECOGNIZER_KEY"

Nu bör Python-programmet innehålla följande kodrader:

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"

Välj ett kodexempel för att kopiera och klistra in i ditt program:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i cognitive services-säkerhetsartikeln .

Prova: Layoutmodell

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln formUrl längst upp i filen.
  • Om du vill analysera en viss fil vid en URI använder begin_recognize_content_from_url du metoden .

Lägg till följande kod i layoutprogrammet på raden under variabeln key


  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 form 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()

Prova: Fördefinierad modell

Det här exemplet visar hur du analyserar data från vissa typer av vanliga dokument med förtränade modeller med hjälp av en faktura som exempel. Se vår fördefinierade konceptsida för en fullständig lista över fakturafält

  • I det här exemplet ska vi analysera ett fakturadokument med hjälp av en fördefinierad modell. Du kan använda vårt exempelfakturadokument för den här snabbstarten.
  • Vi har lagt till fil-URI-värdet i variabeln ''formUrl' överst i filen.
  • Om du vill analysera en viss fil vid en URI använder du metoden "begin_recognize_invoices_from_url".
  • För enkelhetens skull visas inte alla fält som tjänsten returnerar här. En lista över alla fält och motsvarande typer som stöds finns på sidan fakturakoncept .

Välj en fördefinierad modell

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Här är de fördefinierade modeller som för närvarande stöds av Formigenkänning-tjänsten:

  • Faktura: extraherar text, urvalsmarkeringar, tabeller, fält och nyckelinformation från fakturor.
  • Kvitto: extraherar text och nyckelinformation från kvitton.
  • ID-dokument: extraherar text och viktig information från körkort och internationella pass.
  • Visitkort: extraherar text och viktig information från visitkort.

Lägg till följande kod i ditt fördefinierade fakturaprogram under variabeln key


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()

Köra ditt program

  1. Gå till mappen där du har filen form_recognizer_quickstart.py .

  2. Skriv följande kommando i terminalen:

python form_recognizer_quickstart.py

| Formigenkänning REST API | Azure REST API-referens |

I den här snabbstarten använder du följande API:er för att extrahera strukturerade data från formulär och dokument:

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt

  • cURL installerat.

  • PowerShell version 6.0+ eller ett liknande kommandoradsprogram.

  • En Cognitive Services- eller Formigenkänning resurs. När du har din Azure-prenumeration skapar du en Formigenkänning resurs med en tjänst eller flera tjänster i Azure Portal för att hämta din nyckel och slutpunkt. Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

    Tips

    Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en Formigenkänning resurs för endast Formigenkänning åtkomst. Observera att du behöver en resurs med en enda tjänst om du tänker använda Azure Active Directory-autentisering.

  • När resursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Formigenkänning-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten:

    Skärmbild: nycklar och slutpunktsplats i Azure Portal.

Välj ett kodexempel för att kopiera och klistra in i ditt program:

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i cognitive services-säkerhetsartikeln .

Prova: Layoutmodell

  • I det här exemplet behöver du en formulärdokumentfil på en URI. Du kan använda vårt exempelformulärdokument för den här snabbstarten.
  1. Ersätt {endpoint} med slutpunkten som du fick med din Formigenkänning-prenumeration.
  2. Ersätt {key} med nyckeln som du kopierade från föregående steg.
  3. Ersätt \"{your-document-url} med en exempelformulär-URL:
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf

Förfrågan

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

Du får ett 202 (Success) svar som innehåller ett åtgärdsplatshuvud . Värdet för det här huvudet innehåller ett resultat-ID som du kan använda för att fråga status för den asynkrona åtgärden och hämta resultatet:

https:// cognitiveservice/formrecognizer/v2.1/layout/analyzeResults/{resultId}.

I följande exempel, som en del av URL:en, är strängen efter analyzeResults/ resultat-ID:t.

https://cognitiveservice/formrecognizer/v2/layout/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb

Hämta layoutresultat

När du har anropat API:et Analysera layout anropar du API:et Hämta analyslayoutresultat för att hämta status för åtgärden och extraherade data. Innan du kör kommandot gör du följande ändringar:

  1. Ersätt {endpoint} med slutpunkten som du fick med din Formigenkänning-prenumeration.
  2. Ersätt {key} med nyckeln som du kopierade från föregående steg.
  3. Ersätt {resultId} med resultat-ID:t från föregående steg.

Förfrågan

curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/layout/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"

Granska resultaten

Du får ett 200 (success) svar med JSON-innehåll.

Se följande fakturabild och motsvarande JSON-utdata.

  • Noden "readResults" innehåller varje textrad med sin respektive avgränsningsruta på sidan.
  • Noden selectionMarks visar varje markeringsmarkering (kryssruta, alternativmarkering) och om dess status är "markerad" eller "omarkerad".
  • Avsnittet "pageResults" innehåller de tabeller som extraherats. För varje tabell extraheras text-, rad- och kolumnindex, rad- och kolumnintervall, avgränsningsruta med mera.

Contoso-projektuttrycksdokument med en tabell.

Själva svaret

Du kan visa fullständiga exempelutdata på GitHub.

Prova: Fördefinierad modell

  • I det här exemplet ska vi analysera ett fakturadokument med hjälp av en fördefinierad modell. Du kan använda vårt exempel på fakturadokument för den här snabbstarten.

Välj en fördefinierad modell

Du är inte begränsad till fakturor – det finns flera fördefinierade modeller att välja mellan, som var och en har en egen uppsättning fält som stöds. Vilken modell som ska användas för analysåtgärden beror på vilken typ av dokument som ska analyseras. Här är de fördefinierade modeller som för närvarande stöds av Formigenkänning-tjänsten:

  • Faktura: extraherar text, urvalsmarkeringar, tabeller, fält och nyckelinformation från fakturor.
  • Kvitto: extraherar text och nyckelinformation från kvitton.
  • ID-dokument: extraherar text och viktig information från körkort och internationella pass.
  • Visitkort: extraherar text och viktig information från visitkort.

Innan du kör kommandot gör du följande ändringar:

  1. Ersätt {endpoint} med slutpunkten som du fick med din Formigenkänning-prenumeration.

  2. Ersätt {key} med nyckeln som du kopierade från föregående steg.

  3. Ersätt \"{your-document-url} med en exempelfaktura-URL:

    https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf
    

Förfrågan

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

Du får ett 202 (Success) svar som innehåller ett åtgärdsplatshuvud . Värdet för det här huvudet innehåller ett resultat-ID som du kan använda för att fråga status för den asynkrona åtgärden och hämta resultatet:

https:// cognitiveservice/formrecognizer/v2.1/prebuilt/receipt/analyzeResults/{resultId}

I följande exempel, som en del av URL:en, är strängen efter analyzeResults/ resultat-ID:t:

https://cognitiveservice/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb

Hämta fakturaresultat

När du har anropat API:et Analysera faktura anropar du API:et Hämta resultat för faktura för att hämta status för åtgärden och extraherade data. Innan du kör kommandot gör du följande ändringar:

  1. Ersätt {endpoint} med slutpunkten som du fick med din Formigenkänning nyckel. Du hittar den på fliken Formigenkänning resursöversikt.
  2. Ersätt {resultId} med resultat-ID:t från föregående steg.
  3. Ersätt {key} med din nyckel.

Förfrågan

curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"

Granska svaret

Du får ett 200 (Success) svar med JSON-utdata.

  • Fältet "readResults" innehåller alla rader med text som extraherades från fakturan.
  • "pageResults" Innehåller tabeller och markeringar som extraherats från fakturan.
  • Fältet "documentResults" innehåller nyckel-/värdeinformation för de mest relevanta delarna av fakturan.

Se exempelfakturan .

Själva svaret

Se fullständiga exempelutdata på GitHub.

Det var allt, grattis! I den här snabbstarten använde du Formigenkänning modeller för att analysera olika formulär på olika sätt.

Nästa steg