Pular para o conteúdo principal

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

Tempo Estimado

45 min | Custo: $1-3 (estimado) | Domínio: 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​