Marcio Cunha

Como extrair texto de PDF escaneado com OCR no Python

Aprenda a automatizar a extração de texto de documentos digitalizados em PDF utilizando bibliotecas open-source de OCR e Python no seu computador.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • Processos de OCR local garantem privacidade total ao não enviar dados sensíveis para servidores de terceiros na nuvem.
  • A combinação de PyMuPDF com Tesseract OCR resolve documentos em formato de imagem com alta taxa de acerto.
  • Pré-processamento de imagem com limiarização e correção de rotação aumenta drasticamente a precisão da leitura de caracteres.
  • A automação em lote permite processar pastas inteiras de contratos e faturas digitalizadas em poucos segundos.
  • Tratamento de exceções e limpeza de ruído textual evitam erros comuns na hora de estruturar dados extraídos.

O desafio de extrair dados de arquivos digitalizados

Quando recebemos um documento que foi digitalizado por um scanner ou fotografado por um celular, o arquivo em PDF gerado costuma ser apenas uma grande imagem agrupada em formato digital. Para o computador, aquelas palavras visíveis na tela não passam de pixels coloridos, tornando impossível selecionar, copiar ou buscar termos específicos sem uma ajuda especializada. É exatamente aqui que entra o conceito de OCR (Reconhecimento Óptico de Caracteres), uma tecnologia capaz de analisar formas visuais em imagens e convertê-las em texto legível por máquinas.

Em muitos cenários corporativos ou acadêmicos, precisamos processar pilhas desses documentos em formato digital sem depender de serviços pagos na nuvem que cobram por página ou expõem dados confidenciais de clientes. A linguagem Python oferece um ecossistema robusto e gratuito para resolver essa demanda de ponta a ponta na sua própria máquina. Se você já precisou extrair relatórios antigos ou conversou sobre a conversão de arquivos, talvez conheça ferramentas de terminal como as que detalhamos em nosso artigo sobre como converter PDF escaneado em texto com OCR no Linux, mas fazê-lo via código Python abre um leque gigantesco de automações personalizadas.

Preparando o ambiente e instalando as dependências necessárias

Antes de escrevermos qualquer linha de código em Python, precisamos preparar o terreno instalando a ferramenta base de OCR do sistema e as bibliotecas que farão a ponte entre o PDF e o motor de reconhecimento. O motor mais famoso e confiável do mundo open-source é o Tesseract, mantido pelo Google. Além dele, usaremos a biblioteca PyMuPDF (conhecida pelo pacote fitz) para converter páginas de PDF em imagens de alta resolução e a biblioteca pytesseract para chamar o motor de OCR diretamente do nosso script.

Para colocar a mão na massa de forma prática na sua máquina local, siga a sequência abaixo:

  1. Instale o motor Tesseract no seu sistema operacional (no Ubuntu ou Debian, use o comando sudo apt install tesseract-ocr tesseract-ocr-por para garantir o suporte ao português).
  2. Crie um ambiente virtual Python isolado para o seu projeto com o comando python3 -m venv venv e ative-o.
  3. Instale as bibliotecas Python necessárias executando o comando pip install pymupdf pytesseract pillow no seu terminal.

Convertendo páginas de PDF em imagens de alta resolução

O primeiro passo prático no código Python consiste em abrir o arquivo PDF e transformar cada uma de suas páginas em uma imagem digital que o motor OCR consiga enxergar com clareza. Fazer isso exige um cuidado especial com a resolução, pois imagens muito pequenas ou borradas fazem o Tesseract confundir letras parecidas, como a letra 'l' maiúscula com o número '1' ou a letra 'O' com o zero.

No trecho de código abaixo, abrimos o PDF, percorremos cada página de forma automatizada e geramos uma representação visual que será enviada para o reconhecimento de caracteres em seguida. Veja como implementar essa rotina de maneira limpa:

import fitz  # PyMuPDF import pytesseract from PIL import Image import io def pdf_para_imagens(caminho_pdf):     documento = fitz.open(caminho_pdf)     imagens = []     for numero_pagina in range(len(documento)):         pagina = documento.load_page(numero_pagina)         # Renderiza a página com zoom de 2x para melhorar a nitidez do OCR         zoom = 2.0         matriz = fitz.Matrix(zoom, zoom)         pix = pagina.get_pixmap(matrix=matriz)         imagem_bytes = pix.tobytes("png")         imagem = Image.open(io.BytesIO(imagem_bytes))         imagens.append(imagem)     return imagens

Aplicando o OCR e extraindo o texto com Python

Com as imagens das páginas devidamente geradas na memória do programa, podemos invocar o Tesseract para escanear cada uma delas e devolver o texto reconhecido em formato de string. Para garantir que o motor saiba exatamente qual idioma procurar, especificamos o parâmetro de linguagem, o que reduz drasticamente erros de interpretação em palavras acentuadas comuns no nosso idioma.

Se você quiser aprofundar ainda mais nas capacidades de reconhecimento de trechos isolados ou telas menores, vale a pena consultar o guia prático sobre como extrair texto de imagens no terminal com Tesseract OCR para entender opções avançadas de configuração do motor.

def extrair_texto_das_imagens(imagens):     texto_completo = ""     for indice, imagem in enumerate(imagens):         print(f"Processando página {indice + 1}...")         # Chama o Tesseract passando a imagem e o idioma português ('por')         texto_pagina = pytesseract.image_to_string(imagem, lang='por')         texto_completo += f"--- Página {indice + 1} ---
" + texto_pagina + "

"     return texto_completo # Exemplo de uso da função completa caminho = "documento_escaneado.pdf" minhas_imagens = pdf_para_imagens(caminho) resultado_ocr = extrair_texto_das_imagens(minhas_imagens) print(resultado_ocr[:500])

Lidando com ruídos e melhorando a precisão da leitura

Nem sempre os documentos digitalizados chegam até nós com iluminação perfeita ou sem manchas. Documentos antigos, notas fiscais amassadas ou cópias xerox ruins contêm ruídos visuais que confundem o algoritmo de OCR, gerando termos truncados ou caracteres corrompidos. Para contornar esse problema na prática, podemos aplicar técnicas básicas de processamento de imagem antes de enviar a página para o Tesseract.

Converter a imagem para tons de cinza e aplicar um limiar (binarização) elimina sombras de fundo e destaca o texto preto sobre o papel branco. Bibliotecas como a Pillow ou o OpenCV ajudam a limpar imperfeições rapidamente, garantindo que o fluxo de automação não quebre ao receber arquivos de qualidade inferior enviados por parceiros de negócios. Para aprofundar esses conceitos na prática em produção, confira também nossa análise técnica sobre Como testar optoacoplador na placa com multímetro digital.

Considerações finais sobre automação de documentos em escala

Automatizar a extração de texto de PDFs escaneados utilizando Python e ferramentas open-source coloca o controle total dos seus dados nas suas mãos, sem custos recorrentes com APIs na nuvem. Embora exija pequenos ajustes de iluminação e resolução dependendo da qualidade do documento original, a combinação de PyMuPDF com Tesseract entrega uma solução robusta, veloz e altamente customizável para qualquer rotina de escritório ou engenharia de dados.

Adotar esse tipo de rotina localmente economiza horas de digitação manual e viabiliza a criação de buscadores internos em bases documentais históricas da sua empresa. Com um script bem estruturado, você transforma pilhas de papel morto em dados estruturados prontos para análise.