Bibliothèque de client Azure Document Intelligence pour Java - version 4.1.2
Azure Document Intelligence (anciennement Form Recognizer) est un service cloud qui utilise le Machine Learning pour analyser du texte et des données structurées à partir de vos documents. Il comprend les fonctionnalités de main suivantes :
- Disposition : extrayez du texte, des structures de tableau et des marques de sélection, ainsi que leurs coordonnées de région englobante, à partir de documents.
- Document : analysez les entités, les paires clé-valeur, les tables et les marques de sélection à partir de documents à l’aide du modèle de document prédéfini général.
- Prédéfini : analysez les données de certains types de documents courants (tels que les reçus, les factures, les cartes de visite, les documents d’identité ou les formulaires fiscaux W2 américains) à l’aide de modèles prédéfinis.
- Personnalisé : créez des modèles personnalisés pour extraire du texte, des valeurs de champ, des marques de sélection et des données de tableau à partir de documents. Les modèles personnalisés sont créés avec vos propres données, de sorte qu’ils sont adaptés à vos documents.
- Lecture : lit des informations sur les éléments textuels, tels que les mots de page et les lignes, en plus des informations sur la langue du texte.
- Classifieurs : créez des classifieurs personnalisés pour classer les documents en classes prédéfinies.
| Code sourcePackage (Maven) | Documentation de référence sur les | APIDocumentation | produitÉchantillons
Prise en main
Prérequis
- Un Kit de développement Java (JDK), version 8 ou ultérieure.
- Abonnement Azure
- Cognitive Services ou Form Recognizer compte pour utiliser ce package.
Inclure le package
Inclure le fichier de nomenclature
Incluez azure-sdk-bom à votre projet pour dépendre de la version ga de la bibliothèque. Dans l’extrait de code suivant, remplacez l’espace réservé {bom_version_to_target} par le numéro de version. Pour en savoir plus sur la nomenclature, consultez le README BOM du KIT DE DÉVELOPPEMENT LOGICIEL AZURE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Ensuite, incluez la dépendance directe dans la section des dépendances sans la balise de version.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-formrecognizer</artifactId>
</dependency>
</dependencies>
Inclure une dépendance directe
Si vous souhaitez dépendre d’une version particulière de la bibliothèque qui n’est pas présente dans la nomenclature, ajoutez la dépendance directe à votre projet comme suit.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-ai-formrecognizer</artifactId>
<version>4.1.2</version>
</dependency>
Remarque : Cette version de la bibliothèque cliente utilise par défaut la
"2023-07-31"
version du service.
Ce tableau montre la relation entre les versions du kit de développement logiciel (SDK) et les versions d’API prises en charge du service :
Version du SDK | Version d’API prise en charge du service |
---|---|
3.0.x | 2.0 |
3.1.X - 3.1.12 | 2.0, 2.1 (par défaut) |
4.0.0 | 2.0, 2.1, 2022-08-31 (par défaut) |
4.1.0 | 2.0, 2.1, 2022-08-31, 2023-07-31 (par défaut) |
Remarque : À compter de la version 4.0.X, un nouvel ensemble de clients a été introduit pour tirer parti des fonctionnalités les plus récentes du service Form Recognizer. Consultez le Guide de migration pour obtenir des instructions détaillées sur la mise à jour du code d’application de la bibliothèque cliente version 3.1.X ou antérieure vers la dernière version. Pour plus d’informations, consultez Journal des modifications. Le tableau ci-dessous décrit la relation entre chaque client et ses versions d’API prises en charge :
Version de l'API | Clients pris en charge |
---|---|
2023-07-31 | DocumentAnalysisClient et DocumentModelAdministrationClient |
2022-08-31 | DocumentAnalysisClient et DocumentModelAdministrationClient |
2.1 | FormRecognizerClient et FormTrainingClient |
2.0 | FormRecognizerClient et FormTrainingClient |
Créer une ressource Form Recognizer
Form Recognizer prend en charge à la fois l’accès multiservices et l’accès à service unique. Créez la ressource d’un service cognitif si vous envisagez d’accéder à plusieurs services cognitifs sous un seul point de terminaison/clé. Pour l’accès à Form Recognizer uniquement, créez une ressource Form Recognizer.
Vous pouvez créer l’une ou l’autre ressource à l’aide de
Option 1 :Portail Azure
Option 2 :Azure CLI
Voici un exemple de création d’une ressource Form Recognizer à l’aide de l’interface CLI :
# Create a new resource group to hold the Form Recognizer resource -
# if using an existing resource group, skip this step
az group create --name <your-resource-group> --location <location>
# Create Form Recognizer
az cognitiveservices account create \
--name <your-form-recognizer-resource-name> \
--resource-group <your-resource-group> \
--kind FormRecognizer \
--sku <sku> \
--location <location> \
--yes
Authentifier le client
Pour interagir avec le service Form Recognizer, vous devez créer une instance du client Analyse de document.
Les clients asynchrones et synchrones peuvent être créés à l’aide de DocumentAnalysisClientBuilder
. L’appel buildClient()
crée le client synchrone, tandis que l’appel buildAsyncClient
crée son équivalent asynchrone.
Vous aurez besoin d’un point de terminaison et d’une clé pour instancier un objet client.
Recherche du point de terminaison
Vous pouvez trouver le point de terminaison de votre ressource Form Recognizer dans le Portail Azure ou Azure CLI.
# Get the endpoint for the resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "endpoint"
Créer un client d’analyse de document à l’aide d’AzureKeyCredential
Pour utiliser AzureKeyCredential
l’authentification, fournissez la clé sous forme de chaîne à AzureKeyCredential.
Cette clé se trouve dans le Portail Azure de la ressource Form Recognizer que vous avez créée, ou en exécutant la commande Azure CLI suivante pour obtenir la clé à partir de la ressource Form Recognizer :
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Utilisez la clé API comme paramètre d’informations d’identification pour authentifier le client :
DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildClient();
DocumentModelAdministrationClient client =
new DocumentModelAdministrationClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildClient();
Créer un client Analyse de document avec les informations d’identification Azure Active Directory
Le Kit de développement logiciel (SDK) Azure pour Java prend en charge un package Azure Identity, ce qui facilite l’obtention des informations d’identification à partir de Plateforme d'identités Microsoft.
L’authentification avec AAD nécessite une configuration initiale :
- Ajouter le package Azure Identity
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.10.0</version>
</dependency>
- Inscrire une nouvelle application Azure Active Directory
- Accordez l’accès à Form Recognizer en attribuant le
"Cognitive Services User"
rôle à votre principal de service.
Après l’installation, vous pouvez choisir le type d’informations d’identification à utiliser à partir d’azure-identity. Par exemple, DefaultAzureCredential peut être utilisé pour authentifier le client : définissez les valeurs de l’ID client, de l’ID de locataire et de la clé secrète client de l’application AAD en tant que variables d’environnement : AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.
L’autorisation est plus simple à l’aide de DefaultAzureCredential. Il trouve les meilleures informations d’identification à utiliser dans son environnement d’exécution. Pour plus d’informations sur l’utilisation de l’autorisation Azure Active Directory avec Form Recognizer, consultez la documentation associée.
DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
.endpoint("{endpoint}")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Concepts clés
DocumentAnalysisClient
DocumentAnalysisClient et DocumentAnalysisAsyncClient fournissent des opérations synchrones et asynchrones pour l’analyse des documents d’entrée à l’aide de modèles personnalisés et prédéfinis via les beginAnalyzeDocument
méthodes et beginAnalyzeDocumentFromUrl
.
Consultez la liste complète des modèles pris en charge ici.
Exemples d’extraits de code à illustrer à l’aide d’un DocumentAnalysisClient ici. Vous trouverez plus d’informations sur l’analyse des documents, notamment les fonctionnalités prises en charge, les paramètres régionaux et les types de documents ici.
DocumentModelAdministrationClient
DocumentModelAdministrationClient et DocumentModelAdministrationAsyncClient fournissent des opérations synchrones et asynchrones
- Créez des modèles d’analyse de documents personnalisés pour analyser le contenu, les champs et les valeurs du texte trouvés dans vos documents personnalisés. Consultez l’exemple Générer un modèle de document.
Un
DocumentModelDetails
est retourné indiquant les types de documents que le modèle peut analyser, ainsi que les champs et les schémas qu’il extrait. - Gestion des modèles créés dans votre compte en créant, en répertoriant, en supprimant et en montrant la limite de modèles personnalisés de votre compte. Consultez l’exemple Gérer les modèles.
- Copier un modèle personnalisé d’une ressource Form Recognizer vers une autre.
- Création d’un modèle composé à partir d’une collection de modèles générés existants.
- Liste des opérations de modèle de document associées à la ressource Form Recognizer.
Des exemples d’extraits de code sont fournis pour illustrer l’utilisation d’un DocumentModelAdministrationClient ici.
Opérations de longue durée
Les opérations de longue durée sont des opérations qui consistent en une demande initiale envoyée au service pour démarrer une opération, suivie d’un interrogation du service à intervalles réguliers pour déterminer si l’opération s’est terminée ou a échoué, et si elle a réussi, pour obtenir le résultat.
Les méthodes qui créent des modèles, analysent des valeurs à partir de documents ou copient et composent des modèles sont modélisées comme des opérations de longue durée.
Le client expose une begin<MethodName>
méthode qui retourne un ou PollerFlux
instanceSyncPoller
.
Les appelants doivent attendre que l’opération soit terminée en appelant getFinalResult()
sur l’opération retournée à partir de la begin<MethodName>
méthode . Des exemples d’extraits de code sont fournis pour illustrer l’utilisation d’opérations de longue durée ci-dessous.
Exemples
La section suivante fournit plusieurs extraits de code couvrant certaines des tâches Form Recognizer les plus courantes, notamment :
- Extraire la disposition
- Utiliser un modèle de document général
- Utiliser des modèles prédéfinis
- Créer un modèle de document
- Analyser des documents à l’aide d’un modèle personnalisé
- Gérer vos modèles
- Classifier un document
Extraire la disposition
Extrayez du texte, des structures de tableau et des marques de sélection comme des cases d’option et des zones de case activée, ainsi que leurs coordonnées de zone englobante à partir de documents sans avoir besoin de créer un modèle.
// analyze document layout using file input stream
File layoutDocument = new File("local/file_path/filename.png");
Path filePath = layoutDocument.toPath();
BinaryData layoutDocumentData = BinaryData.fromFile(filePath, (int) layoutDocument.length());
SyncPoller<OperationResult, AnalyzeResult> analyzeLayoutResultPoller =
documentAnalysisClient.beginAnalyzeDocument("prebuilt-layout", layoutDocumentData);
AnalyzeResult analyzeLayoutResult = analyzeLayoutResultPoller.getFinalResult();
// pages
analyzeLayoutResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding box %s with confidence %.2f.%n",
documentSelectionMark.getSelectionMarkState().toString(),
documentSelectionMark.getBoundingPolygon().toString(),
documentSelectionMark.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeLayoutResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n", documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
Utiliser un modèle de document général
Analysez les paires clé-valeur, les tables, les styles et les marques de sélection à partir de documents à l’aide du modèle de document général fourni par le service Form Recognizer. Sélectionnez le modèle de document général en passant modelId="prebuilt-document » dans la méthode beginAnalyzeDocumentFromUrl comme suit :
String documentUrl = "{document-url}";
String modelId = "prebuilt-document";
SyncPoller<OperationResult, AnalyzeResult> analyzeDocumentPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();
for (int i = 0; i < analyzeResult.getDocuments().size(); i++) {
final AnalyzedDocument analyzedDocument = analyzeResult.getDocuments().get(i);
System.out.printf("----------- Analyzing document %d -----------%n", i);
System.out.printf("Analyzed document has doc type %s with confidence : %.2f%n",
analyzedDocument.getDocType(), analyzedDocument.getConfidence());
}
analyzeResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n",
documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
// Key-value
analyzeResult.getKeyValuePairs().forEach(documentKeyValuePair -> {
System.out.printf("Key content: %s%n", documentKeyValuePair.getKey().getContent());
System.out.printf("Key content bounding region: %s%n",
documentKeyValuePair.getKey().getBoundingRegions().toString());
System.out.printf("Value content: %s%n", documentKeyValuePair.getValue().getContent());
System.out.printf("Value content bounding region: %s%n", documentKeyValuePair.getValue().getBoundingRegions().toString());
});
Utiliser des modèles prédéfinis
Extrayez des champs de certains types de documents tels que des reçus, des factures, des cartes de visite et des documents d’identité à l’aide de modèles prédéfinis fournis par le service Form Recognizer. Les modèles prédéfinis pris en charge sont les suivants :
- Analyser les reçus à l’aide du
prebuilt-receipt
modèle (les champs reconnus par le service sont disponibles ici) - Analysez les cartes de visite à l’aide du
prebuilt-businessCard
modèle (les champs reconnus par le service sont disponibles ici). - Analysez les factures à l’aide du
prebuilt-invoice
modèle (les champs reconnus par le service sont disponibles ici). - Analysez les documents d’identité à l’aide du
prebuilt-idDocuments
modèle (les champs reconnus par le service sont disponibles ici). - Analysez les formulaires fiscaux US W2 à l’aide du
prebuilt-tax.us.w2
modèle . Champs pris en charge.
Par exemple, pour analyser les champs d’un reçu de vente, dans la beginAnalyzeDocumentFromUrl
méthode :
String receiptUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-java/main/sdk/formrecognizer"
+ "/azure-ai-formrecognizer/src/samples/resources/sample-documents/receipts/contoso-allinone.jpg";
SyncPoller<OperationResult, AnalyzeResult> analyzeReceiptPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl("prebuilt-receipt", receiptUrl);
AnalyzeResult receiptResults = analyzeReceiptPoller.getFinalResult();
for (int i = 0; i < receiptResults.getDocuments().size(); i++) {
AnalyzedDocument analyzedReceipt = receiptResults.getDocuments().get(i);
Map<String, DocumentField> receiptFields = analyzedReceipt.getFields();
System.out.printf("----------- Analyzing receipt info %d -----------%n", i);
DocumentField merchantNameField = receiptFields.get("MerchantName");
if (merchantNameField != null) {
if (DocumentFieldType.STRING == merchantNameField.getType()) {
String merchantName = merchantNameField.getValueAsString();
System.out.printf("Merchant Name: %s, confidence: %.2f%n",
merchantName, merchantNameField.getConfidence());
}
}
DocumentField merchantPhoneNumberField = receiptFields.get("MerchantPhoneNumber");
if (merchantPhoneNumberField != null) {
if (DocumentFieldType.PHONE_NUMBER == merchantPhoneNumberField.getType()) {
String merchantAddress = merchantPhoneNumberField.getValueAsPhoneNumber();
System.out.printf("Merchant Phone number: %s, confidence: %.2f%n",
merchantAddress, merchantPhoneNumberField.getConfidence());
}
}
DocumentField transactionDateField = receiptFields.get("TransactionDate");
if (transactionDateField != null) {
if (DocumentFieldType.DATE == transactionDateField.getType()) {
LocalDate transactionDate = transactionDateField.getValueAsDate();
System.out.printf("Transaction Date: %s, confidence: %.2f%n",
transactionDate, transactionDateField.getConfidence());
}
}
DocumentField receiptItemsField = receiptFields.get("Items");
if (receiptItemsField != null) {
System.out.printf("Receipt Items: %n");
if (DocumentFieldType.LIST == receiptItemsField.getType()) {
List<DocumentField> receiptItems = receiptItemsField.getValueAsList();
receiptItems.stream()
.filter(receiptItem -> DocumentFieldType.MAP == receiptItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
if ("Name".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Name: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double quantity = documentField.getValueAsDouble();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
}));
}
}
}
Pour plus d’informations et des exemples utilisant des modèles prédéfinis, consultez :
Créer un modèle de document
Créez un modèle appris par machine sur votre propre type de document. Le modèle résultant sera en mesure d’analyser les valeurs des types de documents sur 2000. Fournissez une URL SAP de conteneur à votre conteneur d’objets blob Stockage Azure dans lequel vous stockez les documents d’entraînement. Pour plus d’informations sur la configuration, consultez la documentation de démarrage rapide du service.
Remarque
Vous pouvez utiliser la préversion Form Recognizer Studio pour créer un fichier étiqueté pour vos formulaires de formation. Pour plus d’informations sur la configuration d’un conteneur et la structure de fichiers requise, consultez ici.
// Build custom document analysis model
String blobContainerUrl = "{SAS_URL_of_your_container_in_blob_storage}";
// The shared access signature (SAS) Url of your Azure Blob Storage container with your forms.
String prefix = "{blob_name_prefix}}";
SyncPoller<OperationResult, DocumentModelDetails> buildOperationPoller =
documentModelAdminClient.beginBuildDocumentModel(blobContainerUrl,
DocumentModelBuildMode.TEMPLATE,
prefix,
new BuildDocumentModelOptions().setModelId("my-build-model").setDescription("model desc"),
Context.NONE);
DocumentModelDetails documentModelDetails = buildOperationPoller.getFinalResult();
// Model Info
System.out.printf("Model ID: %s%n", documentModelDetails.getModelId());
System.out.printf("Model Description: %s%n", documentModelDetails.getDescription());
System.out.printf("Model created on: %s%n%n", documentModelDetails.getCreatedOn());
documentModelDetails.getDocumentTypes().forEach((key, documentTypeDetails) -> {
System.out.printf("Document type: %s%n", key);
documentTypeDetails.getFieldSchema().forEach((name, documentFieldSchema) -> {
System.out.printf("Document field: %s%n", name);
System.out.printf("Document field type: %s%n", documentFieldSchema.getType().toString());
System.out.printf("Document field confidence: %.2f%n", documentTypeDetails.getFieldConfidence().get(name));
});
});
Analyser des documents à l’aide d’un modèle personnalisé
Analysez les paires clé/valeur et les données de table des documents. Ces modèles sont créés avec vos propres données, de sorte qu’ils sont adaptés à vos documents. Vous devez analyser uniquement les documents du même type de document sur lequel le modèle personnalisé a été construit.
String documentUrl = "{document-url}";
String modelId = "{custom-built-model-ID}";
SyncPoller<OperationResult, AnalyzeResult> analyzeDocumentPoller =
documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();
for (int i = 0; i < analyzeResult.getDocuments().size(); i++) {
final AnalyzedDocument analyzedDocument = analyzeResult.getDocuments().get(i);
System.out.printf("----------- Analyzing custom document %d -----------%n", i);
System.out.printf("Analyzed document has doc type %s with confidence : %.2f%n",
analyzedDocument.getDocType(), analyzedDocument.getConfidence());
analyzedDocument.getFields().forEach((key, documentField) -> {
System.out.printf("Document Field content: %s%n", documentField.getContent());
System.out.printf("Document Field confidence: %.2f%n", documentField.getConfidence());
System.out.printf("Document Field Type: %s%n", documentField.getType());
System.out.printf("Document Field found within bounding region: %s%n",
documentField.getBoundingRegions().toString());
});
}
analyzeResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding box %s.%n",
documentLine.getContent(),
documentLine.getBoundingPolygon().toString()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
});
// tables
List<DocumentTable> tables = analyzeResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n",
documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
Gérer vos modèles
Gérez les modèles dans votre compte Form Recognizer.
AtomicReference<String> modelId = new AtomicReference<>();
// First, we see how many models we have, and what our limit is
ResourceDetails resourceDetails = documentModelAdminClient.getResourceDetails();
System.out.printf("The resource has %s models, and we can have at most %s models",
resourceDetails.getCustomDocumentModelCount(), resourceDetails.getCustomDocumentModelLimit());
// Next, we get a paged list of all of our models
PagedIterable<DocumentModelSummary> customDocumentModels = documentModelAdminClient.listDocumentModels();
System.out.println("We have following models in the account:");
customDocumentModels.forEach(documentModelSummary -> {
System.out.printf("Model ID: %s%n", documentModelSummary.getModelId());
modelId.set(documentModelSummary.getModelId());
// get custom document analysis model info
DocumentModelDetails documentModel = documentModelAdminClient.getDocumentModel(documentModelSummary.getModelId());
System.out.printf("Model ID: %s%n", documentModel.getModelId());
System.out.printf("Model Description: %s%n", documentModel.getDescription());
System.out.printf("Model created on: %s%n", documentModel.getCreatedOn());
documentModel.getDocumentTypes().forEach((key, documentTypeDetails) -> {
documentTypeDetails.getFieldSchema().forEach((field, documentFieldSchema) -> {
System.out.printf("Field: %s", field);
System.out.printf("Field type: %s", documentFieldSchema.getType());
System.out.printf("Field confidence: %.2f", documentTypeDetails.getFieldConfidence().get(field));
});
});
});
// Delete Model
documentModelAdminClient.deleteDocumentModel(modelId.get());
Classifier un document
Le service Form Recognizer prend en charge les classifieurs de documents personnalisés qui peuvent classer les documents dans un ensemble de catégories prédéfinies en fonction d’un jeu de données d’entraînement.
Les documents peuvent être classés avec un classifieur personnalisé à l’aide de la beginClassifyDocument
méthode ou beginClassifyDocumentFromUrl
de DocumentAnalysisClient
.
L’exemple suivant montre comment classifier un document à l’aide d’un classifieur personnalisé :
String documentUrl = "{file_source_url}";
String classifierId = "{custom_trained_classifier_id}";
documentAnalysisClient.beginClassifyDocumentFromUrl(classifierId, documentUrl, Context.NONE)
.getFinalResult()
.getDocuments()
.forEach(analyzedDocument -> System.out.printf("Doc Type: %s%n", analyzedDocument.getDocType()));
Pour obtenir des exemples plus détaillés, reportez-vous aux exemples.
Dépannage
Général
Form Recognizer clients soulèvent des HttpResponseException
exceptions. Par exemple, si vous essayez de fournir une URL de source de fichier non valide, une exception HttpResponseException
est levée avec une erreur indiquant la cause de l’échec.
Dans l’extrait de code suivant, l’erreur est gérée correctement via l’interception de l’exception et en affichant des informations supplémentaires sur l’erreur en question.
try {
documentAnalysisClient.beginAnalyzeDocumentFromUrl("prebuilt-receipt", "invalidSourceUrl");
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
// Do something with the exception
}
Activer la journalisation du client
Les sdk Azure pour Java offrent une histoire de journalisation cohérente pour vous aider à résoudre les erreurs d’application et à accélérer leur résolution. Les journaux produits capturent le flux d’une application avant d’atteindre l’état terminal pour faciliter la localisation du problème racine. Consultez le wiki de journalisation pour obtenir des conseils sur l’activation de la journalisation.
Client HTTP par défaut
Toutes les bibliothèques de client utilisent par défaut le client HTTP Netty. Ajoutez la dépendance ci-dessus pour configurer automatiquement la bibliothèque cliente pour utiliser le client HTTP Netty. La configuration ou la modification du client HTTP sont détaillées dans le wiki pour clients HTTP.
Étapes suivantes
La section suivante fournit plusieurs extraits de code illustrant les modèles courants utilisés dans l’API Form Recognizer. Ces exemples de code illustrent les opérations de scénario courantes avec la bibliothèque cliente Azure Form Recognizer.
- Analyser les carte métier à partir d’une URL : AnalyzeBusinessCardFromUrl
- Analyser les documents d’identité à partir d’une URL : AnalyzeIdentityDocumentsFromUrl
- Analyser la facture à partir d’une URL : AnalyzeInvoiceFromUrl
- Analyser les reçus : AnalyzeReceipts
- Analyser les reçus à partir d’une URL : AnalyzeReceiptsFromUrl
- Extraire la disposition : AnalyzeLayout
- Analyser des documents personnalisés à partir d’une URL : AnalyzeCustomDocumentFromUrl
- Générer un modèle : BuildModel
- Gérer les modèles personnalisés : ManageCustomModels
- Copier un modèle entre Form Recognizer ressources : CopyModel
- Créer un modèle composé à partir d’une collection de modèles personnalisés : ComposeModel
- Opérations de modèle de document Get/List associées à la ressource Form Recognizer : GetOperation
- Générer un classifieur de documents : BuildDocumentClassifier
API asynchrones
Tous les exemples présentés jusqu’à présent utilisent des API synchrones, mais nous fournissons également une prise en charge complète des API asynchrones.
Vous devrez utiliser DocumentAnalysisAsyncClient
DocumentAnalysisAsyncClient documentAnalysisAsyncClient = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildAsyncClient();
- Analyser les carte métier à partir d’une URL : AnalyzeBusinessCardFromUrlAsync
- Analyser les documents d’identité à partir d’une URL : AnalyzeIdentityDocumentsFromUrlAsync
- Analyser la facture : AnalyzeInvoiceAsync
- Analyser les reçus : AnalyzeReceiptsAsync
- Analyser les reçus à partir d’une URL : AnalyzeReceiptsFromUrlAsync
- Extraire la disposition d’une URL : AnalyzeLayoutFromUrlAsync
- Analyser des documents personnalisés : AnalyzeCustomDocumentAsync
- Créer un modèle de document : BuildModelAsync
- Gérer les modèles personnalisés : ManageCustomModelsAsync
- Copier un modèle de document entre Form Recognizer ressources : CopyModelAsync
- Créer un modèle de document composé à partir d’une collection de modèles personnalisés : ComposeModelAsync
- Opérations de modèle de document Get/List associées à la ressource Form Recognizer : GetOperationAsync
- Générer un classifieur de documents : BuildDocumentClassifierAsync
Documentation complémentaire
Consultez l’exemple README pour obtenir plusieurs extraits de code illustrant les modèles courants utilisés dans le kit de développement logiciel (SDK) Java Form Recognizer. Pour obtenir une documentation plus complète sur les Form Recognizer Azure Cognitive Services, consultez la documentation Form Recognizer.
Contribution
Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) spécifiant que vous avez le droit de nous accorder les droits d’utiliser votre contribution, et que vous nous les accordez.
Quand vous envoyez une demande de tirage (pull request), un bot CLA détermine automatiquement si vous devez fournir un contrat CLA et agrémenter la demande de tirage de façon appropriée (par exemple, avec une étiquette ou un commentaire). Suivez simplement les instructions fournies par le bot. Vous ne devez effectuer cette opération qu’une seule fois sur tous les dépôts utilisant notre contrat CLA.
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d'informations, consultez la FAQ du Code de conduite ou contactez opencode@microsoft.com pour toute question ou commentaire supplémentaire.