Java

Tutorial Tess4J com Maven e Java

Tutorial Tess4J com Maven e Java
Na era de hoje, quando 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 em uma taxa mais rápida é necessário e, muitas vezes, crucial também. Às vezes, enfrentamos um problema de extração de dados de arquivos PDF. Extrair dados textuais de um arquivo PDF é complicado e também uma grande tarefa manual.

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 é um framework 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 quisermos.

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 do Tesseract ser um pacote de tanto sucesso é que ele é apoiado pelo próprio Google.

Para trabalhar com esta lição, é importante instalar o Tesseract OCR Engine em seu sistema. Acesse o repositório oficial do Github para seguir as instruções de instalação. Diretamente do repositório GitHub, “Tesseract foi originalmente desenvolvido na Hewlett-Packard Laboratories Bristol e na Hewlett-Packard Co, Greeley Colorado entre 1985 e 1994, com mais algumas alterações feitas em 1996 para portar para Windows, e algum C ++ izing em 1998. Em 2005, o Tesseract foi liberado pela HP. Desde 2006 é desenvolvido pelo Google.”

Dependência Maven

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


internet.Sourceforge.tess4j
tess4j
4.3.0

Esta é uma dependência Maven que é fornecida por um projeto wrapper que você pode consultar aqui para obter mais compreensão. No site, Tess4J é simplesmente descrito como um wrapper Java JNA para Tesseract OCR API.

Estrutura do Projeto

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

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

Construindo objeto Tesseract

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

pacote com.linuxhint.tess4j;
public class Tess4JDemo

Como já falamos sobre o Tesseract, ele pode ser usado para extrair texto de documentos como documentos PDF. Para fazer isso, temos que treinar a biblioteca Tesseract sobre como os documentos são estruturados e que texto pode conter.

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

Definiremos um método Java simples para Tesseract:

private static Tesseract getTesseract ()

Dentro desse método, podemos fazer uma nova instância de Tesseract a partir da biblioteca Maven que adicionamos anteriormente:

Instância de Tesseract = novo Tesseract ();

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

rede de importação.Sourceforge.tess4j.Tesseract;

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

instância.setDatapath ("/ usr / local / Cellar / 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 de dados de treinamento, também forneci ao Tesseract as informações de que usaremos o inglês língua.
Em seguida, diremos ao Tesseract que a saída de que precisamos está no formato algo chamado de HOCR formato. 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 xey desse texto em cada página. Isso significa que um documento DF pode ser desenhado exatamente da mesma maneira de uma saída HOCR

Podemos ativar o formato HOCR como:

instância.setHocr (verdadeiro);

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

private static Tesseract getTesseract ()
Instância de Tesseract = novo Tesseract ();
instância.setDatapath ("/ usr / local / Cellar / 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 colocá-lo em uso agora com uma definição simples em uma função principal:

public static void main (String [] args)
Tesseract tesseract = getTesseract ();

Você consegue 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 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 colocaremos em uso:

Assim que tiver 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) throws TesseractException
Tesseract tesseract = getTesseract ();
File file = new File ("/ Users / shubham / Desktop / tess4j.jpg ");
Resultado da string = tesseract.doOCR (arquivo);
Sistema.Fora.println (resultado);

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

Agora estamos prontos para executar o programa acima. Você pode executá-lo para ver uma saída estranha em formato XML. Se você estiver tendo problemas para entender a saída, simplesmente comente a propriedade onde ativamos a saída HOCR. 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 na leitura de imagens PNG devido às suas técnicas de compressão.

Limitações do mecanismo de OCR Tesseract

De acordo com o próprio FAQ da página do Tesseract, “Tesseract é um mecanismo de OCR, em vez de um programa completo, semelhante ao software comercial de OCR, como o Omnipage da Nuance. Foi originalmente planejado para servir como parte integrante de outros programas ou sistemas.

Embora o Tesseract funcione na linha de comando, para ser utilizável pelo usuário médio, o mecanismo deve ser integrado a outros programas ou interfaces, como o FreeOCR.net, WeOCR ou OCRpous. Sem integração em programas como esses, o Tesseract não tem análise de layout de página, formatação de saída e interface gráfica de usuário (GUI). “

Se olharmos para a limitação acima, a limitação acima também foi resolvida pela biblioteca Tess4J, fornecendo um wrapper Java JNA simples, mas eficaz sobre a biblioteca C ++, que pode ser usado literalmente em qualquer lugar.

Conclusão

Nesta lição rápida sobre Tesseract e Java, fizemos um exemplo muito simples de mecanismo de OCR Tesseract que nos permite ler texto de vários formatos de arquivos como PDF e arquivos de imagem. Esta é uma habilidade muito importante para ter uma leitura de texto de arquivos como PDF e imagens é o primeiro passo que você precisa fazer se quiser aplicar qualquer técnica de Processamento de Linguagem Natural (PNL) nesses formatos de dados.

O fato de o Tess4J estar disponível é incrível porque, desta forma, podemos realmente usar uma biblioteca C ++ em um ambiente muito simples que, de outra forma, é difícil e complicado de usar. Claro, todo o código-fonte da lição está disponível no Github. Por favor, compartilhe seus comentários livremente sobre a lição no Twitter com @linuxhint e @sbmaggarwal (sou eu!).

Melhores jogos para jogar com rastreamento manual
Oculus Quest introduziu recentemente a grande ideia de rastreamento manual sem controladores. Com um número cada vez maior de jogos e atividades que e...
Como mostrar a sobreposição de OSD em aplicativos e jogos Linux em tela cheia
Jogar jogos em tela cheia ou usar aplicativos em modo de tela cheia sem distração pode cortar você das informações relevantes do sistema visíveis em u...
Top 5 cartas de captura de jogos
Todos nós vimos e amamos streaming de jogos no YouTube. PewDiePie, Jakesepticye e Markiplier são apenas alguns dos melhores jogadores que ganharam mil...