Hızlı Başlangıç: Java istemci kitaplığı SDK v3.0 | Önizleme

Not

Form Tanıma v3.0 şu anda genel önizlemededir. Bazı özellikler desteklenmiyor veya sınırlı özelliklere sahip olabilir.

Başvuru belgeleri | Kitaplık kaynak kodu | Paket (Maven) | Örnekleri

Kullanmaya başlayın Java programlama dilini Form Tanıma Azure Form Tanıma ile birlikte kullanın. Azure Form Tanıma, belgelerinizin form alanlarını, metinlerini ve tablolarını ayıklamak ve analiz etmek için makine öğrenmesini kullanan bulut tabanlı bir Azure Uygulamalı AI Hizmetidir. İstemci kitaplığı SDK'larımızı iş akışlarınıza ve uygulamalarınıza tümleştirerek Form Tanıma modellerini kolayca çağırabilirsiniz. Teknolojiyi öğrenerek ücretsiz hizmeti kullanmalarını öneririz. Ücretsiz sayfa sayısının aylık 500 ile sınırlı olduğunu unutmayın.

Özellikleri ve geliştirme seçeneklerini Form Tanıma daha fazla bilgi edinmek için Genel Bakış sayfamızı ziyaret edin.

Bu hızlı başlangıçta formlardan ve belgelerden verileri ve değerleri analiz etmek ve ayıklamak için aşağıdaki özellikleri kullanacağız:

  • 🆕 - Metin,tablo, yapı, anahtar-değer çiftleri ve adlandırılmış varlıkları analiz edip ayıklar.

  • Düzen—Model eğitmeden tabloları, satırları, sözcükleri ve radyo düğmeleri ve form belgelerinden onay kutuları gibi seçim işaretlerini analiz edip ayıklar.

  • Önceden Oluşturulmuş Fatura Önceden eğitilmiş bir fatura modelini kullanarak faturalardan yaygın alanları analiz etme ve ayıklama.

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun.
  • Java Development Kit (JDK), sürüm 8 veya sonraki sürümler
  • Bilişsel Hizmetler veya Form Tanıma. Azure aboneliğinize sahip olduktan sonra, anahtarınızı ve uç noktanızı almak için Form Tanıma tek hizmetli veya çok hizmetli bir Azure portal kaynak oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

İpucu

Tek bir uç nokta/anahtar altında birden çok bilişsel hizmetlere erişmeyi planlıyorsanız Bilişsel Hizmetler kaynağı oluşturun. Yalnızca Form Tanıma erişim için bir Form Tanıma oluşturun. Kimlik doğrulamasını kullanmak için tek hizmetli bir kaynağa ihtiyacınız Azure Active Directory unutmayın.

  • Kaynağınız dağıt edildikten sonra Kaynağa git'e tıklayın. Uygulamanıza api'sini bağlamak için, kaynakta yer alan anahtara ve uç Form Tanıma gerekir. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz:

    Ekran görüntüsü: Anahtarlar ve uç nokta konumu Azure portal.

Kurulum

Yeni bir Gradle projesi oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi) form-recognizer-app adlı yeni bir dizin oluşturun ve bu dizine gidin.

mkdir form-recognizer-app && form-recognizer-app

Komutunu gradle init çalışma dizinden çalıştırın. Bu komut, çalışma zamanında uygulama oluşturmak ve yapılandırmak için kullanılan build.gradle.kts dahil olmak üzere Gradle için temel derleme dosyaları oluşturacak.

gradle init --type basic
  1. DSL seçmeniz istendiğinde Kotlin'i seçin.

  2. Varsayılan proje adını kabul edin (form-recognizer-app)

İstemci kitaplığını yükleme

Bu hızlı başlangıçta Gradle bağımlılık yöneticisi 2. İstemci kitaplığını ve diğer bağımlılık yöneticilerine ilişkin bilgileri Maven Merkezi Deposu'nda bulabilirsiniz.

