README.md

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:

  1. Conversão de imagens digitalizadas em PDF
  2. Extracção de imagens de documentos PDF
  3. Aumento de resolução de imagem
  4. Segmentação de conteúdos
  5. OCR (Optical Caracter Recognition - Reconhecimento Óptico de Caracteres)
  6. 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

  1. img_to_pdf.py
    Converte as imagens em pdf.
    O nº de páginas por pdf pode ser defenido em setings.py na constante NUM_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.

  2. pdf_to_img.py
    Separa as páginas de cada pdf em imagens jpeg.

  3. image_scale.py
    Redimensiona as imagens de acordo com o factor escolhido em setings.py na constante IMG_SCALE_RATIO e com o método de interpolação escolhido em IMG_INTERPOLATION

  4. 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.

  5. ocr.py
    5.1 ocr_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

  6. 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

image processing app

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 detectada

    Full 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 e canny2
    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

lines detection

Processo:

  1. 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.
  2. Na página redimensionada são detectadas as linhas que fazem as divisões de colunas.
  3. A partir da segmentação é efectuado o corte como determinado em 'Crop mode'.
  4. 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.

column crops

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

ocr analytics

  • 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.

    imagem de exemplo

  • Plot HM_W
    Heat-Map palavras. Exibe uma distribuição das incidências das palavras reconhecidas por número de confiança.

    imagem de exemplo

  • Plot HM_B
    Heat-Map Quebras. Exibe uma distribuição das incidências das quebras de linhas e parágrafos.

    imagem de exemplo

  • Plot LineBrks
    Exibe a localização na imagem em análise das quebras de linha detectadas.

    imagem de exemplo

  • 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

gcv-ocr

  • 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