- Software NitroPDF, a ferramenta de reconhecimento de caracteres (OCR) ao conjunto de todos os Termos num só ficheiro, e sucessiva separação através da ferramenta split;
- O favorito de muitos, no site I❤PDF, usando a ferramenta OCR acessível através do link ao ficheiro com todos os Termos, que devolveu um ficheiro muito mais pesado (em Mb) que aquele produzido pelo software NitroPDF; separou-se o ficheiro em vários PDFs usando o mesmo site.
![]() |
| Versão original do programa (versão 1.2) - versão anterior mantinha a mesma interface mas foi descartada por apresentar imensos bugs. |
NOVA VERSÃO DO PROGRAMA
Vamos a factos
Versão 1.3
Versão 1.4
A funcionalidade de OCR é suportada por bibliotecas como:
- EasyOCR: requer várias dependências.
- PyTorch: uma das mais pesadas, usada em segundo plano para suporte a modelos de deep learning (mesmo sem GPU).
- TorchVision, Scipy, Shapely, Numpy, entre outras: todas são incluídas automaticamente devido às dependências diretas ou indiretas.
Estas bibliotecas trazem ficheiros compilados (.pyd, .dll, .so) e modelos pré-treinados, aumentando drasticamente o volume.
2. Modelos de machine learning incluídos no bundle
O EasyOCR vem com dois modelos de base:
- Detection model (para localizar o texto).
- Recognition model (para identificar os caracteres).
Estes modelos são ficheiros binários .pth e .onnx, e são automaticamente incorporados quando se gera o executável; só estes dois modelos já podem ultrapassar os 100 MB quando combinados!
Quanto a esta particularidade, o programa descarrega da internet ainda outros dois ficheiros para uma pasta dentro do root do utilizador, localizando-se em
<Letra do disco>:\Users\<utilizador>\.EasyOCR em sistemas operativos Windows.
Estes ficheiros são descarregados uma vez que o compilador Python não embute automaticamente os modelos pré-treinados do EasyOCR; o que ele embute são os módulos de código e bibliotecas, mas não os ficheiros binários dos modelos usados pelo EasyOCR.
Assim, sempre que o EasyOCR é executado:
- Verifica se os modelos de deteção e reconhecimento já existem localmente
- Se não existirem, faz download automático a partir dos servidores oficiais.
- Guarda-os no disco para uso futuro — assim, só descarrega uma vez.
![]() |
| Consola embutida no programa para dar a conhecer ao utilizador o progresso dos trabalhos a ser executados em segundo plano - de outra forma, o programa pode parecer congelado. |
Os dois ficheiros em específico são:
- Modelo CRAFT → craft_mtl_25k.pth (para detetar regiões de texto nas imagens) - cerca de 81 MB.
- Modelo de reconhecimento correspondente → latin_g2.pth (para converter as regiões detetadas em texto) enquanto modelo de reconhecimento de texto para línguas latinas do grupo 2, definido como tal pelos programadores do EasyOCR - cerca de 15 MB.
3. Distribuição independente do Python
Como o objetivo foi gerar um .EXE que funcione em qualquer computador sem necessidade de instalar o Python, o PyInstaller inclui:
- O interpretador Python completo embutido.
- Todas as bibliotecas standard.
- As bibliotecas de terceiros (inclusive aquelas que não seria preciso usar se o script corresse num ambiente virtual com o Python instalado).
RESULTADO: o .EXE torna-se autossuficiente mas pesado.
4. Tkinter, PIL e outras bibliotecas gráficas
A interface gráfica baseada em Tkinter, com suporte a imagens e manipulação de PDFs, também exige incluir:
- Pillow (PIL): para imagens das páginas dos PDFs (OCR).
- fitz/PyMuPDF: para conversão das páginas dos PDFs em imagens para o OCR.
Mesmo que visualmente o programa seja simples, estas bibliotecas gráficas são grandes em termos de ficheiros internos.
Em género de conclusão...
O aumento do tamanho não é desperdício — é consequência da autonomia que o programa ganhou: não depende de nada externo, pode ser executado em qualquer Windows moderno, e realiza OCR com tecnologia de ponta localmente. É nada mais que o preço justo por conveniência, autonomia e funcionalidade profissional!
O programa, totaliza assim 247 MB, e encontra-se pronto a utilizar sem precisar de ser instalado.
Algumas particularidades:
- Ao executar o programa, pode simplesmente executar como acontecia na versão 1.3 usando o botão "RENOMEAR (já com OCR feito)";
- O novo botão, e por enquanto "(EXPERIMENTAL) Realizar OCR e renomear" é denominado como experimental pois com o uso e as críticas de quem usa o programa é que se pode vir a entender se é funcional ou não, isto é, se o OCR foi verdadeiramente bem aplicado e/ou se os padrões de reconhecimento de caracteres se encontram bem aplicados
![]() |
| Janela principal do programa na sua versão 1.4, apresentando a nova funcionalidade e botão, bem como avisos ao utilizador |
- O programa sempre que for executado usando a ferramenta de OCR recorre à CPU (processador) da máquina para fazer o reconhecimento de caracteres. O uso da CPU foi escolhido, apesar de mais lento, em relação à GPU (placa gráfica) uma vez que o EasyOCR usa, por defeito, a GPU para aplicar os modelos de machine learning. Assim, a razão para não usar prende-se com as máquinas que os técnicos BUPi têm, em regra, ao seu dispor, pelo que quem desenvolveu o EasyOCR alavancou o poder das placas gráficas para esse trabalho de reconhecimento de caracteres tendo em conta as placas da NVIDIA com tecnologia CUDA. Sabendo que nos balcões municipais, em regra, nem placas gráficas independentes há (muitas vezes são chipsets na própria motherboard), não mudar o processamento para a CPU poderia causar erros graves, especialmente se não estivermos também a ter em conta máquinas com hardware modesto ou de baixa gama.
- O tempo de execução do OCR é somente dependente das capacidades da CPU e da qualidade da digitalização dos Termos de Responsabilidade. Durante o tempo em que o reconhecimento de caracteres está a ser feito, o programa fica irresponsivo, pelo que a maior ou menor demora, para além dos motivos supra-citados, dever-se-á também ao número de ficheiros PDF a ser processados. No final, o programa liberta uma caixa de informações a dizer que n ficheiros foram renomeados.
- O programa não edita os PDF, isto é, não lhes aplica e neles guarda o reconhecimento de caracteres, mas apenas faz reconhecimento para consumo próprio e renomeia os ficheiros com o número do Processo.
- Este procedimento cria cópias dos ficheiros originais, agora com os nomes de ficheiro corretos e prontos a ser carregados em série para a plataforma.
LINK PARA DESCARREGAR AS DUAS DIFERENTES VERSÕES
De futuro, partilharei o código fonte para a construção do programa, pelo que os eventuais interessados dever-me-ão contactar para o devido efeito.
Em todo o caso, o objetivo desta ferramenta é só alavancar, mais uma vez, as potencialidades do BUPi, não tendo este programa sido desenvolvido com qualquer interesse financeiro, de reconhecimento, ligação ou filiação ao projeto BUPi, nem muito menos com vista a causar danos aos equipamentos dos técnicos. Assim, ao descarregar, o técnico está a reconhecer que qualquer dano ocorrido, não poderá ser incutida a mim a responsabilidade pelo incidente. De facto, não tem como haver incidente algum, a não ser que a manutenção dos computadores de trabalho não seja feita, e qualquer sobreaquecimento é só culpa dessa irresponsabilidade!
Mais uma vez apelo: critiquem, comentem, partilhem sugestões, usem o meu e-mail no botão de informações do programa, porque sem feedback todo o meu esforço pode parecer uma grande missão, mas se não prestar, não serve a ninguém!