Projenizin build.gradle.kts dosyasında, gerekli eklentilerin ve ayarların yanı sıra bir deyimi olarak implementation istemci kitaplığını da dahil edin.

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

Java dosyası oluşturma

Çalışma dizininize aşağıdaki komutu çalıştırın:

mkdir -p src/main/java

Aşağıdaki dizin yapısını oluşturabilirsiniz:

Ekran görüntüsü: Java dizin yapısı

Yeni klasöre gidin ve FormRecognizer.java adlı bir dosya oluşturun (komut sırasında gradle init oluşturulur). Tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki paket bildirimini ve import deyimlerini ekleyin:

package com.azure.ai.formrecognizer;

import com.azure.ai.formrecognizer.models.AnalyzeDocumentOptions;
import com.azure.ai.formrecognizer.models.AnalyzedDocument;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.HttpPipeline;
import com.azure.core.http.HttpPipelineBuilder;
import com.azure.core.util.Context;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Arrays;

Kopyalayıp uygulamanın ana yöntemine yapıştırmak için bir kod örneği seçin:

Önemli

Bitirilen anahtarı kodunuzdan kaldırmayı unutmayın ve hiçbir zaman herkese açık şekilde yayınlayamayabilirsiniz. Üretim için, kimlik bilgilerinizi depolamak ve erişmek için güvenli yöntemler kullanın. Daha fazla bilgi için Bilişsel Hizmetler güvenliği makalesine bakın.

Deneyin: Genel belge modeli

  • Bu örnekte, URI'de bir form belgesi dosyası gerekir. Bu hızlı başlangıç için örnek form belgemizi kullanabilirsiniz.
  • URI'de verilen bir dosyayı analiz etmek için yöntemini kullanır beginAnalyzeDocumentFromUrl ve model kimliği olarak prebuilt-document geçersiniz. Döndürülen değer, gönderilen AnalyzeResult belgeyle ilgili verileri içeren bir nesnedir.
  • Main yönteminde değişkenine dosya documentUrl URI'sı değerini ekledik.
  • Kolaylık olması için hizmetin döndürtt olduğu tüm varlık alanları burada gösterilmez. Desteklenen tüm alanların ve karşılık gelen türlerin listesini görmek için Genel belge kavramı sayfamıza bakın.

Aşağıdaki kodla, uygulamanın FormRecognizer sınıfını güncelleştirin (anahtar ve uç nokta değişkenlerini Form Tanıma örneğinizin değerleriyle güncelleştirmeniz Azure portal):

public class FormRecognizer {

    static final String key = "PASTE_YOUR_FORM_RECOGNIZER_SUBSCRIPTION_KEY_HERE";
    static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";

    public static void main(String[] args) {

        DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
            .credential(new AzureKeyCredential("{key}"))
            .endpoint("{endpoint}")
            .buildClient();

        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 < DocumentOperationResult, AnalyzeResult > analyzeDocumentPoller =
            documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);

        AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();

        for (int i = 0; i < analyzeResult.getDocuments().size(); i++) {
            final AnalyzedDocument analyzedDocument = analyzeResult.getDocuments().get(i);
            System.out.printf("----------- Analyzing document %d -----------%n", i);
            System.out.printf("Analyzed document has doc type %s with confidence : %.2f%n",
                analyzedDocument.getDocType(), analyzedDocument.getConfidence());
        }

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

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

        // Entities
        analyzeResult.getEntities().forEach(documentEntity - > {
            System.out.printf("Entity category : %s, sub-category %s%n: ",
                documentEntity.getCategory(), documentEntity.getSubCategory());
            System.out.printf("Entity content: %s%n: ", documentEntity.getContent());
            System.out.printf("Entity confidence: %.2f%n", documentEntity.getConfidence());
        });

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

