Analyser le contenu
Conseil / Astuce
Pour plus d’informations, consultez l’onglet Texte et images !
Pour analyser le contenu d’un fichier, vous pouvez utiliser l’API Azure Content Understanding pour l’envoyer au point de terminaison. Vous pouvez spécifier le contenu en tant qu’URL (pour un fichier hébergé dans un emplacement accessible par Internet) ou charger directement des données de fichier binaire (par exemple, un document .pdf, une image .png, un fichier audio .mp3 ou un fichier vidéo .mp4). La demande d’analyse inclut l’analyseur à utiliser.
L’analyse est une opération asynchrone. Après avoir envoyé la demande, vous recevez un ID d’opération que vous pouvez utiliser pour vérifier l’état et récupérer les résultats une fois l’opération terminée.
Par exemple, supposons que vous souhaitez utiliser l’analyseur de carte de visite décrit précédemment pour extraire le nom et l’adresse e-mail de l’image de carte de visite analysée suivante :
Utilisation du Kit de développement logiciel (SDK) Python
Le Kit de développement logiciel (SDK) Python pour Content Understanding (azure-ai-contentunderstanding) fournit une ContentUnderstandingClient classe qui simplifie l’interaction avec le service. Le Kit de développement logiciel (SDK) gère l’authentification, la mise en forme des demandes et l’interrogation automatique pour les opérations asynchrones.
Le code Python suivant exploite le SDK pour soumettre une carte de visite à l’analyse et en récupérer les résultats :
from azure.ai.contentunderstanding import ContentUnderstandingClient
from azure.ai.contentunderstanding.models import AnalysisInput
from azure.core.credentials import AzureKeyCredential
# Authenticate the client
endpoint = "<YOUR_ENDPOINT>"
credential = AzureKeyCredential("<YOUR_API_KEY>")
client = ContentUnderstandingClient(endpoint=endpoint, credential=credential)
# Analyze the business card using the custom analyzer
analyzer_name = "business_card_analyser"
poller = client.begin_analyze(
analyzer_id=analyzer_name,
inputs=[AnalysisInput(url="https://host.com/business-card.png")]
)
# Wait for the operation to complete and get the results
result = poller.result()
# Extract field values from the results
content = result.contents[0]
if content.fields:
for field_name, field_data in content.fields.items():
if field_data.type == "string":
print(f"{field_name}: {field_data.value}")
Conseil / Astuce
La méthode du SDK begin_analyze retourne un objet poller. L'appel .result() sur le gestionnaire d'interrogation gère automatiquement l’interrogation jusqu’à ce que l’opération se termine, vous n’avez donc pas besoin d’écrire votre propre boucle d’interrogation.
Utilisation de l’API REST
Vous pouvez également envoyer des demandes d’analyse directement à l’aide de l’API REST. Votre application cliente envoie des appels HTTP au point de terminaison Content Understanding pour votre ressource Microsoft Foundry, en passant une clé API dans l’en-tête.
Le code Python suivant envoie une demande d’analyse à l’aide d’une URL, puis interroge le service jusqu’à ce que l’opération soit terminée et que les résultats soient retournés.
import json
import requests
## Use a POST request to submit the file URL to the analyzer
analyzer_name = "business_card_analyser"
headers = {
"Ocp-Apim-Subscription-Key": "<YOUR_API_KEY>",
"Content-Type": "application/json"}
url = f"{<YOUR_ENDPOINT>}/contentunderstanding/analyzers/{analyzer_name}:analyze?api-version=2025-11-01"
request_body = {
"inputs": [
{
"url": "https://host.com/business-card.png"
}
]
}
response = requests.post(url, headers=headers, json=request_body)
# Get the response and extract the ID assigned to the analysis operation
response_json = response.json()
id_value = response_json.get("id")
# Use a GET request to check the status of the analysis operation
result_url = f"{<YOUR_ENDPOINT>}/contentunderstanding/analyzerResults/{id_value}?api-version=2025-11-01"
result_response = requests.get(result_url, headers=headers)
# Keep polling until the analysis is complete
status = result_response.json().get("status")
while status == "Running":
result_response = requests.get(result_url, headers=headers)
status = result_response.json().get("status")
# Get the analysis results
if status == "Succeeded":
result_json = result_response.json()
Note
Vous pouvez spécifier une URL pour l’emplacement du fichier de contenu, comme indiqué ici. Pour envoyer directement des données de fichier binaire, utilisez plutôt l’opération analyzeBinary .
Traitement des résultats de l’analyse
Les résultats dépendent des éléments suivants :
- Le type de contenu que l’analyseur est conçu pour analyser (par exemple, document, vidéo, image ou audio).
- Schéma de l’analyseur.
- Contenu du fichier analysé.
Par exemple, la réponse de l’analyseur de carte de visite basée sur le document lors de l’analyse de la carte de visite décrite précédemment contient :
- Champs extraits
- Disposition optique de reconnaissance de caractères (OCR) du document, y compris les emplacements des lignes de texte, des mots individuels et des paragraphes sur chaque page.
Utilisation du Kit de développement logiciel (SDK) Python
Lorsque vous utilisez le Kit de développement logiciel (SDK), l’objet AnalysisResult fournit un accès typé aux résultats. La contents propriété contient une liste d’objets de contenu, chacun avec des champs, markdown et des métadonnées. Le code suivant montre comment extraire des valeurs de champ de chaîne :
# (continued from previous SDK code example)
content = result.contents[0]
if content.fields:
for field_name, field_data in content.fields.items():
if field_data.type == "string":
print(f"{field_name}: {field_data.value}")
Utilisation de l’API REST
Lorsque vous utilisez l’API REST, la réponse est une charge utile JSON que votre application doit analyser. Voici la réponse JSON complète pour l’analyse des cartes de visite :
{
"id": "00000000-0000-0000-0000-a00000000000",
"status": "Succeeded",
"result": {
"analyzerId": "biz_card_analyser_2",
"apiVersion": "2025-11-01",
"createdAt": "2025-05-16T03:51:46Z",
"warnings": [],
"contents": [
{
"markdown": "John Smith\nEmail: john@contoso.com\n",
"fields": {
"ContactName": {
"type": "string",
"valueString": "John Smith",
"spans": [
{
"offset": 0,
"length": 10
}
],
"confidence": 0.994,
"source": "D(1,69,234,333,234,333,283,69,283)"
},
"EmailAddress": {
"type": "string",
"valueString": "john@contoso.com",
"spans": [
{
"offset": 18,
"length": 16
}
],
"confidence": 0.998,
"source": "D(1,179,309,458,309,458,341,179,341)"
}
},
"kind": "document",
"startPageNumber": 1,
"endPageNumber": 1,
"unit": "pixel",
"pages": [
{
"pageNumber": 1,
"angle": 0.03410444,
"width": 1000,
"height": 620,
"spans": [
{
"offset": 0,
"length": 35
}
],
"words": [
{
"content": "John",
"span": {
"offset": 0,
"length": 4
},
"confidence": 0.992,
"source": "D(1,69,234,181,234,180,283,69,283)"
},
{
"content": "Smith",
"span": {
"offset": 5,
"length": 5
},
"confidence": 0.998,
"source": "D(1,200,234,333,234,333,282,200,283)"
},
{
"content": "Email:",
"span": {
"offset": 11,
"length": 6
},
"confidence": 0.995,
"source": "D(1,75,310,165,309,165,340,75,340)"
},
{
"content": "john@contoso.com",
"span": {
"offset": 18,
"length": 16
},
"confidence": 0.977,
"source": "D(1,179,309,458,311,458,340,179,341)"
}
],
"lines": [
{
"content": "John Smith",
"source": "D(1,69,234,333,233,333,282,69,282)",
"span": {
"offset": 0,
"length": 10
}
},
{
"content": "Email: john@contoso.com",
"source": "D(1,75,309,458,309,458,340,75,340)",
"span": {
"offset": 11,
"length": 23
}
}
]
}
],
"paragraphs": [
{
"content": "John Smith Email: john@contoso.com",
"source": "D(1,69,233,458,233,458,340,69,340)",
"span": {
"offset": 0,
"length": 34
}
}
],
"sections": [
{
"span": {
"offset": 0,
"length": 34
},
"elements": [
"/paragraphs/0"
]
}
]
}
]
}
}
Votre application doit généralement analyser le json pour récupérer les valeurs de champ. Par exemple, le code Python suivant extrait toutes les valeurs de chaîne :
# (continued from previous code example)
# Iterate through the fields and extract the names and type-specific values
contents = result_json["result"]["contents"]
for content in contents:
if "fields" in content:
fields = content["fields"]
for field_name, field_data in fields.items():
if field_data['type'] == "string":
print(f"{field_name}: {field_data['valueString']}")
La sortie de ce code est illustrée ici :
ContactName: John Smith
EmailAddress: john@contoso.com