Generowanie podpisów dla obrazów w innym języku

Uwaga

Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Jest także podstawą Foundry IQ — zarządzanej warstwy wiedzy, która przekształca treści przedsiębiorstwa w bazy wiedzy wielokrotnego użytku z uwzględnieniem uprawnień dla agentów w portalu Microsoft Foundry.

Ważna

Te funkcje i możliwości obsługują połączenia z innymi usługami firmy Microsoft i usługami innych firm. Korzystanie z tych usług podlega odpowiednim warunkom i może spowodować przetwarzanie lub przechowywanie danych poza granicą zgodności Azure, a także dane przepływające do granicy zgodności Azure.

Do Ciebie należy decydowanie o tym, czy dane będą przepływać poza granice zgodności i granice geograficzne organizacji, oraz o wszelkich związanych z tym konsekwencjach, a także zapewnienie odpowiednich uprawnień, ograniczeń i zatwierdzeń.

Odpowiadasz za staranne przeglądanie i testowanie aplikacji, które tworzysz w kontekście konkretnych przypadków użycia, oraz podejmowanie wszelkich odpowiednich decyzji i dostosowań. Obejmuje to implementowanie własnych odpowiedzialnych środków zaradczych dotyczących sztucznej inteligencji, takich jak metaprompty, filtry zawartości lub inne systemy bezpieczeństwa oraz zapewnienie, że aplikacje spełniają odpowiednią jakość, niezawodność, bezpieczeństwo i standardy wiarygodności. Aby uzyskać więcej informacji, zobacz Wyszukiwanie AI platformy Azure Transparency Note.

Z tego artykułu dowiesz się, jak generować podpisy przy użyciu wzbogacania sztucznej inteligencji i zestawu umiejętności. Obrazy często zawierają przydatne informacje istotne w scenariuszach wyszukiwania. Obrazy można wektorować w celu reprezentowania zawartości wizualnej w indeksie wyszukiwania. Możesz też skorzystać z wzbogacania AI i umiejętności, aby tworzyć i wyodrębniać wyszukiwalny tekst z obrazów.

Umiejętność GenAI Prompt może wygenerować opis każdego obrazu w źródle danych, a indeksator wypycha ten opis do indeksu wyszukiwania. Aby wyświetlić opisy, uruchom zapytanie zawierające je w odpowiedzi.

Wymagania wstępne

Aby pracować z zawartością obrazu w zestawie umiejętności, potrzebne są następujące elementy:

  • Obsługiwane źródło danych. Zalecamy Azure Storage.
  • Pliki lub obiekty blob zawierające obrazy.
  • Prawo do odczytu z obsługiwanego źródła danych. W tym artykule stosuje się uwierzytelnianie kluczowe, ale indeksatory mogą również łączyć się za pomocą tożsamości usługi wyszukiwania i uwierzytelniania Microsoft Entra ID. W przypadku kontroli dostępu opartej na rolach przypisz role w źródle danych, aby zezwolić na dostęp do odczytu przez tożsamość usługi. Jeśli testujesz na lokalnej maszynie deweloperskiej, upewnij się, że masz również dostęp do odczytu w obsługiwanym źródle danych.
  • Indeksator wyszukiwania skonfigurowany dla akcji obrazu.
  • Zestaw kompetencji obejmujący umiejętność GenAI Prompt.
  • Indeks wyszukiwania z polami do odbierania wygenerowanych danych wyjściowych tekstu oraz mapowania pól wyjściowych w indeksatorze, który ustanawia skojarzenia.

Opcjonalnie można zdefiniować projekcje, aby akceptować dane wyjściowe analizowane obrazami w magazynie wiedzy na potrzeby scenariuszy wyszukiwania danych.

Konfigurowanie indeksatorów na potrzeby przetwarzania obrazów

Po skonfigurowaniu plików źródłowych włącz normalizację obrazu, ustawiając imageAction parametr w konfiguracji indeksatora. Normalizacja obrazu pomaga uczynić obrazy bardziej jednolite do przetwarzania podrzędnego. Normalizacja obrazu obejmuje następujące operacje:

  • Rozmiar dużych obrazów jest zmieniany na maksymalną wysokość i szerokość, aby były jednolite.
  • W przypadku obrazów, które mają metadane określające orientację, rotacja obrazu jest dostosowywana do ładowania w pionie.

Należy pamiętać, że włączenie imageAction (ustawienie tego parametru na inny niż none) spowoduje naliczenie dodatkowej opłaty za wyodrębnianie obrazów zgodnie z cennikiem Wyszukiwanie AI platformy Azure.

  1. Utwórz lub zaktualizuj indeksator , aby ustawić właściwości konfiguracji:

    {
      "parameters": {
        "configuration": {
          "dataToExtract": "contentAndMetadata",
          "parsingMode": "default",
          "imageAction": "generateNormalizedImages"
        }
      }
    }
    
  2. Ustaw dataToExtract na contentAndMetadata (wymagane).

  3. Najpierw sprawdź, czy element parsingMode jest ustawiony na wartość domyślną (wymagana).

    Ten parametr określa stopień szczegółowości dokumentów wyszukiwania utworzonych w indeksie. Tryb domyślny konfiguruje korespondencję jeden do jednego, aby jeden obiekt blob był wynikiem jednego dokumentu wyszukiwania. Jeśli dokumenty są duże lub jeśli umiejętności wymagają mniejszych fragmentów tekstu, możesz dodać umiejętność dzielenia tekstu, która dzieli dokument na stronicowanie na potrzeby przetwarzania. Jednak w scenariuszach wyszukiwania wymagany jest jeden blob na dokument, jeśli wzbogacenie obejmuje przetwarzanie obrazów.

  4. Ustaw imageAction aby włączyć węzeł normalized_images w drzewie wzbogacającym (wymagane):

    • generateNormalizedImages w celu wygenerowania tablicy znormalizowanych obrazów w ramach odszyfrowywania dokumentów.

    • generateNormalizedImagePerPage (dotyczy tylko formatu PDF) w celu wygenerowania tablicy znormalizowanych obrazów, na których każda strona w pliku PDF jest renderowana do jednego obrazu wyjściowego. W przypadku plików innych niż PDF zachowanie tego parametru jest podobne jak w przypadku ustawienia parametru generateNormalizedImages. Jednak ustawienie generateNormalizedImagePerPage może sprawić, że operacja indeksowania będzie mniej wydajna zgodnie z projektem (szczególnie w przypadku dużych dokumentów), ponieważ trzeba wygenerować kilka obrazów.

  5. Opcjonalnie dostosuj szerokość lub wysokość wygenerowanych znormalizowanych obrazów:

normalizedImageMaxWidth jest mierzona w pikselach. Wartość domyślna to 2000. Wartość maksymalna to 10 000.

normalizedImageMaxHeight jest mierzona w pikselach. Wartość domyślna to 2000. Wartość maksymalna to 10 000.

Informacje o znormalizowanych obrazach

Gdy imageAction jest ustawiony na wartość inną niż żadna, nowe normalized_images pole zawiera tablicę obrazów. Każdy obraz jest typem złożonym, który ma następujące składowe.