            System.out.printf("Value content: %s%n", documentKeyValuePair.getValue().getContent());
            System.out.printf("Value content bounding region: %s%n", documentKeyValuePair.getValue().getBoundingRegions().toString());
        });
        Build a custom document analysis model
        In 3. x.x, creating a custom model required specifying useTrainingLabels to indicate whether to use labeled data when creating the custom model with the beginTraining method.
        In 4. x.x, we introduced the new general document model(prebuilt - document) to replace the train without labels functionality from 3. x.x which extracts entities, key - value pairs, and layout from a document with the beginBuildModel method.In 4. x.x the beginBuildModel always returns labeled data otherwise.
        Train a custom model using 3. x.x beginTraining:

            String trainingFilesUrl = "{SAS_URL_of_your_container_in_blob_storage}";
        SyncPoller < FormRecognizerOperationResult, CustomFormModel > trainingPoller =
            formTrainingClient.beginTraining(trainingFilesUrl,
                false,
                new TrainingOptions()
                .setModelName("my model trained without labels"),
                Context.NONE);

        CustomFormModel customFormModel = trainingPoller.getFinalResult();

        // Model Info
        System.out.printf("Model Id: %s%n", customFormModel.getModelId());
        System.out.printf("Model name given by user: %s%n", customFormModel.getModelName());
        System.out.printf("Model Status: %s%n", customFormModel.getModelStatus());
        System.out.printf("Training started on: %s%n", customFormModel.getTrainingStartedOn());
        System.out.printf("Training completed on: %s%n%n", customFormModel.getTrainingCompletedOn());

        System.out.println("Recognized Fields:");
        // looping through the subModels, which contains the fields they were trained on
        // Since the given training documents are unlabeled we still group them but, they do not have a label.
        customFormModel.getSubmodels().forEach(customFormSubmodel - > {
            System.out.printf("Submodel Id: %s%n: ", customFormSubmodel.getModelId());
            // Since the training data is unlabeled, we are unable to return the accuracy of this model
            customFormSubmodel.getFields().forEach((field, customFormModelField) - >
                System.out.printf("Field: %s Field Label: %s%n",
                    field, customFormModelField.getLabel()));
        });

        System.out.println();
        customFormModel.getTrainingDocuments().forEach(trainingDocumentInfo - > {
            System.out.printf("Document name: %s%n", trainingDocumentInfo.getName());
            System.out.printf("Document status: %s%n", trainingDocumentInfo.getStatus());
            System.out.printf("Document page count: %d%n", trainingDocumentInfo.getPageCount());
            if (!trainingDocumentInfo.getErrors().isEmpty()) {
                System.out.println("Document Errors:");
                trainingDocumentInfo.getErrors().forEach(formRecognizerError - >
                    System.out.printf("Error code %s, Error message: %s%n", formRecognizerError.getErrorCode(),
                        formRecognizerError.getMessage()));
            }
        });
    }

Deneyin: Düzen modeli

Belgelerden sınırlayıcı bölge koordinatlarıyla birlikte metin, seçim işaretleri, metin stilleri ve tablo yapılarını ayıklar.

  • Bu örnekte, URI'de bir form belgesi dosyası gerekir. Bu hızlı başlangıç için örnek form belgemizi kullanabilirsiniz.
  • URI'de verilen bir dosyayı analiz etmek için yöntemini kullanır beginAnalyzeDocumentFromUrl ve model kimliği olarak prebuilt-layout geçersiniz. Döndürülen değer, gönderilen AnalyzeResult belgeyle ilgili verileri içeren bir nesnedir.
  • Main yönteminde değişkenine dosya documentUrl URI'sı değerini ekledik.

Aşağıdaki kodla, uygulamanın FormRecognizer sınıfını güncelleştirin (anahtar ve uç nokta değişkenlerini Form Tanıma örneğinizin değerleriyle güncelleştirmeniz Azure portal):

public class FormRecognizer {

    static final String key = "PASTE_YOUR_FORM_RECOGNIZER_SUBSCRIPTION_KEY_HERE";
    static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";

    public static void main(String[] args) {

        DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
            .credential(new AzureKeyCredential("{key}"))
            .endpoint("{endpoint}")
            .buildClient();

        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 < DocumentOperationResult, AnalyzeResult > analyzeLayoutResultPoller =
            documentAnalysisClient.beginAnalyzeDocument(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 box %s.%n",
                    documentLine.getContent(),
                    documentLine.getBoundingBox().toString()));

            // selection marks
            documentPage.getSelectionMarks().forEach(documentSelectionMark - >
                System.out.printf("Selection mark is %s and is within a bounding box %s with confidence %.2f.%n",
                    documentSelectionMark.getState().toString(),
                    documentSelectionMark.getBoundingBox().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();
        }
    }

Deneyin: Önceden oluşturulmuş model

Bu örnek, örnek olarak fatura kullanarak önceden eğitilmiş modellerle belirli türlerde ortak belgelerden verileri analiz etme hakkında bilgi sağlar.

  • Bu örnekte önceden oluşturulmuş bir modeli kullanarak fatura belgesini analiz edersiniz. Bu hızlı başlangıç için örnek fatura belgemizi kullanabilirsiniz.
  • URI'de verilen bir dosyayı analiz etmek için yöntemini kullanır beginAnalyzeDocumentFromUrl ve model kimliği olarak prebuilt-invoice geçersiniz. Döndürülen değer, gönderilen AnalyzeResult belgeyle ilgili verileri içeren bir nesnedir.
  • Main yönteminde değişkenine dosya invoiceUrl URI'sı değerini ekledik.
  • Kolaylık olması için hizmetin döndürtt olduğu tüm anahtar-değer çiftleri burada gösterilmez. Desteklenen tüm alanların ve karşılık gelen türlerin listesini görmek için Fatura kavramı sayfamıza bakın.

Fatura önceden oluşturulmuş model kimliğini seçme

Faturalar sınırlı değildir; her biri kendi desteklenen alan kümesine sahip olan, önceden oluşturulmuş birkaç modelden birini seçebilirsiniz. Analiz işlemi için kullanılan model, analiz için belgenin türüne bağlıdır. Şu anda Form Tanıma hizmeti tarafından desteklenen önceden oluşturulmuş modellerin model kimlikleri:

Aşağıdaki kodla, uygulamanın FormRecognizer sınıfını güncelleştirin (anahtar ve uç nokta değişkenlerini Form Tanıma örneğinizin değerleriyle güncelleştirmeniz Azure portal):


public class FormRecognizer {

    static final String key = "PASTE_YOUR_FORM_RECOGNIZER_SUBSCRIPTION_KEY_HERE";
    static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";

    public static void main(String[] args) {

        DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
            .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"
        String modelId = "prebuilt-invoice";

        PollerFlux < DocumentOperationResult, AnalyzeResult > analyzeInvoicePoller = client.beginAnalyzeDocumentFromUrl("prebuilt-invoice", invoiceUrl);

        Mono < AnalyzeResult > analyzeInvoiceResultMono = analyzeInvoicePoller
            .last()
            .flatMap(pollResponse - > {
                if (pollResponse.getStatus().isComplete()) {
                    System.out.println("Polling completed successfully");
                    return pollResponse.getFinalResult();
                } else {
                    return Mono.error(new RuntimeException("Polling completed unsuccessfully with status:" +
                        pollResponse.getStatus()));
                }
            });

        analyzeInvoiceResultMono.subscribe(analyzeInvoiceResult - > {
            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.getValueString();
                        System.out.printf("Vendor Name: %s, confidence: %.2f%n",
                            merchantName, vendorNameField.getConfidence());
                    }
                }

                DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
                if (vendorAddressField != null) {
                    if (DocumentFieldType.STRING == vendorAddressField.getType()) {
                        String merchantAddress = vendorAddressField.getValueString();
                        System.out.printf("Vendor address: %s, confidence: %.2f%n",
                            merchantAddress, vendorAddressField.getConfidence());
                    }
                }

                DocumentField customerNameField = invoiceFields.get("CustomerName");
                if (customerNameField != null) {
                    if (DocumentFieldType.STRING == customerNameField.getType()) {
                        String merchantAddress = customerNameField.getValueString();
                        System.out.printf("Customer Name: %s, confidence: %.2f%n",
                            merchantAddress, customerNameField.getConfidence());
                    }
                }

                DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
                if (customerAddressRecipientField != null) {
                    if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
                        String customerAddr = customerAddressRecipientField.getValueString();
                        System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
                            customerAddr, customerAddressRecipientField.getConfidence());
                    }
                }

                DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
                if (invoiceIdField != null) {
                    if (DocumentFieldType.STRING == invoiceIdField.getType()) {
                        String invoiceId = invoiceIdField.getValueString();
                        System.out.printf("Invoice ID: %s, confidence: %.2f%n",
                            invoiceId, invoiceIdField.getConfidence());
                    }
                }

                DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
                if (customerNameField != null) {
                    if (DocumentFieldType.DATE == invoiceDateField.getType()) {
                        LocalDate invoiceDate = invoiceDateField.getValueDate();
                        System.out.printf("Invoice Date: %s, confidence: %.2f%n",
                            invoiceDate, invoiceDateField.getConfidence());
                    }
                }

                DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
                if (customerAddressRecipientField != null) {
                    if (DocumentFieldType.FLOAT == invoiceTotalField.getType()) {
                        Float invoiceTotal = invoiceTotalField.getValueFloat();
                        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.getValueList();
                        invoiceItems.stream()
                            .filter(invoiceItem - > DocumentFieldType.MAP == invoiceItem.getType())
                            .map(formField - > formField.getValueMap())
                            .forEach(formFieldMap - > formFieldMap.forEach((key, formField) - > {
                                // See a full list of fields found on an invoice here:
                                // https://aka.ms/formrecognizer/invoicefields
                                if ("Description".equals(key)) {
                                    if (DocumentFieldType.STRING == formField.getType()) {
                                        String name = formField.getValueString();
                                        System.out.printf("Description: %s, confidence: %.2fs%n",
                                            name, formField.getConfidence());
                                    }
                                }
                                if ("Quantity".equals(key)) {
                                    if (DocumentFieldType.FLOAT == formField.getType()) {
                                        Float quantity = formField.getValueFloat();
                                        System.out.printf("Quantity: %f, confidence: %.2f%n",
                                            quantity, formField.getConfidence());
                                    }
                                }
                                if ("UnitPrice".equals(key)) {
                                    if (DocumentFieldType.FLOAT == formField.getType()) {
                                        Float unitPrice = formField.getValueFloat();
                                        System.out.printf("Unit Price: %f, confidence: %.2f%n",
                                            unitPrice, formField.getConfidence());
                                    }
                                }
                                if ("ProductCode".equals(key)) {
                                    if (DocumentFieldType.FLOAT == formField.getType()) {
                                        Float productCode = formField.getValueFloat();
                                        System.out.printf("Product Code: %f, confidence: %.2f%n",
                                            productCode, formField.getConfidence());
                                    }
                                }
                            }));
                    }
                }
            }
        });
    }
}

Uygulamalarınızı derleme ve çalıştırma

Ana proje dizininize geri gidin:form-recognizer-app.

  1. komutunu kullanarak uygulamalarınızı build derleme:
gradle build
  1. Şu komutla uygulamanızı run çalıştırın:
gradle run

Tebrikler! Bu hızlı başlangıçta, çeşitli formları ve belgeleri farklı Form Tanıma analiz etmek için Java SDK'sı için Form Tanıma sdk'sı kullandık. Daha sonra, api'ler hakkında daha ayrıntılı bilgi Form Tanıma başvuru belgelerini inceleyin.

Sonraki adımlar