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.”
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:
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.
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.