Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A competência Análise de Imagem extrai um conjunto rico de características visuais com base no conteúdo da imagem. Por exemplo, pode gerar uma legenda a partir de uma imagem, gerar etiquetas ou identificar celebridades e pontos de referência. Este artigo é a documentação de referência para a competência de Análise de Imagens . Consulte Extrair texto e informações das imagens para instruções de utilização.
Esta competência utiliza os modelos de aprendizagem automática fornecidos pela Azure Vision na Foundry Tools. A Análise de Imagens funciona com imagens que cumprem os seguintes requisitos:
- A imagem deve ser apresentada em formato JPEG, PNG, GIF ou BMP
- O tamanho do ficheiro da imagem deve ser inferior a 4 megabytes (MB)
- As dimensões da imagem devem ser superiores a 50 x 50 píxeis
Fontes de dados suportadas para OCR e análise de imagem são blobs no Armazenamento de Blobs do Azure e Azure Data Lake Storage (ADLS) Gen2, e conteúdo de imagem no Microsoft OneLake. As imagens podem ser ficheiros autónomos ou imagens incorporadas num PDF ou outros ficheiros.
Esta competência é implementada usando a API de Análise de Imagens de IA versão 3.2. Se a 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 da Web API skill ou usar a ImageAnalysisV4 power skill.
Note
Esta competência 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 das competências integradas é cobrada ao preço padrão existente da Foundry Tools.
Além disso, a extração da imagem é faturável por Pesquisa de IA do Azure.
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
Skill parameters
Os parâmetros são distinguíveis de maiúsculas minúsculas.
| Parameter name | Description |
|---|---|
defaultLanguageCode |
Uma cadeia que indica a língua a devolver. O serviço devolve resultados de reconhecimento numa linguagem especificada. Se este parâmetro não for especificado, o valor padrão é "en". As linguagens suportadas incluem um subconjunto de linguagens geralmente disponíveis do Azure Vision. Quando uma linguagem é recentemente introduzida com estatuto de disponibilidade geral no Azure Vision, espera-se um atraso até que esteja totalmente integrada nesta competência. |
visualFeatures |
Um conjunto de cadeias que indicam os tipos de características visuais a devolver. Tipos válidos de características visuais incluem:
defaultLanguageCode. |
details |
Um array de cadeias que indicam quais os detalhes específicos do domínio a 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 um tipo complexo, composto por campos booleanos (isAdultContent, isGoryContent, isRacyContent) e pontuações de 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 devolve 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 está x, y+h. No canto superior direito é x+w, y. No canto inferior direito está x+w, y+h. |
categories |
Output é um array de objetos de categoria , onde cada objeto de categoria é um tipo complexo composto por uma name (string), score (double) e opcional detail que contém detalhes de celebridades ou pontos de referência. Consulte a taxonomia de categorias para a lista completa dos nomes das categorias. Um detalhe é um tipo complexo aninhado. Um detalhe de celebridade consiste num nome, pontuação de confiança e caixa delimitadora facial. Um detalhe marco consiste num nome e numa pontuação de confiança. |
description |
Output é um único objeto de descrição de um tipo complexo, consistindo em listas de tags e caption (um array composto por Text (string) e confidence (double)). |
faces |
Tipo complexo composto por age, gender, e faceBoundingBox com quatro coordenadas de caixa delimitadora (em píxeis) que indicam 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 é um tipo complexo, composto por 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 etiqueta for ambígua. Por exemplo, uma imagem marcada como "curling" pode ter um toque de "desporto" para indicar melhor o seu conteúdo. |
Definição de perícia 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), pode estruturá-los no índice como um Collection(Edm.ComplexType) para devolver adult e description sair para todos eles. Para mais informações sobre mapeamento de saídas para campos de índice, veja Achatamento de informação a partir 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)
Podes definir mapeamentos de campo de saída para propriedades de nível inferior, como apenas celebridades ou pontos de referência. Neste caso, certifique-se de que o seu esquema de índice tem um campo para conter 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 |
A linguagem fornecida não é suportada. |
InvalidImageUrl |
O URL da imagem está mal formatado ou não é acessível. |
InvalidImageFormat |
Os dados de entrada não são uma imagem válida. |
InvalidImageSize |
A imagem de entrada é demasiado grande. |
NotSupportedVisualFeature |
O tipo de funcionalidade especificado não é válido. |
NotSupportedImage |
Imagem não suportada, por exemplo, pornografia infantil. |
InvalidDetails |
Modelo específico de domínio não suportado. |
Se tiveres um erro semelhante ao "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", verifica o caminho. Tanto celebridades como marcos são propriedades sob detail.
"categories":[
{
"name":"building_",
"score":0.97265625,
"detail":{
"landmarks":[
{
"name":"Forbidden City",
"confidence":0.92013400793075562
}
]