Kognitivní dovednost analýzy obrázků

Dovednost Analýza obrázků extrahuje bohatou sadu vizuálních funkcí na základě obsahu obrázku. Můžete například vygenerovat popis z obrázku, vygenerovat značky nebo identifikovat celebrity a orientační body. Tento článek je referenční dokumentací pro dovednosti analýzy obrázků. Pokyny k použití najdete v tématu Extrakce textu a informací z obrázků .

Tato dovednost využívá modely strojového učení poskytované službou Azure AI Vision ve službách Azure AI. Analýza obrázků funguje jen u obrázků, které vyhovují následujícím požadavkům:

  • Obrázek musí být prezentován ve formátu JPEG, PNG, GIF nebo BMP.
  • Velikost souboru obrázku musí být menší než 4 megabajty (MB).
  • Rozměry obrázku musí být větší než 50 × 50 pixelů

Tato dovednost se implementuje pomocí rozhraní API pro analýzu obrázků AI verze 3.2. Pokud vaše řešení vyžaduje volání novější verze tohoto rozhraní API služby (například verze 4.0), zvažte implementaci prostřednictvím vlastní dovednosti webového rozhraní API.

Poznámka:

Tato dovednost je vázána na služby Azure AI a vyžaduje fakturovatelný prostředek pro transakce, které překračují 20 dokumentů na indexer za den. Provádění integrovaných dovedností se účtuje za stávající cenu průběžných plateb za služby Azure AI.

Kromě toho je extrakce obrázků fakturovatelná službou Azure AI Search.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Parametry dovedností

Parametry rozlišují malá a velká písmena.

Název parametru Popis
defaultLanguageCode Řetězec označující jazyk, který se má vrátit. Služba vrátí výsledky rozpoznávání v zadaném jazyce. Pokud tento parametr není zadaný, výchozí hodnota je en.

Podporované jazyky zahrnují podmnožinu obecně dostupných jazyků služby Azure AI Vision. Když je jazyk nově zaveden se stavem obecné dostupnosti do služby AI Vision, očekává se zpoždění, než se plně integrují do této dovednosti.
visualFeatures Pole řetězců označující typy funkcí vizuálu, které se mají vrátit. Mezi platné typy funkcí vizuálu patří:
  • dospělý - zjistí, jestli je obrázek pornografický (znázorňuje nahotu nebo sexuální akt), gory (znázorňuje extrémní násilí nebo krev) nebo sugestivní (označovaný také jako obsahracy).
  • značky - detekuje různé značky na obrázku, včetně přibližné polohy.
  • kategorie – kategorizuje obsah obrázků podle taxonomie definované službami Azure AI.
  • description – popisuje obsah obrázku s úplnou větou v podporovaných jazycích.
  • tváře – rozpozná, jestli jsou přítomny tváře. Pokud je k dispozici, generuje souřadnice, pohlaví a věk.
  • objekty – rozpozná různé objekty v rámci obrázku, včetně přibližného umístění.
  • tags – označí obrázek podrobným seznamem slov souvisejících s obsahem obrázku.
Názvy vizuálních funkcí rozlišují malá a velká písmena. Funkce vizuálu color i imageType jsou zastaralé, ale k této funkci můžete přistupovat prostřednictvím vlastní dovednosti. Informace o podporovaných defaultLanguageCodevizuálních funkcích najdete v dokumentaci k analýze obrázků ve službě Azure AI Vision.
details Pole řetězců označující, které podrobnosti specifické pro doménu se mají vrátit. Mezi platné typy funkcí vizuálu patří:
  • celebrity – identifikuje celebrity, pokud jsou na obrázku zjištěny.
  • orientační body – identifikuje orientační body, pokud jsou na obrázku zjištěny.

Vstupy dovedností

Název vstupu Popis
image Komplexní typ. V současné době pracuje pouze s polem /document/normalized_images, které indexer objektů blob Azure vytvoří, když imageAction je nastavená na jinou hodnotu než none.

