Skip to content

Repository files navigation

🔍 OCR — Document Intelligence & Transcrição

OCR · Computer Vision · OpenCV · Tesseract · Document Intelligence · Speech-to-Text · Research Automation

Status

🟡 Em desenvolvimento — Projeto de Pesquisa / P&D

Conjunto de pipelines locais em Python para extração estruturada de documentos (PDFs digitalizados, fluxogramas, apresentações PPTX, DOCX) e transcrição de áudio, evoluindo de OCR simples para Document AI / Intelligent Document Processing (IDP) — a saída não é só texto, é um manifesto JSON estruturado (posição, forma, cor, hierarquia, relações entre elementos) pronto para um agente de IA reconstruir o documento em qualquer ferramenta.

O projeto faz parte de uma linha contínua de experimentação em automação de workflows de pesquisa, processamento documental e inteligência aplicada a dados.

🚧 Em desenvolvimento: novas funcionalidades, melhorias de precisão, automações e casos de uso estão sendo estudados. Roadmap completo e priorizado em ROADMAP.md.


Sobre o Projeto

O objetivo do sistema é transformar documentos digitalizados e áudios em conteúdo estruturado, reduzindo o trabalho manual necessário para processar material que não possui camada de texto pesquisável — nem estrutura visual explícita.

O projeto evoluiu em duas frentes:

Documentos (notebooks/OCR Document/) — de um extrator de texto simples para um pipeline de Document AI completo:

Imagem / PPTX / DOCX / PDF
        ↓
Pré-processamento (OpenCV)
        ↓
OCR multi-engine (Tesseract + EasyOCR)
        ↓
Análise estrutural (docflow + visão computacional)
        ↓
Classificação semântica (BPMN)
        ↓
Manifesto JSON estruturado
        ↓
JSON / MD / DOCX / PDF / SVG / PNG

Áudio (notebooks/OCR Audio/) — transcrição local de reuniões, entrevistas e notas de voz:

Áudio / Vídeo
        ↓
Extração de faixa (FFmpeg)
        ↓
Transcrição (faster-whisper)
        ↓
TXT / SRT / VTT / XLSX / Relatório HTML+PDF

Ambos os pipelines são pensados para automatizar o máximo possível da configuração e preparação do ambiente — sem depender de serviços de nuvem.


Objetivo

Desenvolver ferramentas capazes de:

  • Extrair texto e estrutura visual de documentos digitalizados e apresentações;
  • Reconstruir fluxogramas e swimlanes como grafos estruturados (nós, conectores, hierarquia);
  • Transcrever áudio e vídeo localmente, sem enviar dados a APIs externas;
  • Automatizar a preparação do ambiente (Tesseract, Poppler, FFmpeg, idioma);
  • Medir a própria qualidade da extração (WER/CER, ground truth, confiança por elemento);
  • Gerar saída estruturada pronta para consumo por agentes de IA.

Funcionalidades

Document Intelligence (OCR3 → OCR4 → OCR5)

Versão Principal adição
OCR3 Pipeline base: Tesseract + docflow para detecção de nós/conectores
OCR4 DPI 450, RegionOCR (crop por nó + upscale + PSM dedicado), EasyOCR, manifesto v2.0
OCR5 NodeDetector (CV puro via OpenCV), ConnectorDetector (Hough), SemanticTyper (BPMN), manifesto v3.0
OCR5 v2 from_node/to_node reais nos conectores, ground truth manual, filtro de falsos positivos, paralelismo por página

docflow.py — pipeline local (sem LLM) que lê imagem/PPTX/DOCX, extrai a estrutura visual para um modelo JSON intermediário e reconstrói com matplotlib, exportando de volta para PPTX/DOCX/SVG/PNG.

Transcrição de Áudio

  • Extração automática de FFmpeg local (sem instalação manual no Windows);
  • Detecção de arquivos de áudio/vídeo e extração de faixa de áudio (.mp4.wav);
  • Transcrição via faster-whisper (v2 — CTranslate2, ~3–10x mais rápido que openai-whisper);
  • Execução paralela por arquivo (ProcessPoolExecutor);
  • Exportação em .txt, .srt, .vtt, .xlsx, e relatório visual em HTML/PDF.

Tecnologias

Categoria Tecnologia
Linguagem Python 3.10
OCR Tesseract OCR (PSM 3/6/7/8/11), EasyOCR
Computer Vision OpenCV (contornos, Hough, Canny, morfologia), scikit-image (Sauvola)
PDF / Office pdf2image + Poppler, python-pptx, python-docx, pdfplumber, PyMuPDF
Transcrição faster-whisper (CTranslate2)
Renderização Pillow (DPI 450), matplotlib, reportlab
Métricas de qualidade jiwer (WER/CER), rapidfuzz (fuzzy ratio)
Análise / Dashboard pandas, plotly
Experimentação Jupyter Notebook

