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:
- Digitização de Documentos: Extrair texto de fotos de documentos
- Leitura de Placas: Identificar números de placas veiculares
- Análise de Sinalizações: Ler letreiros, placas e avisos em fotos
- Processamento de Recibos: Extrair informações de notas fiscais
- 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).