Výstupy dovedností

Název výstupu Popis
adult Výstup je jeden objekt dospělého komplexního typu, který se skládá z logických polí (isAdultContent, isGoryContent, isRacyContent) a skóre dvojitého typu (adultScore, goreScore, racyScore).
brands Výstup je pole objektů značky , kde je objekt komplexním typem skládajícím se z name (řetězce) a confidence skóre (double). Vrátí také rectangle čtyři souřadnice ohraničujícího rámečku (x, y, w, hv pixelech) označující umístění uvnitř obrázku. Pro obdélník x a y jsou vlevo nahoře. Vlevo dole je x, y+h. Vpravo nahoře je x+w, y. Vpravo dole je x+w, y+h.
categories Výstup je pole objektů kategorií, kde každý objekt kategorie je komplexním typem skládajícím se z name (řetězce), score (double) a volitelného detail typu, který obsahuje podrobnosti o celebritách nebo orientačních bodech. Úplný seznam názvů kategorií najdete v taxonomii kategorií. Detail je vnořený komplexní typ. Detail celebrity se skládá z názvu, skóre spolehlivosti a ohraničujícího rámečku tváře. Podrobnosti orientačních bodů se skládají z názvu a skóre spolehlivosti.
description Výstup je jeden objekt popisu komplexního typu, který se skládá ze seznamů tags a caption (pole sestávající z Text (řetězec) a confidence (double)).
faces Komplexní typ skládající agese z , gendera faceBoundingBox má čtyři souřadnice ohraničujícího rámečku (v pixelech) označující umístění uvnitř obrázku. Souřadnice jsou top, left, width, height.
objects Výstup je pole objektů vizuálních funkcí. Každý objekt je komplexní typ, který se skládá z object (řetězec), confidence (double), rectangle (se čtyřmi souřadnicemi ohraničujícího rámečku označujícími umístění uvnitř obrázku) a parent obsahující název a jistotu objektu .
tags Výstup je pole objektů imageTag , kde objekt značky je komplexní typ skládající se z name (string), hint (string) a confidence (double). Přidání nápovědy je vzácné. Generuje se jenom v případě, že je značka nejednoznačná. Například obrázek označený jako "curling" může mít nápovědu "sport", aby lépe vyznačil jeho obsah.

Definice ukázkové dovednosti

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

Ukázkový index

Pro jednotlivé objekty (například adult a description) je můžete strukturovat v indexu Collection(Edm.ComplexType) jako návrat adult a description výstup pro všechny objekty. Další informace omapováních

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

Ukázkové mapování výstupních polí

Cílové pole může být komplexní pole nebo kolekce. Definice indexu určuje všechna dílčí pole.

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

Varianta mapování výstupních polí (vnořené vlastnosti)

Mapování výstupních polí můžete definovat na vlastnosti nižší úrovně, například jenom celebrity nebo orientační body. V tomto případě se ujistěte, že schéma indexu obsahuje pole, které obsahuje jednotlivé podrobnosti konkrétně.

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

Ukázkový vstup

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

Ukázkový výstup

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

Chybové případy

V následujících případech chyb nejsou extrahovány žádné prvky.

Kód chyby Popis
NotSupportedLanguage Zadaný jazyk není podporovaný.
InvalidImageUrl Adresa URL obrázku je špatně naformátovaná nebo není přístupná.
InvalidImageFormat Vstupní data nejsou platným obrázkem.
InvalidImageSize Vstupní obrázek je příliš velký.
NotSupportedVisualFeature Zadaný typ funkce není platný.
NotSupportedImage Nepodporovaný obrázek, například dětská pornografie.
InvalidDetails Nepodporovaný model specifický pro doménu

Pokud se zobrazí podobná chyba "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", zkontrolujte cestu. Celebrity i památky jsou v oblasti detail.

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

Viz také