Projecto de digitalização e transcrição
Projecto encontra-se ainda em desenvolvimento, sendo esta uma versão 1, com módulos ainda por desenvolver
Introdução
Este projecto utiliza serviços cloud e open-source, com o objectivo de extrair texto de jornais antigos. Foi efectuado benchmarking de vários serviços cloud de OCR (nomeadamente Amazon, Google e Azure) e open-source (Tesseract), tendo sido escolhido o serviço da Google Cloud entitulado Google Cloud Vision para o reconhecimento inicial de caracteres, visto que era o que apresentava melhor performance na lingua portuguesa e com mais informação contextual.
Durante o desenvolvimento foram efectuadas experiências de processamento de imagem, para se estabelecerem heurísticas e recomendações de como efectuar um tratamento de digitalizações de modo a obter o melhor resultado possível na identificação de caracteres. Métodos de aumento da resolução de imagem e segmentação de conteúdo (identificações automática de colunas, um layout típico de jornais antigos), foram desenvolvidos e aplicados com sucesso.
Requisitos
É necessária uma instalação Python 3.7 ou superior. A versão mais recente pode ser descarregada em python.org.
É necessário uma conta google para poder criar uma chave de acesso à API Google Cloud Vision.
Pode encontrar ajuda para a criação da chave de acesso no ficheiro API_KEY_tutorial.pdf.
Após obter o ficheiro JSON que contém a chave da API, defina o caminho do ficheiro na constante API_KEY
do ficheiro settings.py.
Instalação
Todas as bibliotecas necessárias podem ser instaladas com o comando:
make install
Utilizadores macOS necessitam instalar de a biblioteca poppler. Pode ser instalado via Homebrew. Caso não tenha o Homebrew instalado, escreva no terminal:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Depois instale o poppler:
brew install poppler
Acerca do código
O processo de transformação de imagens digitalizadas de um jornal para um PDF pesquisável tem os seguintes módulos e são executados conforme são necessários:
- Conversão de imagens digitalizadas em PDF
- Extracção de imagens de documentos PDF
- Aumento de resolução de imagem
- Segmentação de conteúdos
- OCR (Optical Caracter Recognition - Reconhecimento Óptico de Caracteres)
- Gerador de PDF pesquisável (com imagem original e texto)
Estra estrutura modular (ainda em desenvolvimento) possibilita a análise de layout e reconhecimento óptico de caracteres em jornais do final do séc XIX, com o objectivo de um no final gerar um ficheiro PDF pesquisável.
Na pasta apps
encontram-se três interfaces gráficos desenvolvidos para análise e experimentação dos processos. O funcionamento das três aplicações é independente do programa principal. Essas aplicações (com GUI), tem as seguintes funções:
Instruções
O programa está divido em vários módulos, que representam as diferentes fases do processo. Os módulos encontram-se na pasta lib
.
Os vários parâmetros do programa são atribuidos no ficheiro settings.py
.
Para uma listagem dos módulos e respectivo número, executar:
python3 main.py
Para executar os vários módulos usar o argumento opcional -e
ou --exe
seguido dos números correspondentes aos módulos que se pretende utilizar, por exemplo:
python3 main.py -e 1 2 3 4 5.1
No ficheiro settings.py pode defenir a variável job_id
para identificar diferentes lotes de ficheiros. Em caso da pasta já existir quando o código é executado é perguntado no terminal se deseja continuar e substituir a antiga pela nova pasta.
Descrição dos módulos
-
img_to_pdf.py
Converte as imagens em pdf.
O nº de páginas por pdf pode ser defenido em setings.py na constanteNUM_PAGES
.
Por exemplo, se se desejar que um grupo de imagens seja agrupado em vários pdfs com 4 páginas cada um:NUM_PAGES=4
. Para agrupar todas as imagens num único pdf:NUM_PAGES=0
. -
pdf_to_img.py
Separa as páginas de cada pdf em imagens jpeg. -
image_scale.py
Redimensiona as imagens de acordo com o factor escolhido em setings.py na constanteIMG_SCALE_RATIO
e com o método de interpolação escolhido emIMG_INTERPOLATION
-
image_segment.py
Procede à detecção das linhas divisórias das colunas e efectua o corte nos pontos detetados. Retorna todas as colunas detectadas em imagens separadas. -
ocr.py
5.1ocr_google
Submete as imagens pretendidas ao serviço de ocr da google cloud-vision e retorna um ficheiro json por cada imagem.5.2
ocr_to_hocr
(a implementar)
Transforma a resposta json da google no sistema padrão (hocr) para a criação de um pdf pesquisável.5.3
ocr_to_txt
(a implementar)
Retorna um ficheiro de texto com os caracteres reconhecidos.5.4
ocr_stats
(a implementar)
Retorna estatísticas de confiança do reconhecimento óptico de caracteres -
ocr_to_pdf.py
(a implementar)
Produz um pdf pesquisável.
Aplicações
Além das bibliotecas/módulos desenvolvidos, também se tem experimentado com interfaces gráficos baseados nas mesmas, de modo a facilitar a utilização de ferramentas por utilizadores finais.
image-processing
Interface gráfico (GUI) para experimentação de redimensionamento, segmentação e corte das colunas das páginas dos jornais.
Instalação das bibliotecas necessárias: image-procesing/make install
Para a execução do GUI correr no terminal: image-procesing/python3 process.py
Interface Gráfico
Funcionalidades:
-
single process
processa uma única página à escolha. -
batch process
processa um grupo de páginas numa pasta. -
input
local do ficheiro(single proces) ou pasta (batch process) a ser processado. -
output
local de gravação da página inteira (redimensionada ou não) e das colunas cortadas -
Resize
Activa as opções de redimensionamento -
Enlarge Factor(%)
factor de redimensionamento da página (100% representa o tamanho original) -
interpolation
Selecção do algorítmo de interpolação -
Crop mode
Definição do modo de corte aplicado na imagem.Tight
a área total da imagem corresponde ao tamanho da coluna detectadaFull
a área total da imagem corresponde ao tamanho da página, apresentando a coluna na sua posição original. -
FLD
(fast line detector)
Activação da defenição de parâmetros para a detecção de linhas -
length_threshold
Segmentos com comprimento inferior ao definido serão excluídos -
distance_threshold
Qualquer ponto que se apresente mais afastado do que este valor de um hipotético segmento é considerado fora do cálculo -
canny1
ecanny2
Primeiro e segundo limite, respectivamente, para o procedimento de histerese na função canny() -
Canny aperture size
Tamanho de abertura do operado sobel na função canny(). Para um valor de 0 a função canny() não é executada, e só são considerados os contornos da imagem -
do merge
Se selecionado é executado uma junção incremental dos segmentos. -
Preview
(Só em 'single process') Pré-visualização das linhas onde será efectuada a separação das colunas
Processo:
- A(s) página(s) escolhida(s) é(são) redimensionada(s) e gravada(s) numa nova pasta no caminho escolhido em 'output'. À pasta criada e à nova página é atribuido o mesmo nome do ficheiro da página original, acrescentando-se o sufixo '_s-n', onde n corresponde ao valor escolhido como factor de redimensionamento.
- Na página redimensionada são detectadas as linhas que fazem as divisões de colunas.
- A partir da segmentação é efectuado o corte como determinado em 'Crop mode'.
- As colunas são gravadas na pasta criada com o prefixo 'col_n', onde n corresponde ao número da coluna, e com o mesmo sufixo atribuido à pasta e à página redimensionada.
ocr-analytics
GUI para análise estatistica das respostas do serviço Google Cloud Vision.
Instalação das bibliotecas necessárias: ocr-analytics/make install
Para a execução do GUI correr: ocr-analytics/python3 ocr-analytics.py
Descrição do interface gráfico
-
img file / Browse
Selecção da imagem a analisar -
json file / Browse
Selecção do ficheiro de resposta json. Esta caixa é automaticamente preenchida quando se submete uma imagem aos serviços da google. -
Send File
Submissão da imagem aos serviços da google. -
ymbols/ Words
Selecção dos dados a anlisar — por simbolo (caracter) ou palavra. -
Load data
Carrega os dados para a tabela. -
Plot Page
Exibe a imagem do documento em análise. -
Plot HM_S
Heat-Map simbolos. Exibe uma distribuição das incidências dos caractere reconhecidos por número de confiança. -
Plot HM_W
Heat-Map palavras. Exibe uma distribuição das incidências das palavras reconhecidas por número de confiança. -
Plot HM_B
Heat-Map Quebras. Exibe uma distribuição das incidências das quebras de linhas e parágrafos. -
Plot LineBrks
Exibe a localização na imagem em análise das quebras de linha detectadas. -
preview text
Mostra no quadro imediatamente abaixo o texto reconhecido pelo serviço ocr. -
clear breaks
Apaga as quebras de linha e condensa todo o texto num só parágrafo. -
save txt
Grava o texto reconhecido para um ficheiro txt. -
describe data
Descrição dos dados estatísticos obtidos. -
Confidence abs
Dados em números absolutos por escalões de confiança dos caracteres ou palavras reconhecidos. -
Confidence %
Dados em percentagem por escalões de confiança dos caracteres ou palavras reconhecidos. -
Unique Values
Contagem de valores únicos nos símbolos reconhecidos. -
Unique cf mean
Média do nível de confiança para cada valor único -
Reset
Limpa todos os campos e a app fica pronta para novo processamento. -
tabela
Os valores da tabela podem ser ordenados de forma ascendente ou descendente clicando no cabeçalho da coluna. Clicando em qualquer linha de caracter ou palavra é exibida uma janela com a sua localização na imagem do documento.
gcv-ocr
GUI básico para a submissão de documentos em imagem ou pdf aos serviços Google Cloud Vision.
Instalação das bibliotecas necessárias: gcv-ocr/make install
Para a execução do GUI correr: gcv-ocr/python3 main.py
Descrição do interface gráfico
-
PDF / Image
Selecionar o tipo de ficheiros a processar -
Merge
Só activo para "image". Quando selecionado agrega o texto de todas as imagens num único ficheiro txt. -
Load files
Carregar ficheiro(s) selecionado(s). -
output/Browse
Selecção de pasta para gravação do(s) ficheiro(s) txt. -
Reset
Limpa todos os campos e a app fica pronta para novo processamento. -
Process
Executa o código