Pular para o conteúdo principal

Desafio 24: Azure AI Vision - Análise de Imagens

Tempo Estimado

45 min | Custo: $1-2 (estimado) | Domínio: Implementar Soluções de Visão Computacional (10-15%)

Habilidades do exame abordadas

  • Selecionar recursos visuais para atender requisitos
  • Detectar objetos e gerar tags em imagens
  • Incluir ou excluir recursos visuais na requisição de análise
  • Interpretar respostas de análise de imagem incluindo scores de confiança

Visão Geral

O Azure AI Vision Image Analysis 4.0 fornece uma API unificada para extrair informações visuais. Recursos disponíveis:

RecursoDescrição
captionDescrição em linguagem natural da imagem
denseCaptionsLegendas para múltiplas regiões
tagsTags de conteúdo com scores de confiança
objectsDetecção de objetos com bounding boxes
peopleDetecção de pessoas com bounding boxes
readExtração de texto via OCR
smartCropsRegiões de corte ideais para miniaturas

A API retorna JSON estruturado com scores de confiança (0.0–1.0) para cada elemento detectado.

Pré-requisitos

  • Assinatura Azure
  • Recurso multi-serviço Azure AI Services ou recurso Computer Vision
  • Python 3.9+ ou .NET 8
  • Pacote: azure-ai-vision-imageanalysis (v1.0+)

Implementação

Tarefa 1: Criar Recurso Azure AI Vision

az group create --name rg-ai102-vision --location eastus2

az cognitiveservices account create \
--name ai-vision-ai102 \
--resource-group rg-ai102-vision \
--kind AIServices \
--sku S0 \
--location eastus2

# Get endpoint and key
ENDPOINT=$(az cognitiveservices account show --name ai-vision-ai102 --resource-group rg-ai102-vision --query properties.endpoint -o tsv)
KEY=$(az cognitiveservices account keys list --name ai-vision-ai102 --resource-group rg-ai102-vision --query key1 -o tsv)

echo "AZURE_AI_ENDPOINT=$ENDPOINT"
echo "AZURE_AI_KEY=$KEY"

Tarefa 2: Analisar Imagem com Múltiplos Recursos

import os
from azure.ai.vision.imageanalysis import ImageAnalysisClient
from azure.ai.vision.imageanalysis.models import VisualFeatures
from azure.core.credentials import AzureKeyCredential

client = ImageAnalysisClient(
endpoint=os.environ["AZURE_AI_ENDPOINT"],
credential=AzureKeyCredential(os.environ["AZURE_AI_KEY"])
)

# Analyze an image URL with multiple features
image_url = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png"

result = client.analyze_from_url(
image_url=image_url,
visual_features=[
VisualFeatures.CAPTION,
VisualFeatures.TAGS,
VisualFeatures.OBJECTS,
VisualFeatures.PEOPLE,
VisualFeatures.READ
],
language="en",
gender_neutral_caption=True
)

# Process caption
if result.caption:
print(f"Caption: '{result.caption.text}' (confidence: {result.caption.confidence:.4f})")

# Process tags
if result.tags:
print(f"\nTags ({len(result.tags.list)} found):")
for tag in result.tags.list:
print(f" - {tag.name}: {tag.confidence:.4f}")

# Process objects
if result.objects:
print(f"\nObjects ({len(result.objects.list)} detected):")
for obj in result.objects.list:
bbox = obj.bounding_box
print(f" - {obj.tags[0].name} ({obj.tags[0].confidence:.4f})")
print(f" Bounding box: x={bbox.x}, y={bbox.y}, w={bbox.width}, h={bbox.height}")

# Process people
if result.people:
print(f"\nPeople ({len(result.people.list)} detected):")
for person in result.people.list:
bbox = person.bounding_box
print(f" - Confidence: {person.confidence:.4f}")
print(f" Bounding box: x={bbox.x}, y={bbox.y}, w={bbox.width}, h={bbox.height}")

# Process OCR text
if result.read:
print(f"\nText (OCR):")
for block in result.read.blocks:
for line in block.lines:
print(f" '{line.text}'")

Tarefa 3: Analisar Imagem Local com Smart Crops

# Analyze a local image file
with open("sample-image.jpg", "rb") as image_file:
image_data = image_file.read()

result = client.analyze(
image_data=image_data,
visual_features=[VisualFeatures.SMART_CROPS, VisualFeatures.DENSE_CAPTIONS],
smart_crops_aspect_ratios=[0.9, 1.33, 1.78] # Square-ish, 4:3, 16:9
)

# Smart crops for thumbnails
if result.smart_crops:
print("Smart crop regions:")
for crop in result.smart_crops.list:
bbox = crop.bounding_box
print(f" Aspect ratio {crop.aspect_ratio}: x={bbox.x}, y={bbox.y}, w={bbox.width}, h={bbox.height}")

# Dense captions - multiple region descriptions
if result.dense_captions:
print(f"\nDense captions ({len(result.dense_captions.list)}):")
for cap in result.dense_captions.list:
bbox = cap.bounding_box
print(f" '{cap.text}' (conf: {cap.confidence:.3f}) at ({bbox.x},{bbox.y})")

Saída Esperada

Caption: 'a person standing in front of a whiteboard giving a presentation' (confidence: 0.8523)

Tags (8 found):
- person: 0.9891
- indoor: 0.9754
- whiteboard: 0.9612
- presentation: 0.8934
- clothing: 0.8721
- standing: 0.8456
- wall: 0.7823
- text: 0.7234

Objects (2 detected):
- person (0.9234)
Bounding box: x=120, y=45, w=280, h=510
- whiteboard (0.8567)
Bounding box: x=420, y=30, w=350, h=400

People (1 detected):
- Confidence: 0.9456
Bounding box: x=118, y=42, w=285, h=515

Text (OCR):
'Azure AI Services'
'Computer Vision'
'Image Analysis'

Quebra & conserta

CenárioSintomaCausa RaizCorreção
415 Unsupported Media TypeErro em arquivo localHeader Content-Type incorretoUse application/octet-stream para binário, application/json para URL
Tags/objetos vaziosNenhum resultado retornadoImagem muito pequena ou desfocadaMínimo 50x50 pixels; máximo 20MB
Erro InvalidImageUrl400 Bad RequestURL não acessível publicamenteCertifique-se de que a URL da imagem é acessível publicamente; use upload de arquivo local
Scores de confiança baixosResultados não confiáveisQualidade ou ambiguidade da imagemFiltre resultados por limiar de confiança (ex: > 0.7)
Recurso não disponívelFeatureNotSupportedRegião não suporta o recursoUse regiões suportadas (East US, West Europe, etc.)

Verificação de Conhecimento

1. Qual recurso visual fornece descrições em linguagem natural para múltiplas regiões dentro de uma imagem?

2. O que o recurso smartCrops retorna?

3. Como os scores de confiança são expressos nas respostas do Image Analysis 4.0?

4. Qual é o formato correto do endpoint da API para o Image Analysis 4.0?

5. Qual parâmetro especifica quais informações extrair da imagem?

Limpeza

az group delete --name rg-ai102-vision --yes --no-wait

Saiba Mais