Tess4j tutorial com maven e java

Tess4j tutorial com maven e java
Na era de hoje em que os dados estão sempre crescendo, as pessoas que lidam com dados todos os dias trabalham principalmente com dados textuais não estruturados. Analisar todos esses dados a uma taxa mais rápida é necessária e muitas vezes, crucial também. Às vezes, enfrentamos uma questão de extrair dados de arquivos PDF. Extrair dados textuais do arquivo PDF é pesado e uma grande tarefa manual também.

Não seria legal se tivéssemos algum pacote programado que pudesse aceitar alguns arquivos PDF e retornar o texto que ele contém? Acontece que temos uma biblioteca para fazer exatamente isso. Tesseract é uma estrutura de código aberto escrito em C ++, que nos permite trabalhar com imagens PNG, imagens JPG e arquivos PDF e retornar o texto que o arquivo contém para que possamos usar esse texto como queremos.

Nesta lição sobre TESSERACT com Java e Maven, veremos como podemos desenvolver um aplicativo Java simples que aceita um arquivo PDF e retorna o texto que ele contém com o serviço TESSERACT OCR. Também veremos por que o TESSERACT é tão bem -sucedido. Uma das razões para o pacote Tesseract tão bem -sucedido é que ele é apoiado pelo próprio Google.

Para trabalhar com esta lição, é importante instalar o Tesseract OCR Engine em seu sistema. Vá até o repositório oficial do GitHub para seguir as instruções de instalação. Diretamente a partir do repo Github, “o TESSERACT foi originalmente desenvolvido nos laboratórios Hewlett-Packard Bristol e na Hewlett-Packard Co, Greeley Colorado entre 1985 e 1994, com mais algumas mudanças feitas em 1996 na porta em Windows e em alguns C ++ izing in, 1998. Em 2005, o TESSERACT foi de origem aberta pela HP. Desde 2006, é desenvolvido pelo Google.”

Dependência do Maven

Começaremos criando um projeto Java simples, baseado no maven e contém a seguinte dependência do Maven:


líquido.sourceforge.Tess4J
Tess4J
4.3.0

Esta é uma dependência do Maven que é fornecida por um projeto de wrapper que você pode referir aqui para obter mais compreensão. No site, o Tess4J é simplesmente descrito como um invólucro jna JNA para TESSERACT OCR API.

Estrutura do projeto

Temos um projeto muito simples com um único arquivo de código -fonte. A estrutura atual do projeto será algo assim:

Como mencionamos, temos um único arquivo de código -fonte que usaremos. Podemos colocar um arquivo PDF na pasta Recursos um pouco mais tarde para demonstrar a leitura de um arquivo PDF e a extração de texto.

Construindo objeto Tesseract

Depois de termos uma classe de código -fonte de amostra onde podemos começar (conforme mostrado na estrutura do projeto na última seção), podemos começar a adicionar algum código a ele. A partir de agora, é uma classe vazia:

pacote com.Linuxhint.tess4j;
classe pública Tess4jdemo

Como conversamos sobre o TESSERACT antes, o TESSERACT pode ser usado para extrair texto de documentos como documentos em PDF. Para fazer isso, temos que treinar a Biblioteca Tesseract sobre como os documentos estão estruturados e qual texto ele pode conter.

Além disso, como o TESSERACT suporta cerca de 37 idiomas, você deve informar explicitamente o TESSERACT sobre qual idioma estamos lendo agora (se essa informação estiver realmente disponível para nós).

Definiremos um método Java simples para TESSERACT:

TESSERACT PRIVADO ESTÁTICO GETTESSERACT ()

Dentro deste método, podemos fazer uma nova instância de Tesseract da Biblioteca Maven que adicionamos anteriormente:

TESSERACT instância = new Tesseract ();

Só para deixar claro, aqui está a declaração de importação que temos para a instanciação acima:

rede de importação.sourceforge.Tess4J.Tesseract;

Em seguida, adicionaremos algumas propriedades a esta instância, como onde os dados de treinamento desta biblioteca podem ser encontrados. Isso é muito importante, pois, sem definir um caminho para o treinamento de dados, o TESSERACT pode fornecer resultados altamente imprecisos. Felizmente, os dados de treinamento para TESSERACT vêm com sua instalação, então tudo o que você precisa fazer é olhar para o lugar certo. Aqui está como definimos o caminho dos dados de treinamento:

instância.SetDatapath ("/usr/local/adega/tesseract/4.0.0/share/tessdata ");
instância.setLanguage ("Eng");

