Habilidade cognitiva de Análise de Imagem
A habilidade Análise de Imagem extrai um rico conjunto 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 de referência. Este artigo é a documentação de referência para a habilidade Análise de Imagem. Consulte Extrair texto e informações de imagens para obter instruções de uso.
Essa habilidade usa os modelos de aprendizado de máquina fornecidos pelo Azure AI Vision nos serviços de IA do Azure. A Análise de Imagem funciona em imagens que cumprem os requisitos seguintes:
- A imagem deve ser apresentada em formato JPEG, PNG, GIF ou BMP
- O tamanho do ficheiro da imagem tem de ser inferior a 4 megabytes (MB)
- As dimensões da imagem têm de ser superiores a 50 x 50 píxeis
As fontes de dados com suporte para OCR e análise de imagem são blobs no Armazenamento de Blobs do Azure e no Azure Data Lake Storage (ADLS) Gen2 e conteúdo de imagem no OneLake. As imagens podem ser ficheiros autónomos ou imagens incorporadas num PDF ou noutros ficheiros.
Esta habilidade é implementada usando a AI Image Analysis API versão 3.2. Se sua solução exigir a chamada de uma versão mais recente dessa API de serviço (como a versão 4.0), considere implementar por meio da habilidade personalizada da API Web.
Nota
Essa habilidade está vinculada aos serviços de IA do Azure e requer um recurso faturável para transações que excedam 20 documentos por indexador por dia. A execução de habilidades internas é cobrada pelo preço pré-pago dos serviços de IA do Azure existentes.
Além disso, a extração de imagens é faturável pelo Azure AI Search.
@odata.type
Microsoft.Skills.Vision.ImageAnalysisSkill
Parâmetros de habilidade
Os parâmetros diferenciam maiúsculas de minúsculas.
Nome do parâmetro | Description |
---|---|
defaultLanguageCode |
Uma cadeia de caracteres que indica o idioma a ser retornado. O serviço retorna resultados de reconhecimento em um idioma especificado. Se esse parâmetro não for especificado, o valor padrão será "en". Os idiomas suportados incluem um subconjunto de idiomas geralmente disponíveis do Azure AI Vision. Quando uma linguagem é introduzida recentemente com status de disponibilidade geral no serviço AI Vision, há um atraso esperado antes que eles sejam totalmente integrados a essa habilidade. |
visualFeatures |
Uma matriz de cadeias de caracteres indicando os tipos de recursos visuais a serem retornados. Os tipos de recursos visuais válidos incluem:
defaultLanguageCode . |
details |
Uma matriz de cadeias de caracteres que indica quais detalhes específicos do domínio devem ser retornados. Os tipos de recursos visuais válidos incluem:
|
Contributos para as competências
Nome de entrada | Description |
---|---|
image |
Tipo complexo. Atualmente, só funciona com o campo "/document/normalized_images", produzido pelo indexador de blob do Azure quando imageAction definido como um valor diferente de none . |
Resultados em termos de competências
Nome da saída | Description |
---|---|
adult |
A saída é um único objeto adulto de um tipo complexo, consistindo de campos booleanos (isAdultContent , isGoryContent , isRacyContent ) e pontuações de tipo duplo (adultScore , goreScore racyScore , ). |
brands |
Output é uma matriz de objetos de marca , onde o objeto é um tipo complexo que consiste em name (string) e uma confidence pontuação (double). Ele também retorna um rectangle com quatro coordenadas de caixa delimitadora (x , y , w , h , em pixels) indicando o posicionamento dentro da imagem. Para o retângulo, x e y são o canto superior esquerdo. A parte inferior esquerda é x , y+h . O canto superior direito é x+w , y . No canto inferior direito está x+w , y+h . |
categories |
Output é uma matriz de objetos de categoria, onde cada objeto de categoria é um tipo complexo que consiste em um name (string), score (double) e opcional detail que contém detalhes de celebridade ou ponto de referência. Consulte a taxonomia de categorias para obter a lista completa de nomes de categorias. Um detalhe é um tipo complexo aninhado. Um detalhe de celebridade consiste em um nome, pontuação de confiança e caixa delimitadora de rosto. Um detalhe histórico consiste em um nome e uma pontuação de confiança. |
description |
Output é um único objeto de descrição de um tipo complexo, consistindo em listas de tags e caption (uma matriz que consiste em Text (string) e confidence (double)). |
faces |
Tipo complexo que consiste age em , gender e faceBoundingBox tem quatro coordenadas de caixa delimitadora (em pixels) indicando o posicionamento dentro da imagem. As coordenadas são top , left , width , height . |
objects |
A saída é uma matriz de objetos de feição visual. Cada objeto é um tipo complexo, consistindo em (string), confidence (double), rectangle (com quatro coordenadas de caixa delimitadora indicando posicionamento dentro da imagem) e um parent que contém um nome de object objeto e confiança. |
tags |
Output é uma matriz de objetos imageTag , onde um objeto tag é um tipo complexo que consiste em name (string), hint (string) e confidence (double). A adição de uma dica é rara. Ele só é gerado se uma tag for ambígua. Por exemplo, uma imagem marcada como "curling" pode ter uma dica de "esportes" para indicar melhor seu conteúdo. |
Definição de habilidade de amostra
{
"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"
}
]
}
Índice da amostra
Para objetos individuais (como adult
e description
), você pode estruturá-los no índice como um Collection(Edm.ComplexType)
retorno adult
e description
saída para todos eles. Para obter mais informações sobre como mapear saídas para campos de índice, consulte Nivelando 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
}
]
}
]
}
Exemplo de mapeamento de campo de saída
O campo de destino 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, verifique se o 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"
}
Entrada de exemplo
{
"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
}
}
}
]
}
Saída de exemplo
{
"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
}
}
]
}
}
]
}
Casos de erro
Nos seguintes casos de erro, nenhum elemento é extraído.
Código de Erro | Description |
---|---|
NotSupportedLanguage |
O idioma fornecido não é suportado. |
InvalidImageUrl |
O URL da imagem está mal formatado ou não está acessível. |
InvalidImageFormat |
Os dados de entrada não são uma imagem válida. |
InvalidImageSize |
A imagem de entrada é muito grande. |
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 sem suporte. |
Se você receber o 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 as celebridades como os pontos de referência são propriedades sob detail
.
"categories":[
{
"name":"building_",
"score":0.97265625,
"detail":{
"landmarks":[
{
"name":"Forbidden City",
"confidence":0.92013400793075562
}
]