Pular para conteúdo

AWS REKOGNITION - Detect Text (Detecção de Texto)

O que é esta operação?

A operação detectText do AWS Rekognition é responsável por detectar e extrair texto de imagens usando OCR (Optical Character Recognition).

Por que esta operação existe?

O Rekognition detectText existe para:

  1. Digitização de Documentos: Extrair texto de fotos de documentos
  2. Leitura de Placas: Identificar números de placas veiculares
  3. Análise de Sinalizações: Ler letreiros, placas e avisos em fotos
  4. Processamento de Recibos: Extrair informações de notas fiscais
  5. Moderação de Conteúdo: Detectar texto impróprio em imagens

Como funciona internamente?

Código interno (aws-rekognition.executor.ts:155-166):

private async detectText(client: RekognitionClient, data: any, context: ExecutionContext): Promise<any> {
  const command = new DetectTextCommand({
    Image: this.getImageSource(data, context),
  });

  const response = await client.send(command);
  return {
    textDetections: response.TextDetections || [],
    count: response.TextDetections?.length || 0,
    fullText: response.TextDetections?.filter(t => t.Type === 'LINE').map(t => t.DetectedText).join(' '),
  };
}

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "detectText"
config object Sim Credenciais AWS
s3Bucket/s3Key string Condicional Localização da imagem no S3
imageBytes string Condicional Imagem em base64
responseVariable string Sim Variável para resultado

Exemplo: Digitalização de Documentos

{
  "name": "Extração de Texto de Documento",
  "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": "Enviar Documento",
        "parameters": {
          "message": "📄 Envie foto do documento:",
          "variableName": "docImage",
          "mediaType": "image"
        }
      }
    },
    {
      "id": "rekognition_1",
      "type": "aws_rekognition",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Extrair Texto",
        "operation": "detectText",
        "config": {
          "region": "us-east-1",
          "accessKeyId": "KEY",
          "secretAccessKey": "SECRET"
        },
        "imageBytes": "{{docImage}}",
        "responseVariable": "extractedText"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Exibir Texto",
        "parameters": {
          "message": "✅ Texto extraído:\n\n{{extractedText.fullText}}\n\nTotal de elementos: {{extractedText.count}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "media_1" },
    { "source": "media_1", "target": "rekognition_1" },
    { "source": "rekognition_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Resposta do Node

{
  "textDetections": [
    {
      "DetectedText": "INVOICE",
      "Type": "LINE",
      "Confidence": 99.5,
      "Geometry": {}
    }
  ],
  "count": 15,
  "fullText": "INVOICE Total: $150.00 Date: 01/15/2025"
}

Boas Práticas

SIM: Use imagens com alta resolução e boa iluminação | Filtre por Confidence > 90% | Combine com Textract para documentos complexos

NÃO: Não use para documentos estruturados (use Textract) | Não ignore texto com baixa confiança sem revisão

💡 Dica: O campo Type distingue "LINE" (linha completa) de "WORD" (palavra individual).

detectLabels | AWS Textract