Kognitivní dovednost analýzy obrazu

Note

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Dovednost Image Analysis extrahuje bohatou škálu vizuálních rysů na základě obsahu obrázku. Například můžete vytvořit popisek z obrázku, vytvořit tagy nebo identifikovat celebrity a památky. Tento článek je referenční dokumentací pro dovednost Image Analysis . Viz Extrakt textu a informací z obrázků pro pokyny k použití.

Tato dovednost využívá modely strojového učení poskytované společností Azure Vision ve Foundry Tools. Analýza obrazu pracuje na snímcích, které splňují následující požadavky:

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

Podporovanými datovými zdroji pro OCR a analýzu obrázků jsou blobs v Azure Blob Storage a Azure Data Lake Storage (ADLS) Gen2 a obrazový obsah v Microsoft OneLake. Obrázky mohou být samostatné soubory nebo vložené obrázky v PDF či jiných souborech.

Tato dovednost je implementována pomocí API AI Image Analysis 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 dovednosti vlastního webového rozhraní API.

Note

Tato dovednost je vázána na Foundry Tools a vyžaduje fakturovatelný zdroj pro transakce, které přesahují 20 dokumentů na indexera za den. Provádění integrovaných dovedností se účtuje za stávající standardní cenu foundry Tools.

Navíc je extrakce obrazu fakturovatelná pomocí Azure AI Vyhledávač.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Parametry dovedností

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

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

Podporované jazyky zahrnují podmnožinu obecně dostupných jazyků Azure Vision. Když je do Azure Vision nově zaveden jazyk s obecnou dostupností, očekává se zpoždění, než bude plně integrován do této dovednosti.
visualFeatures Pole řetězců indikujících vizuální typy rysů, které je třeba vrátit. Platné typy vizuálních prvků zahrnují:
  • Dospělí – Detekuje, zda je obraz pornografický (zobrazuje nahotu nebo sexuální akt), krvavý (zobrazuje extrémní násilí nebo krev) nebo naznačující (také známý jako pikantní obsah).
  • Značky – rozpoznává různé značky v rámci obrázku, včetně přibližné polohy.
  • kategorie – kategorizuje obsah obrázků podle taxonomie definované Foundry Tools.
  • Popis – popisuje obsah obrázku s kompletní větou v podporovaných jazycích.
  • Tváře – detekuje, zda jsou tváře přítomny. Pokud je přítomna, generuje souřadnice, pohlaví a věk.
  • objekty – detekuje různé objekty v obraze, včetně přibližné polohy.
  • Tagy – označí obrázek podrobným seznamem slov souvisejících s obsahem obrázku.
Názvy vizuálních rysů jsou rozlišovány podle velkých písmen. Barevné iimageType vizuální funkce byly zrušeny, ale k této možnosti se můžete dostat pomocí vlastní dovednosti. Podívejte se na dokumentaci Azure Vision Image Analysis kde jsou vizuální prvky podporovány u každého defaultLanguageCode.
details Pole řetězců indikujících, které doménově specifické detaily vrátit. Platné typy vizuálních prvků zahrnují:
  • Celebrity – identifikuje celebrity, pokud jsou na obrázku odhaleny.
  • Orientační body – identifikují orientační body, pokud jsou na obrázku detekovány.

Vstupy dovedností

Název vstupu Description
image Komplexní typ. V současnosti funguje pouze s polem "/document/normalized_images", které vytváří Azure blob indexer, když je imageAction nastaveno na jinou hodnotu než none.

Výstupy schopností

Název výstupu Description
adult Výstupem je jeden dospělý objekt komplexního typu, který se skládá z booleovských polí (isAdultContent, isGoryContent, isRacyContent) a skóre dvojitého typu (adultScore, goreScore, ). racyScore
brands Výstup je pole značkových objektů, kde objekt je komplexní typ složený z name (string) a skóre confidence (double). Vrací také a rectangle se čtyřmi ohraničujícími souřadnicemi (x, , yw, h, v pixelech), které označují umístění uvnitř obrazu. Pro obdélník x a jsou y vlevo nahoře. Vlevo dole je x, y+h. Vpravo nahoře je x+w, y. Dole vpravo je x+w, y+h.
categories Výstup je pole kategoriových objektů, kde každý kategoriový objekt je složitý typ složený z name (řetězce), score (dvojitého) a volitelného detail , který obsahuje detaily celebrit nebo významných bodů. Kompletní seznam názvů kategorií najdete v taxonomii kategorií . Detail je vnořený komplexní typ. Detail celebrity zahrnuje jméno, skóre sebevědomí a ohraničovací rámeček obličeje. Detail významu se skládá ze jména a skóre důvěry.
description Výstup je jediný popisný objekt komplexního typu, který se skládá ze seznamů tags a caption (pole složené z Text (string) a confidence (double)).
faces Komplexní typ sestávající z age, gender, a faceBoundingBox má čtyři ohraničující souřadnice (v pixelech), které označují umístění uvnitř obrazu. Souřadnice jsou top, left, width, . height
objects Výstup je pole vizuálních objektů rysů. Každý objekt je komplexního typu, který se skládá z object (string), confidence (double), rectangle (se čtyřmi ohraničujícími boxovými souřadnicemi indikujícími umístění uvnitř obrazu) a , parent který obsahuje název objektu a jistotu .
tags Výstup je pole objektů imageTag , kde objekt tagu je komplexní typ složený z name (string), hint (string) a confidence (double). Přidání nápovědy je vzácné. Generuje se pouze tehdy, pokud je tag nejednoznačný. Například obrázek označený jako "curling" může mít náznak "sport", aby lépe vystihl svůj obsah.

Ukázková definice 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 jako Collection(Edm.ComplexType) return adult a description výstup pro všechny. Pro více informací o mapování výstupů do indexových polí viz Zploštění informací z komplexních typů.

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

Mapování výstupních polí vzorků

Cílové pole může být složité pole nebo kolekce. Definice indexu specifikuje libovolná podpole.

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

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

Můžete definovat mapování výstupních polí na nižší úrovně objektů, jako jsou pouze celebrity nebo památky. V takovém případě se ujistěte, že vaše indexové schéma má pole, které obsahuje každý detail 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 chybových případech nejsou žádné prvky extrahovány.

Kód chyby Description
NotSupportedLanguage Jazyk, který je uveden, není podporován.
InvalidImageUrl URL obrázku je špatně naformátovaná nebo není přístupná.
InvalidImageFormat Vstupní data nejsou platný obrázek.
InvalidImageSize Vstupní obraz je příliš velký.
NotSupportedVisualFeature Specifikovaný typ funkce není platný.
NotSupportedImage Nepodložený obrázek, například dětská pornografie.
InvalidDetails Nepodporovaný doménově specifický model.

Pokud dostanete chybu podobnou , "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks"zkontrolujte cestu. Jak celebrity, tak památky jsou nemovitostmi podle .detail

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

Viz také