Umiejętność poznawcza analizy obrazów

Note

Wyszukiwanie AI platformy Azure jest dostępna za pośrednictwem portalu Azure, interfejsów API REST i Azure SDKs. Stanowi ona również podstawę IQ rozwiązania Foundry, zarządzanej warstwy wiedzy, która przekształca zawartość przedsiębiorstwa w bazy wiedzy wielokrotnego użytku, uwzględniające uprawnienia dla agentów w portalu Microsoft Foundry.

Umiejętność analizy obrazów wydobywa bogaty zestaw cech wizualnych na podstawie treści obrazu. Na przykład możesz wygenerować podpis na podstawie obrazu, wygenerować tagi lub zidentyfikować celebrytów i punkty orientacyjne. Ten artykuł jest dokumentacją referencyjną dla umiejętności analizy obrazów . Zobacz Extract text and information from images , aby uzyskać instrukcje użycia.

Ta umiejętność wykorzystuje modele uczenia maszynowego oferowane przez Azure Vision w Foundry Tools. Analiza obrazów pracuje na obrazach spełniających następujące wymagania:

  • Obraz musi być prezentowany w formatach JPEG, PNG, GIF lub BMP
  • Rozmiar pliku obrazu musi być mniejszy niż 4 megabajty (MB)
  • Wymiary obrazu muszą przekraczać 50 x 50 pikseli

Obsługiwane źródła danych do analizy OCR i obrazów to bloby w Azure Blob Storage i Azure Data Lake Storage (ADLS) Gen2 oraz zawartość obrazów w Microsoft OneLake. Obrazy mogą być samodzielnymi plikami lub osadzonymi obrazami w formacie PDF lub innych plikach.

Ta umiejętność jest implementowana za pomocą API AI Image Analysis w wersji 3.2. Jeśli twoje rozwiązanie wymaga wywołania nowszej wersji tego interfejsu API usługi, takiej jak wersja 4.0, rozważ wdrożenie za pomocą umiejętności niestandardowego internetowego interfejsu API.

Note

Ta umiejętność jest powiązana z Foundry Tools i wymaga rozliczalnego zasobu dla transakcji przekraczających 20 dokumentów na indeksującego dziennie. Wykonanie wbudowanych umiejętności jest naliczane za istniejącą cenę standardową narzędzi Foundry Tools.

Dodatkowo, ekstrakcja obrazów jest rozliczalna przez Wyszukiwanie AI platformy Azure.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Parametry umiejętności

W parametrach jest rozróżniana wielkość liter.

Nazwa parametru Opis
defaultLanguageCode Ciąg wskazujący język do zwrotu. Usługa zwraca rozpoznanie w określonym języku. Jeśli ten parametr nie jest określony, domyślną wartością jest "en".

Obsługiwane języki obejmują podzbiór ogólnie dostępnych języków Azure Vision. Gdy język jest nowo wprowadzany do Azure Vision o statusie ogólnej dostępności, spodziewane jest opóźnienie, zanim zostanie w pełni zintegrowany z tą umiejętnością.
visualFeatures Tablica ciągów znaków wskazujących typy cech wizualnych do zwrócenia. Ważne typy cech wizualnych obejmują:
  • Dorosły – wykrywa, czy obraz jest pornograficzny (przedstawia nagość lub akt seksualny), krwawy (pokazuje skrajną przemoc lub krew) lub sugestywny (znany również jako treści pikantne).
  • Brands - wykrywa różne marki na obrazie, w tym przybliżoną lokalizację.
  • kategorie – kategoryzuje treści obrazowe według taksonomii zdefiniowanej przez Foundry Tools.
  • Opis - Opisuje treść obrazu z pełnym zdaniem w obsługiwanych językach.
  • Twarze – wykrywa, czy twarze są obecne. Jeśli są obecne, generuje współrzędne, płeć i wiek.
  • obiekty - wykrywa różne obiekty na obrazie, w tym przybliżoną lokalizację.
  • Tagi – Oznaczają obraz szczegółową listą słów związanych z treścią obrazu.
Nazwy cech wizualnych są zależne od małych liter. Zarówno funkcje kolorowe , jak i visualowe typu obrazów zostały wycofane, ale możesz uzyskać do nich dostęp dzięki niestandardowej umiejętności. Zapoznaj się z dokumentacją Azure Vision Image Analysis w której cechy wizualne są obsługiwane przy każdym defaultLanguageCode.
details Tablica ciągów znaków wskazujących, które dane dane domenowe należy zwracać. Ważne typy cech wizualnych obejmują:
  • Celebryci – rozpoznają celebrytów, jeśli zostaną wykryte na zdjęciu.
  • Punkty orientacyjne – Identyfikuje punkty orientacyjne, jeśli są wykryte na obrazie.

