Análisis de contenido

Completado

Sugerencia

Consulte la pestaña Texto e imágenes para obtener más detalles.

Para analizar el contenido de un archivo, puede usar azure Content Understanding API para enviarlo al punto de conexión. Puede especificar el contenido como una dirección URL (para un archivo hospedado en una ubicación accesible a Internet) o cargar datos de archivos binarios directamente (por ejemplo, un documento de .pdf, una imagen de .png, un archivo de audio .mp3 o un archivo de vídeo .mp4). La solicitud de análisis incluye el analizador que se va a usar.

El análisis es una operación asincrónica. Después de enviar la solicitud, recibirá un identificador de operación que puede usar para comprobar el estado y recuperar los resultados cuando se complete la operación.

Por ejemplo, supongamos que desea usar el analizador de tarjetas de presentación descritos anteriormente para extraer el nombre y la dirección de correo electrónico de la siguiente imagen de tarjeta de presentación escaneada:

Fotografía de una tarjeta de presentación para John Smith.

Uso del SDK de Python

El SDK de Python para Content Understanding (azure-ai-contentunderstanding) proporciona una ContentUnderstandingClient clase que simplifica la interacción con el servicio. El SDK controla la autenticación, el formato de solicitud y el sondeo automático para las operaciones asincrónicas.

El siguiente código de Python usa el SDK para enviar una tarjeta de presentación para su análisis y recuperar los resultados:

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

Sugerencia

El método begin_analyze del SDK devuelve un objeto sondeador. Al llamar a .result() en el sondeador, se maneja automáticamente el sondeo hasta que se completa la operación, por lo que no es necesario escribir su propio bucle de sondeo.

Uso de la API REST

También puede enviar solicitudes de análisis directamente mediante la API REST. La aplicación cliente envía llamadas HTTP al punto de conexión de Content Understanding para el recurso de Microsoft Foundry y pasa una clave de API en el encabezado.

El siguiente código de Python envía una solicitud de análisis mediante una dirección URL y, a continuación, sondea el servicio hasta que se completa la operación y se devuelven los resultados.

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


Nota:

Puede especificar una dirección URL para la ubicación del archivo de contenido como se muestra aquí. Para enviar datos de archivos binarios directamente, use la analyzeBinary operación en su lugar.

Procesamiento de los resultados del análisis

Los resultados dependen de:

  • El tipo de contenido que el analizador está diseñado para analizar (por ejemplo, documento, vídeo, imagen o audio).
  • Esquema del analizador.
  • Contenido del archivo que se analizó.

Por ejemplo, la respuesta del analizador de tarjetas de presentación basado en documentos al analizar la tarjeta de presentación descrita anteriormente contiene:

  • Campos extraídos
  • Diseño de reconocimiento óptico de caracteres (OCR) del documento, incluidas las ubicaciones de líneas de texto, palabras individuales y párrafos de cada página.

Uso del SDK de Python

Al usar el SDK, el objeto AnalysisResult proporciona acceso tipado a los resultados. La contents propiedad contiene una lista de objetos de contenido, cada uno con campos, markdown y metadatos. En el código siguiente se muestra cómo extraer valores de campo de cadena:

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

Uso de la API REST

Al usar la API REST, la respuesta es una carga JSON que la aplicación debe analizar. Esta es la respuesta JSON completa para el análisis de tarjetas de presentación:

{
    "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"
                        ]
                    }
                ]
            }
        ]
    }
}

Normalmente, la aplicación debe analizar el JSON para recuperar los valores de campo. Por ejemplo, el siguiente código de Python extrae todos los valores de cadena :

# (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 salida de este código se muestra aquí:

ContactName: John Smith
EmailAddress: john@contoso.com