Analysieren von Inhalten

Abgeschlossen

Um den Inhalt einer Datei zu analysieren, können Sie die REST-API von Azure Content Understanding verwenden, um sie mithilfe einer POST Anforderung an den Endpunkt zu übermitteln. Sie können den Inhalt als URL (für eine in einem Internet zugängliche Datei) oder als binären Inhalt der Datei angeben (z. B. ein .pdf Dokument, ein .png Bild, eine .mp3 Audiodatei oder eine .mp4 Videodatei). Der Anforderungsheader muss den API-Schlüssel enthalten, und die Endpunktadresse für die Analyseanforderung enthält die zu verwendende Analyse.

Wie bei der Anforderung zum Erstellen eines Analyzers startet die Analyseanforderung einen asynchronen Vorgang. Die POST Anforderung gibt eine eindeutige Vorgangs-ID zurück, die Sie dann in einer GET Anforderung verwenden können, um den Status des Analysevorgangs zu überprüfen.

Angenommen, Sie möchten den zuvor erläuterten Visitenkartenanalysator verwenden, um den Namen und die E-Mail-Adresse aus dem im Folgenden gescannten Visitenkartenbild zu extrahieren.

Foto einer Visitenkarte für John Smith.

Der folgende Python-Code sendet eine Anforderung für die Analyse und fragt dann den Dienst ab, bis der Vorgang abgeschlossen ist und die Ergebnisse zurückgegeben werden.

import json
import requests

# Read the image data
with open("business-card.png", "rb") as file:
        image_data = file.read()
    
## Use a POST request to submit the image data to the analyzer
analyzer_name = "business_card_analyser"

headers = {
        "Ocp-Apim-Subscription-Key": "<YOUR_API_KEY>",
        "Content-Type": "application/octet-stream"}

url = f"{<YOUR_ENDPOINT>}/contentunderstanding/analyzers/{analyzer_name}:analyze?api-version=2025-05-01-preview"

response = requests.post(url, headers=headers, data=image_data)

# 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-05-01-preview"

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


Verarbeiten von Analyseergebnissen

Die Ergebnisse im Antwort-JSON hängen von:

  • Die Art von Inhalten, die der Analyzer analysieren soll (z. B. Dokument, Video, Bild oder Audio).
  • Das Schema für den Analysator.
  • Der Inhalt der datei, die analysiert wurde.

Beispielsweise enthält die Antwort des dokumentbasierten Visitenkartenanalysators bei der Analyse der zuvor beschriebenen Visitenkarte die folgenden Angaben:

  • Die extrahierten Felder
  • Das Layout der optischen Zeichenerkennung (OCR) des Dokuments, einschließlich der Positionen von Textzeilen, einzelnen Wörtern und Absätzen auf jeder Seite.

Hier ist die vollständige JSON-Antwort für die Visitenkartenanalyse:

{
    "id": "00000000-0000-0000-0000-a00000000000",
    "status": "Succeeded",
    "result": {
        "analyzerId": "biz_card_analyser_2",
        "apiVersion": "2025-05-01-preview",
        "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"
                        ]
                    }
                ]
            }
        ]
    }
}

Ihre Anwendung muss den JSON-Code in der Regel analysieren, um Feldwerte abzurufen. Der folgende Python-Code extrahiert beispielsweise alle Zeichenfolgenwerte :

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

Die Ausgabe dieses Codes wird hier gezeigt:

ContactName: John Smith
EmailAddress: john@contoso.com