Dane wejściowe dla umiejętności

Nazwa danych wejściowych Opis
image Typ złożony. Obecnie działa tylko z polem "/document/normalized_images", generowanym przez indeksator Azure blobów, gdy imageAction jest ustawione na wartość inną niż none.

Dane wyjściowe umiejętności

Nazwa danych wyjściowych Opis
adult Wyjściem jest pojedynczy dorosły obiekt typu zespolonego, składający się z pól boole'owych (isAdultContent, isGoryContent, ) isRacyContentoraz podwójnych wyników typu (adultScore, goreScore, ). racyScore
brands Output to tablica obiektów marki , gdzie obiekt jest typem złożonym składającym się z name (string) i confidence wyniku (double). Zwraca także a rectangle z czterema współrzędnymi ograniczającymi (x, y, w, h, w pikselach) wskazującymi położenie wewnątrz obrazu. Dla prostokąta x i y są w lewym górnym rogu. W lewym xdolnym rogu , y+h. W prawym górnym rogu x+wjest , y. W prawym x+wdolnym rogu jest , y+h.
categories Wyjście to tablica obiektów kategorii , gdzie każdy obiekt kategorii to typ złożony składający się z name (string), score (double) oraz opcjonalnie detail , zawierający szczegóły celebryty lub punktu orientacyjnego. Zobacz taksonomię kategorii , aby poznać pełną listę nazw kategorii. Detal to typ zagnieżdżonego złożonego. Szczegół celebryty składa się z imienia, oceny pewności siebie oraz ramki z ograniczeniem twarzy. Szczegół charakterystyczny składa się z imienia i oceny pewności.
description Wyjście to pojedynczy obiekt opisu typu zespolonego, składający się z list tags i ( caption tablica składająca się z Text (string) oraz confidence (double)).
faces Typ zespolony składający się z age, gender, i faceBoundingBox posiadający cztery współrzędne ramek ograniczających (w pikselach) wskazujące położenie wewnątrz obrazu. Współrzędne to top, left, width, . height
objects Wyjście to tablica obiektów cech wizualnych. Każdy obiekt jest typem zespolonym, składającym się z object (string), confidence (double), rectangle (z czterema współrzędnymi ograniczającymi wskazującymi położenie wewnątrz obrazu) oraz a parent zawierającym nazwę obiektu i pewność .
tags Wyjście to tablica obiektów imageTag , gdzie obiekt tag to typ złożony składający się z name (string), hint (string) oraz confidence (double). Dodanie wskazówki jest rzadkie. Generuje się tylko wtedy, gdy tag jest niejednoznaczny. Na przykład obraz oznaczony jako "curling" może zawierać nutę "sport", aby lepiej zaznaczyć jego treść.

Przykładowa definicja umiejętności

{
    "description": "Extract image analysis.",
    "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
    "context": "/document/normalized_images/*",
    "defaultLanguageCode": "en",
    "visualFeatures": [
        "adult",
        "brands",
        "categories",
        "description",
        "faces",
        "objects",
        "tags"
    ],
    "inputs": [
        {
            "name": "image",
            "source": "/document/normalized_images/*"
        }
    ],
    "outputs": [
        {
            "name": "adult"
        },
        {
            "name": "brands"
        },
        {
            "name": "categories"
        },
        {
            "name": "description"
        },
        {
            "name": "faces"
        },
        {
            "name": "objects"
        },
        {
            "name": "tags"
        }
    ]
}

Przykładowy indeks

Dla pojedynczych obiektów (takich jak adult i description), możesz je strukturyzować w indeksie jako Collection(Edm.ComplexType) a to return adult i description output dla wszystkich. Więcej informacji o mapowaniu wyników na pola indeksowe można znaleźć w artykule Spłaszczanie informacji z typów zespolonych.

