Umiejętność poznawcza analizy obrazów

Umiejętność Analiza obrazów wyodrębnia bogaty zestaw funkcji wizualnych na podstawie zawartości obrazu. Można na przykład wygenerować podpis na podstawie obrazu, wygenerować tagi lub zidentyfikować osobistości i punkty orientacyjne. Ten artykuł zawiera dokumentację referencyjną umiejętności analizy obrazów. Aby uzyskać instrukcje użycia, zobacz Wyodrębnianie tekstu i informacji z obrazów .

Ta umiejętność korzysta z modeli uczenia maszynowego udostępnianych przez usługę Azure AI Vision w usługach azure AI. Analiza obrazu działa w przypadku obrazów, które spełniają następujące wymagania:

  • Obraz musi być przedstawiony w formacie JPEG, PNG, GIF lub BMP
  • Rozmiar pliku obrazu musi być mniejszy niż 4 megabajty (MB)
  • Wymiary obrazu muszą być większe niż 50x50 pikseli

Ta umiejętność jest implementowana przy użyciu interfejsu API analizy obrazów sztucznej inteligencji w wersji 3.2. Jeśli twoje rozwiązanie wymaga wywołania nowszej wersji tego interfejsu API usługi (na przykład w wersji 4.0), rozważ zaimplementowanie niestandardowej umiejętności interfejsu API sieci Web.

Uwaga

Ta umiejętność jest powiązana z usługami azure AI i wymaga rozliczanego zasobu dla transakcji, które przekraczają 20 dokumentów na indeksator dziennie. Wykonanie wbudowanych umiejętności jest naliczane za istniejące usługi Azure AI z płatnością zgodnie z rzeczywistym użyciem.

Ponadto wyodrębnianie obrazów jest rozliczane za pomocą usługi Azure AI Search.

@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 zwrócenia. Usługa zwraca wyniki rozpoznawania w określonym języku. Jeśli ten parametr nie zostanie określony, wartość domyślna to "en".

Obsługiwane języki obejmują podzbiór ogólnie dostępnych języków usługi Azure AI Vision. Gdy język jest nowo wprowadzony ze stanem ogólnej dostępności w usłudze AI Vision, oczekiwane jest opóźnienie, zanim zostaną one w pełni zintegrowane w ramach tej umiejętności.
visualFeatures Tablica ciągów wskazująca typy funkcji wizualizacji do zwrócenia. Prawidłowe typy funkcji wizualizacji obejmują:
  • dorosły - wykrywa, czy obraz jest pornograficzny (przedstawia nagość lub akt seksualny), gory (przedstawia skrajną przemoc lub krew) lub sugestywne (znane również jako treści rasowe).
  • marki - wykrywa różne marki na obrazie, w tym przybliżoną lokalizację.
  • categories — kategoryzuje zawartość obrazu zgodnie z taksonomią zdefiniowaną przez usługi Azure AI.
  • description — opisuje zawartość obrazu z pełnym zdaniem w obsługiwanych językach.
  • twarze — wykrywa, czy twarze są obecne. Jeśli jest obecny, generuje współrzędne, płeć i wiek.
  • objects — wykrywa różne obiekty na obrazie, w tym przybliżoną lokalizację.
  • tags — taguje obraz ze szczegółową listą słów związanych z zawartością obrazu.
W nazwach funkcji wizualizacji jest rozróżniana wielkość liter. Funkcje wizualne color i imageType zostały przestarzałe, ale dostęp do tej funkcji można uzyskać za pomocą umiejętności niestandardowych. Zapoznaj się z dokumentacją analizy obrazów usługi Azure AI Vision, w której funkcje wizualne są obsługiwane w przypadku każdego defaultLanguageCodeelementu .
details Tablica ciągów wskazująca, które szczegóły specyficzne dla domeny mają być zwracane. Prawidłowe typy funkcji wizualizacji obejmują:
  • celebrities — identyfikuje gwiazdy, jeśli zostały wykryte na obrazie.
  • charakterystyczne charakterystyczne charakterystyczne

Dane wejściowe umiejętności

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

Dane wyjściowe umiejętności