Arquitetura (OCR5 — pipeline mais atual)

                    ┌───────────────────────────┐
                    │  Imagem / PPTX / DOCX / PDF │
                    └──────────────┬──────────────┘
                                   ▼
                    ┌───────────────────────────┐
                    │  S1 DocumentIngester        │
                    │  (renderer PIL DPI 450)     │
                    └──────────────┬──────────────┘
                                   ▼
                    ┌───────────────────────────┐
                    │  S2 Preprocessor (OpenCV)    │
                    │  otsu / adaptive / sauvola   │
                    └──────────────┬──────────────┘
                                   ▼
                    ┌───────────────────────────┐
                    │  S3 MultiEngineOCR           │
                    │  Tesseract + EasyOCR          │
                    └──────────────┬──────────────┘
                                   ▼
                    ┌───────────────────────────┐
                    │  S4 StructureAnalyzer         │
                    │  docflow + NodeDetector (CV)  │
                    │  + ConnectorDetector (Hough)  │
                    │  + SemanticTyper (BPMN)       │
                    └──────────────┬──────────────┘
                                   ▼
                    ┌───────────────────────────┐
                    │  Manifesto JSON v3.0          │
                    │  nós · conectores · fases      │
                    │  from_node/to_node · confiança │
                    └──────────────┬──────────────┘
                       ┌───────────┴───────────┐
                       ▼                        ▼
                ┌────────────┐          ┌──────────────┐
                │ JSON / MD  │          │ DOCX/PDF/SVG │
                └────────────┘          └──────────────┘

Estrutura do Repositório

OCR/
├── notebooks/
│   ├── OCR Document/
│   │   ├── OCR3_Pipeline_Profissional.ipynb
│   │   ├── OCR4_SuperOCR_Profissional.ipynb
│   │   ├── OCR5_DocumentIntelligence_Profissional.ipynb       (original)
│   │   ├── OCR5_DocumentIntelligence_Profissional_v2.ipynb    (atual — ver abaixo)
│   │   └── DocContextEngine.ipynb
│   └── OCR Audio/
│       ├── Extrator_Audio_Profissional.ipynb        (original — openai-whisper)
│       └── Extrator_Audio_Profissional_v2.ipynb      (atual — faster-whisper)
├── scripts/
│   ├── gerar_ocr5_notebook.py      — gerador do notebook OCR5 v2 (edite aqui, não o .ipynb)
│   ├── extrator_audio.py           — CLI do extrator de áudio (openai-whisper)
│   ├── extrator_audio_v2.py        — CLI equivalente usando faster-whisper (atual)
│   ├── docflow.py                  — pipeline local imagem/PPTX/DOCX → JSON → render/export
│   ├── run_ocr3_backtest.py / run_ocr4_superocr.py  — versões CLI dos pipelines de documento
│   └── gerar_*.py                  — geradores de apresentações/fluxogramas para o projeto RG2
├── Anotações/           — anotações originais de decisão técnica; fonte primária do ROADMAP.md
├── ffmpeg_bin/, poppler_bin/, tessdata/  — binários e dados de idioma usados pelos pipelines
├── ROADMAP.md            — todas as melhorias propostas, com status (feito/backlog/descartado)
└── HISTORICO.md          — changelog cronológico do projeto

Pessoas/, tessdata (processados)/ e saida_transcricao/ não fazem parte do repositório git (.gitignore) — são dados pessoais/de terceiros e saídas geradas localmente, não código-fonte.


Convenção de versionamento: por que existem arquivos _v2

Este projeto nunca sobrescreve um notebook/script que já tem conteúdo funcional — uma nova geração de melhorias vira um arquivo _v2 (depois _v3, e assim por diante) ao lado do original, que fica intacto como referência histórica e continua abrindo/rodando no Jupyter normalmente. Isso é além do que o próprio git log já preserva: o objetivo é não depender de navegar histórico de commits para recuperar uma versão anterior que funcionava.

OCR5_DocumentIntelligence_Profissional_v2.ipynb é escrito programaticamente por scripts/gerar_ocr5_notebook.py (não é editado à mão) — isso permite revisar e versionar as células como código Python normal, com diff legível. Para alterar a v2:

python "scripts/gerar_ocr5_notebook.py"

executado a partir de notebooks/OCR Document/ — ele escreve OCR5_DocumentIntelligence_Profissional_v2.ipynb no diretório atual (nunca o arquivo sem sufixo).


Como Executar

1. Clonar o repositório

git clone https://github.com/Dubbern/OCR.git
cd OCR

2. Abrir o notebook desejado

  • Documentos: notebooks/OCR Document/OCR5_DocumentIntelligence_Profissional_v2.ipynb
  • Áudio: notebooks/OCR Audio/Extrator_Audio_Profissional_v2.ipynb

Use Jupyter Notebook, Jupyter Lab, VS Code ou Google Colab (quando compatível com as dependências).

3. Executar o pipeline de documentos