{
    "fields": [
        {
            "name": "metadata_storage_name",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "metadata_storage_path",
            "type": "Edm.String",
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "sortable": false,
            "searchable": true,
            "filterable": false,
            "facetable": false
        },
        {
            "name": "adult",
            "type": "Edm.ComplexType",
            "fields": [
                {
                    "name": "isAdultContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isGoryContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isRacyContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "adultScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "goreScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "racyScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        },
        {
            "name": "brands",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "categories",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "score",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "detail",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "celebrities",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "faceBoundingBox",
                                    "type": "Collection(Edm.ComplexType)",
                                    "fields": [
                                        {
                                            "name": "x",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        },
                                        {
                                            "name": "y",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        }
                                    ]
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        },
                        {
                            "name": "landmarks",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "description",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "tags",
                    "type": "Collection(Edm.String)",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "captions",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "text",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "faces",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "age",
                    "type": "Edm.Int32",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "gender",
                    "type": "Edm.String",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "faceBoundingBox",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "top",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "left",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "width",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "height",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "objects",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "object",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                },
                {
                    "name": "parent",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "object",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "tags",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "hint",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        }
    ]
}

Mapowanie pola wyjściowego próbki

Pole docelowe może być złożonym polem lub zbiorem. Definicja indeksu określa dowolne podpola.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/adult",
        "targetFieldName": "adult"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/brands/*",
        "targetFieldName": "brands"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/*",
        "targetFieldName": "categories"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/description",
        "targetFieldName": "description"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/faces/*",
        "targetFieldName": "faces"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/objects/*",
        "targetFieldName": "objects"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/tags/*",
        "targetFieldName": "tags"
    }

Warianty odwzorowań pól wyjściowych (właściwości zagnieżdżone)

Możesz zdefiniować mapowania pól wyjściowych do niższych obiektów, takich jak tylko celebryci czy punkty orientacyjne. W takim przypadku upewnij się, że schemat indeksu ma pole zawierające każdy szczegół konkretnie.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/celebrities/*",
        "targetFieldName": "celebrities"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/landmarks/*",
        "targetFieldName": "landmarks"
    }

Przykładowe dane wejściowe

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

Przykładowe dane wyjściowe

{
  "values": [
    {
      "recordId": "1",
      "data": {
        "categories": [
          {
            "name": "abstract_",
            "score": 0.00390625
          },
          {
            "name": "people_",
            "score": 0.83984375,
            "detail": {
              "celebrities": [
                {
                  "name": "Satya Nadella",
                  "faceBoundingBox": [
                        {
                            "x": 273,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 431
                        },
                        {
                            "x": 273,
                            "y": 431
                        }
                    ],
                  "confidence": 0.999028444
                }
              ],
              "landmarks": [ ]
            }
          }
        ],
        "adult": {
          "isAdultContent": false,
          "isRacyContent": false,
          "isGoryContent": false,
          "adultScore": 0.0934349000453949,
          "racyScore": 0.068613491952419281,
          "goreScore": 0.08928389008070282
        },
        "tags": [
          {
            "name": "person",
            "confidence": 0.98979085683822632
          },
          {
            "name": "man",
            "confidence": 0.94493889808654785
          },
          {
            "name": "outdoor",
            "confidence": 0.938492476940155
          },
          {
            "name": "window",
            "confidence": 0.89513939619064331
          }
        ],
        "description": {
          "tags": [
            "person",
            "man",
            "outdoor",
            "window",
            "glasses"
          ],
          "captions": [
            {
              "text": "Satya Nadella sitting on a bench",
              "confidence": 0.48293603002174407
            }
          ]
        },
        "faces": [
          {
            "age": 44,
            "gender": "Male",
            "faceBoundingBox": [
                {
                    "x": 1601,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 447
                },
                {
                    "x": 1601,
                    "y": 447
                }
            ]
          }
        ],
        "objects": [
          {
            "rectangle": {
              "x": 25,
              "y": 43,
              "w": 172,
              "h": 140
            },
            "object": "person",
            "confidence": 0.931
          }
        ],
        "brands":[  
           {  
              "name":"Microsoft",
              "confidence": 0.903,
              "rectangle":{  
                 "x":20,
                 "y":97,
                 "w":62,
                 "h":52
              }
           }
        ]
      }
    }
  ]
}

Przypadki błędów

W poniższych przypadkach błędów nie są wyodrębniane żadne elementy.

Kod błędu Opis
NotSupportedLanguage Podana sformułowanie nie jest wspierane.
InvalidImageUrl URL obrazu jest źle sformatowany lub niedostępny.
InvalidImageFormat Dane wejściowe nie są poprawnym obrazem.
InvalidImageSize Obraz wejściowy jest za duży.
NotSupportedVisualFeature Określony typ funkcji nie jest poprawny.
NotSupportedImage Na przykład niepoparte obrazy, pornografia dziecięca.
InvalidDetails Nieobsługiwany model specyficzny dla domeny.

Jeśli pojawi się błąd podobny do "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", sprawdź ścieżkę. Zarówno celebryci, jak i zabytki należą do nieruchomości podlegających .detail

"categories":[  
      {  
         "name":"building_",
         "score":0.97265625,
         "detail":{  
            "landmarks":[  
               {  
                  "name":"Forbidden City",
                  "confidence":0.92013400793075562
               }
            ]

Zobacz także