Członek obrazu Opis
dane Ciąg znaków w kodowaniu BASE64 przedstawiający znormalizowany obraz w formacie JPEG.
Szerokość Szerokość znormalizowanego obrazu w pikselach.
Wysokość Wysokość znormalizowanego obrazu w pikselach.
oryginalnaSzerokość Oryginalna szerokość obrazu przed normalizacją.
oryginalnaWysokość Oryginalna wysokość obrazu przed normalizacją.
rotacjaOdOryginału Obrót w przeciwnym do kierunku wskazówek zegara w stopniach, który wystąpił w celu utworzenia znormalizowanego obrazu. Wartość z zakresu od 0 stopni do 360 stopni. Ten krok odczytuje metadane z obrazu wygenerowanego przez aparat lub skaner. Zwykle wielokrotność 90 stopni.
contentOffset Pozycja znaku w polu treści, z którego wyodrębniono obraz. To pole dotyczy tylko plików z obrazami osadzonymi. Element contentOffset dla obrazów wyodrębnionych z dokumentów PDF jest zawsze na końcu tekstu na stronie, na której został wyodrębniony w dokumencie. Oznacza to, że obrazy są wyświetlane po całym tekście na tej stronie, niezależnie od oryginalnej lokalizacji obrazu na stronie.
Numer strony Jeśli obraz został wyodrębniony lub renderowany z pliku PDF, to pole zawiera numer strony w pliku PDF, z którego został wyodrębniony lub renderowany, począwszy od 1. Jeśli obraz nie pochodzi z pliku PDF, to pole ma wartość 0.

Przykładowa wartość :normalized_images

[
  {
    "data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
    "width": 500,
    "height": 300,
    "originalWidth": 5000,  
    "originalHeight": 3000,
    "rotationFromOriginal": 90,
    "contentOffset": 500,
    "pageNumber": 2
  }
]

Definiowanie zestawów umiejętności na potrzeby przetwarzania obrazów

Ta sekcja uzupełnia artykuły referencyjne dotyczące umiejętności , zapewniając kontekst pracy z danymi wejściowymi umiejętności, danymi wyjściowymi i wzorcami, ponieważ odnoszą się one do przetwarzania obrazów.

  • Utwórz lub zaktualizuj zestaw umiejętności, aby dodać umiejętności.

Po utworzeniu podstawowej struktury zestawu umiejętności i skonfigurowaniu narzędzi Foundry, można skoncentrować się na poszczególnych umiejętnościach obrazu, zdefiniowaniu danych wejściowych, kontekstu źródłowego oraz mapowaniu danych wyjściowych na odpowiednie pola w indeksie lub magazynie wiedzy.

Uwaga

Przykładowy zestaw umiejętności, który łączy przetwarzanie obrazów z dalszym przetwarzaniem języka naturalnego, patrz Samouczek REST: Korzystanie z REST i sztucznej inteligencji do generowania przeszukiwalnej zawartości z obiektów blob Azure. Przedstawia on sposób podawania danych wyjściowych obrazu umiejętności do rozpoznawania jednostek i wyodrębniania kluczowych fraz.

Przykładowe dane wejściowe do przetwarzania obrazów

Jak wspomniano, obrazy są wyodrębniane podczas rozbiórki dokumentu, a następnie znormalizowane jako wstępny etap. Znormalizowane obrazy są danymi wejściowymi dowolnej umiejętności przetwarzania obrazów i są zawsze reprezentowane w wzbogaconym drzewie dokumentów na jeden z dwóch sposobów:

  • /document/normalized_images/* jest przeznaczony dla dokumentów, które są przetwarzane w całości.
{
  "@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
  "context": "/document/normalized_images/*",
  "uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
  "apiKey": "<YOUR-API-KEY here>",
  "inputs": [
    {
      "name": "image",
      "source": "/document/normalized_images/*/data"
    },
    {
      "name": "systemMessage",
      "source": "='You are a useful artificial intelligence assistant that helps people.'"
    },
    {
      "name": "userMessage",
      "source": "='Describe what you see in this image in 20 words or less in Spanish.'"
    }
  ],
  "outputs": [
    {
      "name": "response",
      "targetName": "captionedImage"
    }
  ]
}

Przykład użycia odpowiedzi schematu JSON z tekstowymi danymi wejściowymi

