(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como extrair texto de imagens com Azure AI Vision (OCR)

João Barros 14 de July de 2026 4 min de leitura

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?