Como extrair texto de imagens com Azure AI Vision (OCR)
Digitalizar faturas, talões ou documentos em papel deixa de ser um problema quando o texto passa a ser lido automaticamente. Com o Azure AI Vision consegues extrair texto de imagens (OCR) em poucos minutos, através da funcionalidade Read da Image Analysis. O resultado é texto pesquisável, pronto a guardar numa base de dados ou a enviar para um relatório.
Pré-requisitos
- Uma subscrição ativa do Azure.
- Um recurso de Azure AI Services (ou Computer Vision) criado no portal, numa região que suporte a Image Analysis 4.0.
- Python 3.8 ou superior instalado.
- A chave e o endpoint do recurso à mão.
- Uma imagem de teste com texto (por exemplo, a fotografia de um talão).
Passo 1: Criar o recurso e guardar as credenciais
No portal do Azure, cria um recurso Azure AI Services. Depois de criado, abre a secção Keys and Endpoint e copia a KEY 1 e o Endpoint. Nunca coloques a chave dentro do código: guarda-a em variáveis de ambiente.
setx VISION_KEY "a-tua-chave"
setx VISION_ENDPOINT "https://o-teu-recurso.cognitiveservices.azure.com/"
Em macOS ou Linux, usa export VISION_KEY="..." e export VISION_ENDPOINT="...". Fecha e volta a abrir o terminal para as variáveis ficarem ativas.
Passo 2: Instalar o SDK de Image Analysis
O pacote oficial trata de toda a comunicação com o serviço, por isso não precisas de construir pedidos HTTP à mão.
pip install azure-ai-vision-imageanalysis
Passo 3: Extrair texto de uma imagem local
Este é o exemplo mínimo para fazer OCR. Abres a imagem em modo binário, pedes a funcionalidade READ e percorres o resultado. O serviço devolve o texto organizado em blocos e linhas.
import os
from azure.ai.vision.imageanalysis import ImageAnalysisClient
from azure.ai.vision.imageanalysis.models import VisualFeatures
from azure.core.credentials import AzureKeyCredential
client = ImageAnalysisClient(
endpoint=os.environ["VISION_ENDPOINT"],
credential=AzureKeyCredential(os.environ["VISION_KEY"]),
)
with open("talao.png", "rb") as f:
image_data = f.read()
result = client.analyze(
image_data=image_data,
visual_features=[VisualFeatures.READ],
)
if result.read is not None:
for block in result.read.blocks:
for line in block.lines:
print(line.text)
Se tudo correr bem, vês no terminal cada linha de texto da imagem, pela ordem em que aparece.
Passo 4: Ler texto a partir de um URL
Quando a imagem já está online (num blob público, por exemplo), não precisas de a descarregar. Basta trocar o método.
result = client.analyze_from_url(
image_url="https://exemplo-publico/imagem.png",
visual_features=[VisualFeatures.READ],
)
texto = "\n".join(
line.text
for block in result.read.blocks
for line in block.lines
)
print(texto)
Repara que juntámos tudo numa única string. É assim que normalmente guardas o OCR numa coluna de texto.
Passo 5: Ver a confiança de cada palavra
O OCR nunca é perfeito. Cada palavra vem com um valor de confiança entre 0 e 1, e isso permite-te decidir o que aceitas automaticamente e o que envias para revisão humana.
LIMITE = 0.8
for block in result.read.blocks:
for line in block.lines:
for word in line.words:
if word.confidence < LIMITE:
print("Rever:", word.text, round(word.confidence, 2))
Uma regra simples e eficaz: aceitar acima de 0,8 e marcar o resto para validação.
Verificar o resultado
Compara o texto impresso com a imagem original: os números e as datas devem coincidir. Erros comuns e como os resolver:
- 401 / Access denied: a chave ou o endpoint estão trocados, ou o recurso está noutra região.
- 400 InvalidImageSize: a imagem tem de ter, no mínimo, 50x50 pixels e não pode ultrapassar os limites de tamanho do serviço (imagens muito grandes devem ser redimensionadas).
- Resultado vazio: a foto está desfocada ou com pouca luz. Fotografa o documento direito, com bom contraste, e repete.
Dica: antes de investires em pré-processamento de imagem, testa simplesmente uma fotografia melhor. Costuma resolver a maioria dos casos.
Conclusão
Já tens um OCR funcional em Python com o Azure AI Vision, com leitura de ficheiros locais e de URLs, e com um filtro de confiança para controlar a qualidade. O passo seguinte natural é gravar o texto extraído numa tabela (SQL Server, Lakehouse ou Fabric) e pesquisar sobre ele. E se o que precisas não é texto solto, mas sim campos estruturados de faturas e formulários? Nesse caso, o Azure AI Document Intelligence é o serviço certo — qual dos dois se adapta melhor aos documentos que tens em mãos?