W tym przykładzie pokazano, jak używać danych wyjściowych ze strukturą dla modeli językowych. Ta funkcja jest obecnie obsługiwana głównie przez modele języków OpenAI, chociaż może to ulec zmianie w przyszłości.

{
  "@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
  "context": "/document/content",
  "uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
  "apiKey": "<YOUR-API-KEY here>",
  "inputs": [
    {
      "name": "systemMessage",
      "source": "='You are a useful artificial intelligence assistant that helps people.'"
    },
    {
      "name": "userMessage",
      "source": "='How many languages are there in the world and what are they?'"
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "structured_output",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "total",
          "languages"
        ],
        "additionalProperties": false
      }
    }
  },
  "outputs": [
    {
      "name": "response",
      "targetName": "responseJsonForLanguages"
    }
  ]
}

Mapowanie danych wyjściowych na pola wyszukiwania

Tekst wyjściowy jest reprezentowany jako węzły w wewnętrznym wzbogaconym drzewie dokumentów, a każdy węzeł musi być mapowany na pola w indeksie wyszukiwania lub do projekcji w magazynie wiedzy, aby udostępnić zawartość w aplikacji.

Najpierw użyj polecenia Create or Update — Index (Tworzenie lub aktualizowanie — indeks ), aby dodać pola w celu zaakceptowania danych wyjściowych umiejętności.

W przykładzie kolekcji pól poniżej:

  • content to zawartość obiektu blob.
  • metadata_storage_name zawiera nazwę pliku (ustawioną retrievable na true).
  • metadata_storage_path jest unikatową ścieżką obiektu blob i jest domyślnym kluczem dokumentu.
  • merged_content to wynik scalania tekstu (przydatne, gdy obrazy są osadzone).
  • captioned_image jest wynikiem umiejętności i musi być polem ciągu, aby przechwycić wszystkie dane wyjściowe modelu językowego w indeksie wyszukiwania.
"fields": [
  {
    "name": "content",
    "type": "Edm.String",
    "filterable": false,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  },
  {
    "name": "metadata_storage_name",
    "type": "Edm.String",
    "filterable": true,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  },
  {
    "name": "metadata_storage_path",
    "type": "Edm.String",
    "filterable": false,
    "key": true,
    "retrievable": true,
    "searchable": false,
    "sortable": false
  },
  {
    "name": "captioned_image",
    "type": "Edm.String",
    "filterable": false,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  }
]

Następnie użyj polecenia Update - Indexer, aby przypisać dane wyjściowe zestawu umiejętności (węzły w drzewie wzbogacania) do pól indeksu.

Wzbogacone dokumenty są wewnętrzne. Aby wyeksportować węzły w wzbogaconym drzewie dokumentów, skonfiguruj mapowanie pól wyjściowych, które określa, do którego pola indeksu trafia zawartość węzła. Wzbogacone dane są uzyskiwane przez aplikację za pośrednictwem pola indeksu. Poniższy przykład przedstawia węzeł tekstowy (dane wyjściowe OCR) w wzbogaconym dokumencie mapowanym na pole tekstowe w indeksie wyszukiwania.

"outputFieldMappings": [
  {
    "sourceFieldName": "/document/normalized_images/*/captionedImage",
    "targetFieldName": "captioned_image"
  }
]

Uruchom indeksator, aby wywołać pobieranie dokumentu źródłowego, przetwarzanie obrazów za pomocą podpisów modelu języka i indeksowanie.

Weryfikowanie wyników

Uruchom zapytanie względem indeksu, aby sprawdzić wyniki przetwarzania obrazów. Użyj Eksploratora wyszukiwania jako klienta wyszukiwania lub dowolnego narzędzia wysyłającego żądania HTTP. Poniższe zapytanie wybiera pola zawierające dane wyjściowe przetwarzania obrazów.

POST /indexes/[index name]/docs/search?api-version=[api-version]
{
  "search": "A cat in a picture",
  "select": "metadata_storage_name, captioned_image"
}