Pular para o conteúdo principal

Desafio 28: Detecção e Análise Facial

Tempo Estimado

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

Acesso Limitado

Os recursos de identificação e verificação facial requerem aprovação de Acesso Limitado. Este desafio foca nos recursos de detecção disponíveis sem aprovação.

Habilidades do exame abordadas

  • Implementar soluções de detecção facial
  • Detectar rostos e analisar atributos faciais
  • Compreender as limitações de IA responsável nos serviços faciais

Visão Geral

O serviço Azure AI Face fornece detecção facial com análise de atributos. A detecção está disponível sem restrições; identificação/verificação requerem aprovação.

Atributos de detecção (disponíveis sem Acesso Limitado):

  • Localização do rosto (bounding box)
  • Pose da cabeça (pitch, roll, yaw)
  • Nível de desfoque (low, medium, high)
  • Nível de exposição (underExposure, goodExposure, overExposure)
  • Nível de ruído
  • Oclusão (testa, olhos, boca ocluídos)
  • Acessórios (chapéus, óculos)
  • Qualidade para reconhecimento

Recursos restritos (requerem aprovação de Acesso Limitado):

  • Identificação facial (correspondência 1:N)
  • Verificação facial (correspondência 1:1)
  • Gerenciamento de PersonGroup

Pré-requisitos

  • Assinatura Azure
  • Recurso Azure AI Face
  • Python 3.9+ ou .NET 8
  • Pacote: azure-ai-vision-face (v1.0+)

Implementação

Tarefa 1: Criar Recurso Face

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

az cognitiveservices account create \
--name face-ai102 \
--resource-group rg-ai102-face \
--kind Face \
--sku S0 \
--location eastus2

FACE_ENDPOINT=$(az cognitiveservices account show --name face-ai102 --resource-group rg-ai102-face --query properties.endpoint -o tsv)
FACE_KEY=$(az cognitiveservices account keys list --name face-ai102 --resource-group rg-ai102-face --query key1 -o tsv)

Tarefa 2: Detectar Rostos e Analisar Atributos

import os
from azure.ai.vision.face import FaceClient
from azure.ai.vision.face.models import (
FaceDetectionModel,
FaceRecognitionModel,
FaceAttributeTypeDetection03
)
from azure.core.credentials import AzureKeyCredential

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

# Detect faces with attributes
image_url = "https://learn.microsoft.com/azure/ai-services/computer-vision/media/face-detection/face-landmarks-annotated.png"

detected_faces = client.detect_from_url(
url=image_url,
detection_model=FaceDetectionModel.DETECTION_03,
recognition_model=FaceRecognitionModel.RECOGNITION_04,
return_face_id=False,
return_face_attributes=[
FaceAttributeTypeDetection03.HEAD_POSE,
FaceAttributeTypeDetection03.BLUR,
FaceAttributeTypeDetection03.EXPOSURE,
FaceAttributeTypeDetection03.NOISE,
FaceAttributeTypeDetection03.MASK,
FaceAttributeTypeDetection03.QUALITY_FOR_RECOGNITION
]
)

print(f"Detected {len(detected_faces)} face(s):\n")

for i, face in enumerate(detected_faces):
rect = face.face_rectangle
print(f"Face {i+1}:")
print(f" Bounding box: left={rect.left}, top={rect.top}, "
f"width={rect.width}, height={rect.height}")

attrs = face.face_attributes
if attrs:
# Head pose
pose = attrs.head_pose
print(f" Head pose: pitch={pose.pitch:.1f}, roll={pose.roll:.1f}, yaw={pose.yaw:.1f}")

# Image quality attributes
print(f" Blur: {attrs.blur.blur_level} (value: {attrs.blur.value:.3f})")
print(f" Exposure: {attrs.exposure.exposure_level} (value: {attrs.exposure.value:.3f})")
print(f" Noise: {attrs.noise.noise_level} (value: {attrs.noise.value:.3f})")

# Mask detection
print(f" Mask: type={attrs.mask.type}, covers_nose_and_mouth={attrs.mask.nose_and_mouth_covered}")

# Recognition quality
print(f" Quality for recognition: {attrs.quality_for_recognition}")
print()

Tarefa 3: Detectar Rostos em Imagem Local

# Detect from local file
with open("group-photo.jpg", "rb") as f:
image_data = f.read()

faces = client.detect(
image_content=image_data,
detection_model=FaceDetectionModel.DETECTION_03,
recognition_model=FaceRecognitionModel.RECOGNITION_04,
return_face_id=False,
return_face_attributes=[
FaceAttributeTypeDetection03.HEAD_POSE,
FaceAttributeTypeDetection03.QUALITY_FOR_RECOGNITION
]
)

print(f"Found {len(faces)} faces in group photo")
for i, face in enumerate(faces):
quality = face.face_attributes.quality_for_recognition
print(f" Face {i+1}: quality={quality} {'✓' if quality == 'high' else '⚠'}")

Saída Esperada

Detected 1 face(s):

Face 1:
Bounding box: left=194, top=98, width=242, height=325
Head pose: pitch=-2.3, roll=1.5, yaw=-4.2
Blur: low (value: 0.042)
Exposure: goodExposure (value: 0.623)
Noise: low (value: 0.089)
Mask: type=noMask, covers_nose_and_mouth=False
Quality for recognition: high

Found 5 faces in group photo
Face 1: quality=high ✓
Face 2: quality=high ✓
Face 3: quality=medium ⚠
Face 4: quality=high ✓
Face 5: quality=low ⚠

Quebra & conserta

CenárioSintomaCausa RaizCorreção
Nenhum rosto detectadoArray vazio retornadoRosto muito pequeno (< 36x36 px) ou severamente ocluídoGaranta rostos com pelo menos 36x36 pixels; use maior resolução
403 Forbidden no identifyAcesso negadoRecurso requer aprovação de Acesso LimitadoSolicite em https://aka.ms/facerecognition; use apenas detecção
Erro InvalidImage400 Bad RequestFormato de imagem não suportado ou corrompidoUse JPEG, PNG, GIF ou BMP; máximo 6MB
Modelo de detecção erradoAtributos ausentesDetection_01 não suporta todos os atributosUse detection_03 para suporte mais recente de atributos
Resultados inconsistentesContagens diferentes de rostosDiferenças entre modelos de detecçãoUse um modelo de detecção consistentemente

Verificação de Conhecimento

1. Quais recursos do serviço Face requerem aprovação de Acesso Limitado?

2. Qual é o tamanho mínimo detectável de rosto no serviço Azure Face?

3. Qual modelo de detecção você deve usar para o suporte mais completo de atributos?

4. O que 'qualityForRecognition' indica?

5. Qual é a diferença entre detecção facial e identificação facial?

Limpeza

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

Saiba Mais