# Processar uma pasta inteira
resultados = backtest.run('minha_pasta/')
ground_truth = load_ground_truth('minha_pasta/', GROUND_TRUTH)
df = comparator.compare_all(resultados, ground_truth=ground_truth)
comparator.print_summary(df)
comparator.dashboard(df)

4. Executar a transcrição de áudio

Defina MODELO_WHISPER, IDIOMA_ALVO e PASTA_SAIDA nas células de configuração e rode as seções em ordem — a célula de instalação prepara FFmpeg e faster-whisper automaticamente.


Uso no Windows

Os dois pipelines têm foco especial em automação do ambiente Windows: detectam e configuram Tesseract, Poppler e FFmpeg localmente (copiando o executável para uma pasta *_bin/ do projeto), sem exigir instalação manual prévia.


Casos de Uso

Pesquisa Acadêmica

Extração de texto de artigos, questionários e documentos digitalizados.

Document Intelligence

Transformação de fluxogramas, swimlanes e apresentações em grafos estruturados para agentes de IA.

Transcrição de Reuniões e Entrevistas

Transcrição local (sem nuvem) com legendas, planilha de segmentos e relatório visual.

Workflow de Pesquisa

Integração do OCR e da transcrição com pipelines maiores de análise documental.


O que este projeto demonstra

  • Pipelines de OCR multi-engine (Tesseract + EasyOCR) com fusão por confiança;
  • Visão computacional aplicada a documentos (contornos, Hough, morfologia, binarização adaptativa);
  • Document Layout Analysis e geração de representação semântica (BPMN) para agentes de IA;
  • Medição de qualidade de extração (WER/CER, ground truth, confiança por elemento) em vez de "OCR às cegas";
  • Transcrição de áudio local otimizada (CTranslate2, VAD, paralelismo);
  • Automação de configuração de ambiente (Tesseract/Poppler/FFmpeg) no Windows;
  • Engenharia de repositório: histórico documentado, roadmap priorizado e convenção de versionamento.

Pesquisa e Desenvolvimento

O projeto está sendo utilizado como base para experimentação em processamento documental, transcrição e automação de workflows de pesquisa:

OCR / Transcrição
      ↓
Document / Speech Processing
      ↓
Structured Extraction
      ↓
Quality Measurement (WER/CER/ground truth)
      ↓
Data Pipeline
      ↓
Research Automation / AI Agent Grounding

A intenção é evoluir a solução para workflows capazes de processar documentos e áudio de forma mais automatizada e integrá-los a outras ferramentas de análise e IA — ver a visão de longo prazo em ROADMAP.md.


Limitações

Pipeline de pesquisa e prototipagem, não um sistema de produção:

  • Tempo de processamento de minutos por documento grande (sem API/interface além do notebook);
  • Qualidade do OCR depende de resolução, ruído e layout do documento;
  • Setas curvas e conectores com cotovelo não são detectados corretamente pelo ConnectorDetector;
  • Classificação semântica (BPMN) é regex, funciona bem só para vocabulário de processos corporativos em português;
  • Transcrição depende de hardware local (GPU acelera bastante, mas roda em CPU também).

Detalhes completos e análise crítica versão a versão: Anotações/README_OCR5.md, Anotações/readmeocr4.md.


Melhorias Futuras

Lista completa, priorizada e com justificativa de cada decisão em ROADMAP.md. Destaques do backlog atual:

  • WhisperX / Distil-Whisper (ganho adicional de velocidade na transcrição);
  • Conectores por Graph Neural Network (substituindo a heurística Hough);
  • Detecção de mudanças entre versões de manifesto (rastrear evolução de processos);
  • Agente de reconstrução end-to-end (manifest → draw.io/Mermaid/BPMN);
  • Benchmark em dataset público de fluxogramas (FlowchartQA, DiagramNet).

Status Atual

🟡 Em desenvolvimento — Pesquisa / P&D

A implementação atual já contempla:

  • ✅ Pipeline de Document Intelligence (OCR3 → OCR4 → OCR5 v2) com manifesto estruturado;
  • ✅ Detecção de nós por visão computacional, independente do docflow;
  • ✅ Conectores com origem e destino reais (from_node/to_node);
  • ✅ Ground truth manual + métricas WER/CER reais para imagens;
  • ✅ Paralelismo por página no pipeline de documentos;
  • ✅ Transcrição local via faster-whisper (~3–10x mais rápido que a versão anterior);
  • ✅ Automação de configuração de ambiente (Tesseract/Poppler/FFmpeg) no Windows;
  • ✅ Histórico (HISTORICO.md) e roadmap priorizado (ROADMAP.md) mantidos no repositório;
  • 🚧 Próximos passos e itens descartados (com justificativa) documentados em ROADMAP.md.

Autor

Yuri Fernando Dubbern

AI/ML Engineer · Computer Vision · Document Intelligence · Automation · Research Engineering

LinkedIn · GitHub · Lattes · Linktree

About

Extrator OCR para PDFs digitalizados (Tesseract + OpenCV), com pipeline adaptável a documentos acadêmicos e formulários.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages