Pular para conteúdo

AWS REKOGNITION - Detect Moderation Labels (Moderação de Conteúdo)

O que é esta operação?

A operação detectModerationLabels do AWS Rekognition é responsável por detectar conteúdo impróprio, violento, adulto ou ofensivo em imagens.

Por que esta operação existe?

O Rekognition detectModerationLabels existe para:

  1. Moderação Automática: Filtrar conteúdo impróprio em plataformas sociais
  2. Proteção de Menores: Bloquear conteúdo adulto
  3. Conformidade Legal: Cumprir regulamentações de conteúdo
  4. Segurança da Marca: Evitar associação com conteúdo inadequado
  5. Redução de Custos: Automatizar moderação manual

Como funciona internamente?

Código interno (aws-rekognition.executor.ts:168-180):

private async detectModerationLabels(client: RekognitionClient, data: any, context: ExecutionContext): Promise<any> {
  const command = new DetectModerationLabelsCommand({
    Image: this.getImageSource(data, context),
    MinConfidence: data.minConfidence || 60,
  });

  const response = await client.send(command);
  return {
    moderationLabels: response.ModerationLabels || [],
    count: response.ModerationLabels?.length || 0,
    isSafe: (response.ModerationLabels?.length || 0) === 0,
  };
}

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "detectModerationLabels"
config object Sim Credenciais AWS
s3Bucket/s3Key string Condicional Localização da imagem
imageBytes string Condicional Imagem em base64
minConfidence number Não Confiança mínima (padrão: 60)
responseVariable string Sim Variável para resultado

Exemplo: Moderação de Upload de Usuários

{
  "name": "Moderação Automática de Conteúdo",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "media_1",
      "type": "media",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Upload",
        "parameters": {
          "message": "Envie sua imagem:",
          "variableName": "userImage",
          "mediaType": "image"
        }
      }
    },
    {
      "id": "rekognition_1",
      "type": "aws_rekognition",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Moderar",
        "operation": "detectModerationLabels",
        "config": {
          "region": "us-east-1",
          "accessKeyId": "KEY",
          "secretAccessKey": "SECRET"
        },
        "imageBytes": "{{userImage}}",
        "minConfidence": 75,
        "responseVariable": "moderation"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Verificar Segurança",
        "parameters": {
          "variableA": "{{moderation.isSafe}}",
          "operator": "equals",
          "variableB": "true"
        }
      }
    },
    {
      "id": "message_approved",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Aprovado",
        "parameters": {
          "message": "✅ Imagem aprovada! Sua foto foi publicada."
        }
      }
    },
    {
      "id": "message_blocked",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Bloqueado",
        "parameters": {
          "message": "❌ Conteúdo bloqueado\n\nSua imagem contém conteúdo impróprio e não pode ser publicada.\n\n⚠️ Encontrados {{moderation.count}} problemas."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "media_1" },
    { "source": "media_1", "target": "rekognition_1" },
    { "source": "rekognition_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_approved", "label": "true" },
    { "source": "condition_1", "target": "message_blocked", "label": "false" },
    { "source": "message_approved", "target": "end_1" },
    { "source": "message_blocked", "target": "end_1" }
  ]
}

Resposta do Node

{
  "moderationLabels": [
    {
      "Name": "Violence",
      "ParentName": "",
      "Confidence": 92.5
    }
  ],
  "count": 1,
  "isSafe": false
}

Boas Práticas

SIM: Use minConfidence: 75+ para evitar falsos positivos | Implemente revisão humana para casos limítrofes | Log todas as moderações para auditoria

NÃO: Não confie 100% sem revisão humana para decisões críticas | Não use threshold muito baixo (<60)

💡 Dica: O campo isSafe é um atalho conveniente para verificar se imagem não tem problemas.

detectLabels | detectFaces