Skip to content

rprojetos/genai-ocr-python

Repository files navigation

Claro. Esta é uma análise completa do código fornecido, que se destina a extrair texto de arquivos PDF em português usando OCR (Reconhecimento Óptico de Caracteres).

Extração de texto de arquivos PDF usando OCR e Python

Introdução

O código automatiza o processo de "ler" um PDF que é, na verdade, uma imagem (como um documento escaneado) e converter seu conteúdo em texto editável. Ele faz isso instalando as ferramentas necessárias, configurando um ambiente Python e, em seguida, executando um script para converter as páginas do PDF em imagens e extrair o texto delas.


Análise Detalhada

O código é dividido em três partes principais: instalação de dependências do sistema, configuração do ambiente Python e o script de execução.

1. Instalação de Dependências do Sistema

sudo apt update
sudo apt install -y tesseract-ocr tesseract-ocr-por
sudo apt install poppler-utils

Este bloco de comandos é para sistemas operacionais baseados em Debian/Ubuntu (como o Linux Mint).

  • sudo apt update: Atualiza a lista de pacotes disponíveis para garantir que você está instalando as versões mais recentes.
  • sudo apt install -y tesseract-ocr tesseract-ocr-por:
    • tesseract-ocr: Instala o Tesseract, que é o motor de OCR de código aberto desenvolvido pelo Google. Ele é o coração do processo, responsável por analisar as imagens e reconhecer os caracteres.
    • tesseract-ocr-por: Instala o pacote de idioma para português. Isso é crucial para que o Tesseract reconheça corretamente caracteres específicos da nossa língua, como ç, ã, é, etc., melhorando muito a precisão.
  • sudo apt install poppler-utils: Instala as ferramentas Poppler. A biblioteca Python pdf2image (usada no script) precisa do Poppler para converter as páginas do PDF em imagens. Sem ele, o script falhará.

2. Configuração do Ambiente Python

python3 -m venv .venv && source .venv/bin/activate

pip install --upgrade pip
pip install pdf2image
pip install pytesseract
pip install pillow

Este bloco prepara o ambiente Python para executar o script, seguindo boas práticas de desenvolvimento.

  • python3 -m venv .venv && source .venv/bin/activate:
    • Cria um ambiente virtual chamado .venv. Isso isola as dependências do projeto, evitando conflitos com outros projetos Python no mesmo sistema.
    • source .venv/bin/activate ativa o ambiente virtual. Qualquer pacote instalado com pip a partir daqui será instalado dentro da pasta .venv.
  • pip install --upgrade pip: Atualiza o pip, o gerenciador de pacotes do Python.
  • pip install ...: Instala as bibliotecas Python necessárias:
    • pdf2image: Uma biblioteca que serve como interface para o Poppler, facilitando a conversão de PDFs em objetos de imagem que o Python pode manipular.
    • pytesseract: Uma biblioteca que atua como uma interface para o Tesseract. Ela permite que seu script Python envie imagens para o motor Tesseract e receba o texto extraído como retorno.
    • Pillow: Uma biblioteca fundamental para manipulação de imagens em Python. Tanto pdf2image quanto pytesseract dependem dela para funcionar.

3. O Script Python

from pathlib import Path
from pdf2image import convert_from_path
import pytesseract
import sys # Usado para acessar argumentos da linha de comando

# --- CONFIGURAÇÃO ---
# Define o caminho do PDF. Idealmente, passe como um argumento ao executar o script.
# Exemplo de como rodar: python seu_script.py caminho/para/o/arquivo.pdf
try:
    caminho_pdf_str = sys.argv[1]
except IndexError:
    print("ERRO: Você precisa fornecer o caminho para o arquivo PDF.")
    print("Uso: python seu_script.py <caminho_do_pdf>")
    sys.exit(1) # Encerra o script se nenhum arquivo for fornecido

pdf_path = Path(caminho_pdf_str)
caminho_saida_txt = pdf_path.with_suffix('.txt') # Cria um nome de arquivo de saída, ex: "relatorio.txt"

# Verifica se o arquivo PDF realmente existe antes de continuar
if not pdf_path.is_file():
    print(f"ERRO: O arquivo '{pdf_path}' não foi encontrado.")
    sys.exit(1)

# Parâmetros do OCR
lang = "por"
dpi = 300

# --- PROCESSAMENTO ---
all_text = ""

try:
    print(f"Processando o arquivo: {pdf_path.name}")
    print("Convertendo PDF para imagens... (isso pode demorar)")
    
    # Converte o PDF em uma lista de imagens (uma por página)
    pages = convert_from_path(str(pdf_path), dpi=dpi)
    
    print("Extraindo texto com OCR...")
    
    # Itera sobre cada página para extrair o texto
    for i, page in enumerate(pages, start=1):
        print(f" - Lendo página {i}/{len(pages)}")
        text = pytesseract.image_to_string(page, lang=lang)
        all_text += f"\n\n==== Página {i} ====\n\n{text.strip()}"

    # --- SAÍDA ---
    print(f"\nExtração concluída! Salvando texto em: {caminho_saida_txt.name}")
    
    # Salva todo o texto extraído em um arquivo .txt
    with open(caminho_saida_txt, 'w', encoding='utf-8') as f:
        f.write(all_text)

    print("Operação finalizada com sucesso!")

except Exception as e:
    print(f"Ocorreu um erro inesperado: {e}")

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages