Pular para o conteúdo principal

Tesseract OCR: obtendo textos a partir de imagens

Introdução

Existem diversas ferramentas livre para Optical Character Recognition (OCR - Reconhecimento ótico de caracteres) como o gocr e o ocrad. Entretanto, eu ainda não tinha obtido uma eficiência tão boa até usar o Tesseract OCR.

O Tesseract OCR foi desenvolvido em um laboratórios da Hewlett-Packard entre 1985 e 1995. Em 1995 era um dos 3 melhores na competição de exatidão de OCR's organizada pela Universidade de Nevada em Las Vegas (UNLV). Entretanto, logo após isto, a HP decidiu sair do ramo de OCR e o Tesseract foi descontinuado. Felizmente a HP com a ajuda do Instituto de Pesquisas em Ciência da Informação da UNLV decidiu abrir o código fonte do Tesseract. Atualmente o Tesseract é mantido pela Google e já suporta vários idiomas, inclusive o português.

Instalação no Debian

Já existem pacotes nos repositórios do Debian para o Tesseract OCR e alguns idiomas, mas não consegui fazer com que eles funcionassem corretamente. Então eu baixei o código fonte, acrescentei o idioma português, compilei, gerei o pacote com o checkinstall, instalei e deu tudo certo. Basicamente, devem ser feitos os seguintes passos:
  • Obtenha Tesseract via SVN através do comando:
    svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr
  • Obtenha o idioma português para o Tesseract através página de downloads do tesseract (a versão mais recente é tesseract-2.01.por.tar.gz)
  • Descompacte o arquivo de idiomas será gerado um diretório chamado tessdata, copie todos os arquivos deste diretório para a pasta tesseract-ocr/tessdata (gerada pelo SVN)
  • Altere o arquivo tesseract-ocr/tessdata/Makefile.am (basta seguir os padrões dos idiomas já incluídos).

    Logo após a linha:
    eng.pffmtable eng.user-words eng.word-dawg eng.unicharset
    Acrescente " \"(sem aspas), e também acrescente as linhas (sem aspas):
    " por.DangAmbigs por.freq-dawg por.inttemp por.normproto \"
    " por.pffmtable por.user-words por.word-dawg por.unicharset"
    Logo após a linha:
    T = confsets makedummiesAcrescente as linhas (sem aspas):
    "por.DangAmbigs por.freq-dawg por.inttemp por.normproto por.pffmtable por.user-words por.word-dawg por.unicharset : makedummies"
    "$(top_srcdir)/tessdata/makedummies por"
  • Altere o arquivo tesseract-ocr/tessdata/Makefile.in.
    No final da linha iniciada por data_DATA = confsets, acrescente por.DangAmbigs por.freq-dawg por.inttemp por.normproto por.pffmtable por.user-words por.word-dawg por.unicharset
  • Altere o arquivo tesseract-ocr/tesseract.spec.
    Logo após a linha:
    Source6: http://tesseract-ocr.googlecode.com/files/tesseract-%{version}.nld.tar.gzAcrescente a linha:
    Source7: http://tesseract-ocr.googlecode.com/files/tesseract-%{version}.por.tar.gzLogo após a linha:
    tar xzvf %{_sourcedir}/tesseract-%{version}.nld.tar.gz
    Acrescente a linha:
    tar xzvf %{_sourcedir}/tesseract-%{version}.por.tar.gzLogo após a linha:
    %{_datadir}/tessdata/nld.word-dawgAcrescente as linhas:
    %package por
    Group: Applications/Multimedia
    Summary: Portuguese language pack for tesseract
    %description por
    The %{name}-%{version}.por package contains the data files required to recognize Portuguese
    %files por
    %{_datadir}/tessdata/por.DangAmbigs
    %{_datadir}/tessdata/por.freq-dawg
    %{_datadir}/tessdata/por.inttemp
    %{_datadir}/tessdata/por.normproto
    %{_datadir}/tessdata/por.pffmtable
    %{_datadir}/tessdata/por.unicharset
    %{_datadir}/tessdata/por.user-words
    %{_datadir}/tessdata/por.word-dawg
  • Configure e compile (acredito que o pacote build-essential resolva todas as dependências):
    ./configure --prefix=/usr --datadir=/usr/share/tesseract-ocr/tessdata
    make
  • Se não houve nenhum erro o programa já está compilado perfeitamente. Se você não faz controle de pacotes basta o comando make install para instalar e usar. Por outro lado, pode-se criar um pacote para instalação através do checkinstall (como root):
    # checkinstall
    Para as perguntas feitas pelo checkinstall basta pressionar enter (seria uma boa idéia preencher a descrição). No final do processo deve ser gerado o arquivo tesseract-ocr_i386.deb. Então basta instalá-lo.
Interfaces para o Tesseract OCR

Uma ótima interface para o Tesseract OCR é o gscan2pdf. Até a próxima.

Referências

Under-Linux.org: Google anuncia Tesseract OCR
Blog do Thadeu Penna: Tesseract OCR chega no Debian Sid
Blog do Thadeu Penna: Brazilian Portuguese oficialmente suportado no Tesseract-OCR
Blog do Thadeu Penna: OCR de qualidade no Linux
Blog do Mitre: Tesseract OCR

Comentários

Julio Cesar Gutierrez disse…
"Altere o arquivo tesseract-ocr/tessdata/Makefile.in.
No final da linha iniciada por data_DATA = confsets, acrescente por.DangAmbigs por.freq-dawg por.inttemp por.normproto por.pffmtable por.user-words por.word-dawg por.unicharset"

Desculpe Sr. Marcos. Desconsidere meu comentário anterior.

Postagens mais visitadas deste blog

Referências Bibliográficas com ABNTeX e JabRef

É inevitável escrever textos técnicos e científicos sem referências bibliográficas. Quando escrevemos em LaTeX a maneira mais conveniente de trabalhar com referências é a criação de bancos de dados bibliográficos que são incorporados ao documento final com o utilitário BibTeX . Estes bancos de dados são arquivos texto que obedecem uma formatação e possuem extensão "bib" . Para facilitar o nosso trabalho e não termos que nos preocupar com a formatação do arquivo podem ser utilizadas ferramentas específicas para trabalhar com arquivos BibTeX. Nesta postagem vamos explicar como trabalhar com o JabRef , um excelente software livre multiplataforma para lidar com arquivos BibTeX para documentos que usam a classe abnTeX  (Classes LaTeX para as normas ABNT). Antes de criarmos um arquivo e incluir qualquer referência vamos verificar algumas configurações importantes. A primeira delas é definir a codificação padrão para os arquivos através do menu "Options / Preferences" ....

Compartilhamento de scanner no Linux

Assim como uma impressora compartilhada é útil para que vários computadores possam enviar impressões remotamente um scanner compartilhado pode ser usado por outros computadores em uma rede. Neste artigo vamos descrever como compartilhar um scanner no Linux. Consideraremos um scanner já instalado e funcionando (muitos modelos de scanner são detectados automaticamente e nem precisam ser instalados). Utilizaremos a distribuição Debian, mas em outras distribuições o compartilhamento pode ser feito de maneira análoga. Inicialmente vamos mostrar como configurar o servidor. Configuração do Servidor No caso do debian é necessário que os pacotes xinetd e sane-utils estejam instalados. Podemos fazer isto com o aptitude : # aptitude install xinetd sane-utils Para listar o scanner instalado podemos usar o comando: scanimage -L O compartilhamento é feito com alguns arquivos de configuração. No arquivo /etc/services deve constar a seguinte linha: sane-port 6566/tcp ...