Nazwa danych wyjściowych opis
adult Dane wyjściowe to pojedynczy obiekt dla dorosłych typu złożonego, składający się z pól logicznych (isAdultContent, isGoryContent, isRacyContent) i podwójnych wyników typu (adultScore, goreScore, racyScore).
brands Dane wyjściowe to tablica obiektów marki , gdzie obiekt jest typem złożonym składającym się name z (ciągu) i confidence wyniku (dwukrotnie). Zwraca również wartość z czterema współrzędnymi rectangle pola ograniczenia (x, y, , wh, w pikselach) wskazującymi umieszczenie wewnątrz obrazu. W przypadku prostokąta x i y są w lewym górnym rogu. Lewy dolny to x, y+h. W prawym górnym rogu znajduje się x+w. y Prawy dolny to x+w, y+h.
categories Dane wyjściowe to tablica obiektów kategorii, gdzie każdy obiekt kategorii jest typem złożonym składającym się z name (ciągu), score (podwójne) i opcjonalnego detail zawierającego szczegóły osobistości lub punktów orientacyjnych. Zobacz taksonomię kategorii, aby uzyskać pełną listę nazw kategorii. Szczegół jest zagnieżdżonym typem złożonym. Szczegóły osobistości składają się z nazwy, wyniku ufności i pola ograniczenia twarzy. Punkt orientacyjny składa się z nazwy i współczynnika ufności.
description Dane wyjściowe to pojedynczy obiekt opisu typu złożonego, składający się z list tags i caption (tablica składająca się z Text (ciąg) i confidence (double)).
faces Typ złożony składający się z age, genderi faceBoundingBox o czterech współrzędnych pola ograniczenia (w pikselach) wskazujących położenie wewnątrz obrazu. Współrzędne to top, , leftwidth, height.
objects Dane wyjściowe to tablica obiektów funkcji wizualizacji. Każdy obiekt jest typem złożonym, składającym się z object (ciągu), confidence (podwójnej), rectangle (z czterema współrzędnymi pola ograniczenia wskazującymi położenie wewnątrz obrazu) oraz elementem parent zawierającym nazwę obiektu i pewność siebie .
tags Dane wyjściowe to tablica obiektów imageTag , gdzie obiekt tagu jest typem złożonym składającym się z name (ciągu), hint (ciągu) i confidence (double). Dodanie wskazówki jest rzadkie. Jest generowany tylko wtedy, gdy tag jest niejednoznaczny. Na przykład obraz oznaczony jako "curling" może mieć wskazówkę "sportu", aby lepiej wskazać jego zawartość.

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

W przypadku pojedynczych obiektów (takich jak adult i description) można utworzyć ich strukturę w indeksie, Collection(Edm.ComplexType) aby zwracać adult i description zwracać dane wyjściowe dla wszystkich z nich. Aby uzyskać więcej informacji na temat mapowania danych wyjściowych na pola indeksu, zobacz Spłaszczanie informacji z typów złożonych.

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

Przykładowe mapowanie pól wyjściowych

Pole docelowe może być polem złożonym lub kolekcją. Definicja indeksu określa wszystkie pola podrzędne.

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

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

Możesz zdefiniować mapowania pól wyjściowych na właściwości niższego poziomu, takie jak tylko gwiazdy lub punkty orientacyjne. W takim przypadku upewnij się, że schemat indeksu ma pole zawierające poszczególne szczegóły.

"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 następujących przypadkach błędów nie są wyodrębniane żadne elementy.

Kod błędu opis
NotSupportedLanguage Podany język nie jest obsługiwany.
InvalidImageUrl Adres URL obrazu jest nieprawidłowo sformatowany lub niedostępny.
InvalidImageFormat Dane wejściowe nie są prawidłowym obrazem.
InvalidImageSize Obraz wejściowy jest za duży.
NotSupportedVisualFeature Określony typ funkcji jest nieprawidłowy.
NotSupportedImage Nieobsługiwany obraz, na przykład pornografia dziecięca.
InvalidDetails Nieobsługiwany model specyficzny dla domeny.

Jeśli wystąpi 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 gwiazdy, jak i punkty orientacyjne są właściwościami w obszarze detail.

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

Zobacz też