Como estamos usando um Macintosh para este tutorial, nosso caminho de dados se parece com o acima. Além do caminho dos dados de treinamento, também forneci a Tesseract com as informações de que usaremos o Inglês linguagem.
Em seguida, diremos a TESSERACT que a saída de que precisamos está no formato algo chamado como o Hocr formatar. Basicamente, o formato Hocr é um formato simples baseado em XML que contém duas coisas:

  1. O documento PDF de texto conterá
  2. As coordenadas X e Y desse texto em cada página. Isso significa que um documento df pode ser exatamente desenhado da mesma maneira de uma saída de HOCL

Podemos habilitar o formato Hocr como:

instância.sethocr (verdadeiro);

Finalmente, posso devolver a instância que fizemos acima. Aqui está o código -fonte completo do método que acabamos de definir aqui:

TESSERACT PRIVADO ESTÁTICO GETTESSERACT ()
TESSERACT instância = new Tesseract ();
instância.SetDatapath ("/usr/local/adega/tesseract/4.0.0/share/tessdata ");
instância.setLanguage ("Eng");
instância.sethocr (verdadeiro);
instância de retorno;

Usando tesseract

Você pode não acreditar, mas configurar um objeto Tesseract foi tão fácil. Podemos usá -lo agora com uma definição simples em uma função principal:

public static void main (string [] args)
Tesseract tesseract = gettesSeract ();

Você pode adivinhar o que resta agora? A única coisa que precisamos fazer agora é fornecer um arquivo para o Tesseract, que ele pode analisar e ler seu texto. Agora podemos, facilmente pegar um documento em PDF para lê -lo, mas isso parece bastante textual. Por que não tentamos uma imagem imediatamente?

Para esta lição, criamos uma imagem muito simples que usaremos para usar:

Depois de ter essa imagem (ou qualquer outra imagem de sua escolha), podemos concluir nosso método principal para que possamos finalmente analisar a imagem selecionada:

public static void main (string [] args) lança tesseractException
Tesseract tesseract = gettesSeract ();
Arquivo de arquivo = novo arquivo ("/usuários/shubham/desktop/tess4j.jpg ");
Resultado da string = tesseract.Doocr (arquivo);
Sistema.fora.println (resultado);

Se olharmos de perto, não há nada magicamente o que aconteceu aqui. Esse é o poder deste invólucro simples para a biblioteca de tesseract que recebemos.

Agora estamos prontos para executar o programa acima. Você pode executá -lo para ver uma saída estranha no formato XML. Se você está tendo problemas de entender a saída, basta comentar a propriedade onde ativamos a saída do HOCL. Depois de fazer isso, você verá uma saída simples como:

Uma nota rápida que tenta Evite imagens PNG e use imagens JPEG Em vez disso, se você estiver trabalhando com imagens. Isso ocorre porque o TESSERACT é muito ruim em ler imagens PNG devido às suas técnicas de compressão.

Limitações do mecanismo OCR TESSERACT

De acordo com o Tesseract Page FAQ em si, “o TESSERACT é um mecanismo OCR, em vez de um programa totalmente em destaque semelhante ao software comercial OCR, como o OmniPage da Nuance. Foi originalmente destinado a servir como parte componente de outros programas ou sistemas.

Embora o TESSERACT funcione a partir da linha de comando, para ser utilizável pelo usuário médio, o mecanismo deve ser integrado a outros programas ou interfaces, como o FreeocS.net, weocr ou ocrpous. Sem integração em programas como esses, o TESSERACT não possui análise de layout da página, nenhuma formatação de saída e nenhuma interface gráfica do usuário (GUI). ““

Se olharmos para a limitação acima, a limitação acima também foi resolvida pela Biblioteca Tess4J, fornecendo um invólucro java java simples, mas eficaz, sobre a biblioteca C ++, que pode ser usada literalmente em qualquer lugar.

Conclusão

Nesta rápida lição sobre Tesseract e Java, fizemos um exemplo muito simples de mecanismo OCR de tesseract, que nos permite ler texto de vários arquivos de formato, como PDF e arquivos de imagem. Essa é uma habilidade muito importante a ter como texto de arquivos como PDF e imagens é a primeira etapa que você precisa fazer se deseja aplicar alguma técnica de processamento de linguagem natural (PNL) nesses formatos de dados.

O fato de o Tess4j estar disponível é incrível porque, assim, podemos realmente usar uma biblioteca C ++ em um ambiente muito simples, que é difícil e difícil de usar.