İçeriği analiz etme

Tamamlandı

Tavsiye

Daha fazla ayrıntı için Metin ve resimler sekmesine bakın!

Bir dosyanın içeriğini analiz etmek için Azure Content Understanding API'sini kullanarak uç noktaya gönderebilirsiniz. İçeriği URL olarak belirtebilir (İnternet'in erişebildiği bir konumda barındırılan bir dosya için) veya ikili dosya verilerini doğrudan yükleyebilirsiniz (örneğin, .pdf belgesi, .png görüntüsü, .mp3 ses dosyası veya .mp4 video dosyası). Analiz isteği, kullanılacak çözümleyiciyi içerir.

Analiz, zaman uyumsuz bir işlemdir. İsteği gönderdikten sonra, durumu denetlemek ve işlem tamamlandığında sonuçları almak için kullanabileceğiniz bir işlem kimliği alırsınız.

Örneğin, aşağıdaki taranan kartvizit görüntüsünden adı ve e-posta adresini ayıklamak için daha önce açıklanan kartvizit çözümleyicisini kullanmak istediğinizi varsayalım:

John Smith'in kartvizitinin fotoğrafı.

Python SDK'yı kullanma

Content Understanding için Python SDK'sı (azure-ai-contentunderstanding), hizmetle etkileşimi basitleştiren bir ContentUnderstandingClient sınıf sağlar. SDK zaman uyumsuz işlemler için kimlik doğrulamasını, istek biçimlendirmesini ve otomatik yoklamayı işler.

Aşağıdaki Python kodu analiz için kartvizit göndermek ve sonuçları almak için SDK'yi kullanır:

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

Tavsiye

SDK'nın begin_analyze yöntemi bir poller nesnesi döndürür. .result()'nin poller üzerinde çağrılması, işlem tamamlanana kadar yoklamayı otomatik olarak yönetir, bu nedenle kendi yoklama döngünüzü yazmanız gerekmez.

REST API'yi kullanma

Rest API'yi kullanarak analiz isteklerini doğrudan da gönderebilirsiniz. İstemci uygulamanız, Microsoft Foundry kaynağınız için Content Understanding uç noktasına HTTP çağrıları gönderir ve üst bilgide bir API anahtarı iletir.

Aşağıdaki Python kodu bir URL kullanarak analiz isteği gönderir ve işlem tamamlanana ve sonuçlar döndürülene kadar hizmeti düzenli olarak sorgular.

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


Uyarı

İçerik dosyası konumu için burada gösterildiği gibi bir URL belirtebilirsiniz. İkili dosya verilerini doğrudan göndermek için bunun yerine işlemini kullanın analyzeBinary .

Analiz sonuçlarını işleme

Sonuçlar aşağıdakilere bağlıdır:

  • Çözümleyicinin analiz etmek için tasarlandığı içerik türü (örneğin, belge, video, görüntü veya ses).
  • Çözümleyici şeması.
  • Analiz edilen dosyanın içeriği.

Örneğin, daha önce açıklanan kartvizit analiz edilirken belge tabanlı kartvizit çözümleyicisinden gelen yanıt şunları içerir:

  • Ayıklanan alanlar
  • Her sayfadaki metin satırlarının, tek tek sözcüklerin ve paragrafların konumları da dahil olmak üzere belgenin optik karakter tanıma (OCR) düzeni.

Python SDK'yı kullanma

SDK kullanılırken AnalysisResult nesnesi sonuçlara doğrulanmış erişim sağlar. contents özelliği, her biri alan, markdown ve meta veri içeren içerik nesnelerinin listesini içerir. Aşağıdaki kodda dize alanı değerlerinin nasıl ayıklanması gösterilmektedir:

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

REST API'yi kullanma

REST API kullanılırken yanıt, uygulamanızın ayrıştırması gereken bir JSON yüküdür. Kartvizit analizi için tam JSON yanıtı aşağıdadır:

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

Uygulamanızın alan değerlerini almak için genellikle JSON'ı ayrıştırması gerekir. Örneğin, aşağıdaki Python kodu tüm dize değerlerini ayıklar:

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

Bu kodun çıktısı burada gösterilmiştir:

ContactName: John Smith
EmailAddress: john@contoso.com