Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A habilidade de Análise de Imagem extrai um conjunto rico de recursos visuais com base no conteúdo da imagem. Por exemplo, você pode gerar uma legenda a partir de uma imagem, gerar tags ou identificar celebridades e pontos turísticos. Este artigo é a documentação de referência para a habilidade de Análise de Imagens . Veja Extrair texto e informações das imagens para instruções de uso.
Essa habilidade utiliza os modelos de aprendizado de máquina fornecidos pelo Azure Vision no Foundry Tools. A Análise de Imagens trabalha com imagens que atendem aos seguintes requisitos:
- A imagem deve ser apresentada em formato JPEG, PNG, GIF ou BMP
- O tamanho do arquivo da imagem deve ser menor que 4 megabytes (MB)
- As dimensões da imagem devem ser maiores que 50 x 50 pixels
Fontes de dados suportadas para OCR e análise de imagens são blobs no Armazenamento de Blobs do Azure e Azure Data Lake Storage (ADLS) Gen2, e conteúdo de imagens no Microsoft OneLake. Imagens podem ser arquivos independentes ou imagens incorporadas em PDF ou outros arquivos.
Essa habilidade é implementada usando a API de Análise de Imagens de IA versão 3.2. Se sua solução exigir chamar uma versão mais recente dessa API de serviço (como a versão 4.0), considere implementar através de Web API custom skill ou usar a ImageAnalysisV4 power skill.
Note
Essa habilidade está vinculada ao Foundry Tools e requer um recurso faturável para transações que ultrapassem 20 documentos por indexador por dia. A execução de habilidades internas é cobrada pelo preço padrão das Ferramentas de Fundiária existentes.
Além disso, a extração de imagem é faturável por Pesquisa de IA do Azure .
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
Skill parameters
Os parâmetros diferenciam maiúsculas de minúsculas.
| Parameter name | Description |
|---|---|
defaultLanguageCode |
Uma string indicando o idioma a ser retornado. O serviço retorna resultados de reconhecimento em uma linguagem especificada. Se esse parâmetro não for especificado, o valor padrão é "en". Linguagens suportadas incluem um subconjunto de linguagens geralmente disponíveis do Azure Vision. Quando uma linguagem é recém-introduzida com status de disponibilidade geral no Azure Vision, há um atraso esperado até que ela seja totalmente integrada a essa habilidade. |
visualFeatures |
Um array de strings indicando os tipos de características visuais a serem retornadas. Tipos válidos de características visuais incluem:
defaultLanguageCode. |
details |
Um array de strings indicando quais detalhes específicos do domínio devolver. Tipos válidos de características visuais incluem:
|
Skill inputs
| Input name | Description |
|---|---|
image |
Complex Type. Atualmente só funciona com o campo "/document/normalized_images", produzido pelo indexador de blob Azure quando imageAction está definido para um valor diferente de none. |
Skill outputs
| Output name | Description |
|---|---|
adult |
Output é um único objeto adulto de tipo complexo, composto por campos booleanos (isAdultContent, isGoryContent, isRacyContent) e pontuações do tipo duplo (adultScore, goreScore, racyScore). |
brands |
A saída é um array de objetos de marca , onde o objeto é um tipo complexo composto por name (string) e uma confidence pontuação (double). Também retorna a rectangle com quatro coordenadas de caixa delimitadora (x, y, w, h, em pixels) indicando a posição dentro da imagem. Para o retângulo, x e y são o canto superior esquerdo. No canto inferior esquerdo é x, y+h. Canto superior direito é x+w, y. No canto inferior direito está x+w, y+h. |
categories |
Output é um array de objetos categoria , onde cada objeto categoria é um tipo complexo composto por ( name string), score (double) e opcional detail que contém detalhes de celebridades ou pontos de referência. Veja a taxonomia das categorias para a lista completa dos nomes das categorias. Um detalhe é um tipo complexo aninhado. Um detalhe de celebridade consiste em nome, pontuação de confiança e caixa de delimitação facial. Um detalhe marco consiste em um nome e uma pontuação de confiança. |
description |
Saída é um único objeto de descrição de tipo complexo, consistindo em listas de tags e caption (um array composto por Text (string) e confidence (duplo)). |
faces |
Tipo complexo consistindo em age, gender, e faceBoundingBox com quatro coordenadas de caixa delimitadora (em pixels) indicando a posição dentro da imagem. As coordenadas são top, left, width, height. |
objects |
A saída é um conjunto de objetos de características visuais. Cada objeto é de um tipo complexo, consistindo em object (string), confidence (double), rectangle (com quatro coordenadas de caixa delimitadora indicando a posição dentro da imagem) e a parent que contém um nome de objeto e confiança . |
tags |
Output é um array de objetos imageTag , onde um objeto tag é um tipo complexo composto por name (string), hint (string) e confidence (double). A adição de uma dica é rara. Só é gerado se uma tag for ambígua. Por exemplo, uma imagem marcada como "curling" pode ter um toque de "esportes" para indicar melhor seu conteúdo. |
Definição de habilidade de exemplo
{
"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"
}
]
}
Sample index
Para objetos individuais (como adult e description), você pode estruturá-los no índice como um Collection(Edm.ComplexType) para retornar adult e description sair para todos eles. Para mais informações sobre mapeamento de saídas para campos de índice, veja Achatamento de informações de tipos complexos.
{
"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
}
]
}
]
}
Mapeamento de campo de saída de exemplo
O campo alvo pode ser um campo complexo ou uma coleção. A definição de índice especifica quaisquer subcampos.
"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"
}
Variação nos mapeamentos de campo de saída (propriedades aninhadas)
Você pode definir mapeamentos de campo de saída para propriedades de nível inferior, como apenas celebridades ou pontos de referência. Nesse caso, certifique-se de que seu esquema de índice tenha um campo contendo cada detalhe especificamente.
"outputFieldMappings": [
{
"sourceFieldName": "/document/normalized_images/*/categories/detail/celebrities/*",
"targetFieldName": "celebrities"
},
{
"sourceFieldName": "/document/normalized_images/*/categories/detail/landmarks/*",
"targetFieldName": "landmarks"
}
Sample input
{
"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
}
}
}
]
}
Sample output
{
"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
}
}
]
}
}
]
}
Error cases
Nos casos de erro seguintes, nenhum elemento é extraído.
| Error Code | Description |
|---|---|
NotSupportedLanguage |
O idioma fornecido não é suportado. |
InvalidImageUrl |
A URL da imagem está mal formatada ou não está acessível. |
InvalidImageFormat |
Os dados de entrada não são uma imagem válida. |
InvalidImageSize |
A imagem de entrada está grande demais. |
NotSupportedVisualFeature |
O tipo de recurso especificado não é válido. |
NotSupportedImage |
Imagem sem suporte, por exemplo, pornografia infantil. |
InvalidDetails |
Modelo específico de domínio não suportado. |
Se você receber um erro semelhante ao "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", verifique o caminho. Tanto celebridades quanto marcos são propriedades sob detail.
"categories":[
{
"name":"building_",
"score":0.97265625,
"detail":{
"landmarks":[
{
"name":"Forbidden City",
"confidence":0.92013400793075562
}
]