Analizowanie zawartości

Ukończone

Aby przeanalizować zawartość pliku, możesz użyć interfejsu API REST usługi Azure Content Understanding, aby przesłać go do punktu końcowego POST przy użyciu żądania. Zawartość można określić jako adres URL (dla pliku hostowanego w lokalizacji dostępnej z Internetu) lub jako zawartość binarną pliku (na przykład dokument .pdf, obraz .png, plik audio .mp3 lub plik wideo .mp4). Nagłówek żądania musi zawierać klucz interfejsu API, a adres punktu końcowego dla żądania analizy zawiera analizator do użycia.

Podobnie jak w przypadku żądania utworzenia analizatora, żądanie analizy uruchamia operację asynchroniczną. Żądanie POST zwraca unikatowy identyfikator operacji, którego następnie można użyć w GET żądaniu, aby sprawdzić stan operacji analizy.

Załóżmy na przykład, że chcesz użyć analizatora wizytówek omówionego wcześniej w celu wyodrębnienia nazwy i adresu e-mail z następującego zeskanowanego obrazu wizytówki:

Zdjęcie wizytówki Johna Smitha.

Poniższy kod języka Python przesyła żądanie analizy, a następnie sonduje usługę do momentu zakończenia operacji i zwraca wyniki.

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


Przetwarzanie wyników analizy

Wyniki w formacie JSON odpowiedzi zależą od:

  • Rodzaj zawartości analizatora jest przeznaczony do analizowania (na przykład dokumentu, wideo, obrazu lub dźwięku).
  • Schemat analizatora.
  • Zawartość przeanalizowanego pliku.

Na przykład odpowiedź z analizatora wizytówek działającego na podstawie dokumentu podczas analizowania wizytówki opisanej wcześniej zawiera:

  • Wyodrębnione pola
  • Układ optycznego rozpoznawania znaków (OCR) dokumentu, w tym lokalizacje wierszy tekstu, pojedynczych wyrazów i akapitów na każdej stronie.

Oto kompletna odpowiedź JSON na potrzeby analizy wizytówek:

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

Aplikacja musi zwykle analizować dane JSON, aby pobrać wartości pól. Na przykład poniższy kod języka Python wyodrębnia wszystkie wartości ciągu :

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

Dane wyjściowe z tego kodu są wyświetlane tutaj:

ContactName: John Smith
EmailAddress: john@contoso.com