Tutoriel Tess4J avec maven et java

Tutoriel Tess4J avec maven et java
À l'ère d'aujourd'hui, lorsque les données augmentent, les personnes qui s'occupent de données quotidiennement travaillent principalement avec des données textuelles non structurées. L'analyse de toutes ces données à un rythme plus rapide est nécessaire et plusieurs fois, cruciale aussi. Parfois, nous sommes confrontés à un problème d'extraction des données des fichiers PDF. L'extraction des données textuelles du fichier PDF est lourde et une grande tâche manuelle également.

Ne serait-il pas cool si nous avions un package programmé qui pourrait accepter certains fichiers PDF et renvoyer le texte qu'il contient? Il s'avère que nous avons une bibliothèque pour faire exactement cela. Tisseract est un framework open source écrit en C ++ qui nous permet de travailler avec des images PNG, des images JPG et des fichiers PDF et renvoyer le texte que le fichier contient afin que nous puissions utiliser ce texte comme nous le souhaitons.

Dans cette leçon sur Tesseract avec Java et Maven, nous verrons comment nous pouvons développer une application Java simple qui accepte un fichier PDF et renvoie le texte qu'il contient avec le service Tesseract OCR. Nous verrons également pourquoi Tesseract a un tel succès. L'une des raisons pour lesquelles Tesseract est un ensemble de succès est qu'il est soutenu par Google lui-même.

Pour travailler avec cette leçon, il est important d'installer Tesseract OCR Engine sur votre système. Rendez-vous au Repo officiel GitHub pour suivre les instructions d'installation. Directement du dépôt de Github, «Tesseract a été initialement développé aux laboratoires Hewlett-Packard Bristol et à Hewlett-Packard Co, Greeley Colorado entre 1985 et 1994, avec quelques modifications apportées en 1996 à portant vers les fenêtres, et un peu de c ++ izing in in 1998. En 2005, Tesseract était ouvert par HP. Depuis 2006, il est développé par Google."

Dépendance Maven

Nous allons commencer par faire un simple projet Java qui est basé sur Maven et contient la dépendance Maven suivante:


filet.sourceforge.Tess4j
Tess4j
4.3.0

Il s'agit d'une dépendance Maven qui est fournie par un projet de wrapper que vous pouvez référer ici pour acquérir plus de compréhension. Sur le site Web, Tess4j est simplement décrit comme un emballage Java JNA pour l'API Tesseract OCR.

Structure du projet

Nous avons un projet très simple avec un seul fichier de code source. La structure du projet actuelle ressemblera à ceci:

Comme nous l'avons mentionné, nous avons un fichier de code source unique que nous utiliserons. Nous pourrions mettre un fichier PDF dans le dossier Ressources un peu plus tard pour démontrer la lecture d'un fichier PDF et en extraire du texte.

Construire un objet Tesseract

Une fois que nous avons un exemple de classe de code source où nous pouvons démarrer (comme indiqué dans la structure du projet dans la dernière section), nous pouvons commencer à y ajouter du code. À partir de maintenant, c'est une classe vide:

package com.linuxhint.Tess4J;
classe publique Tess4jdemo

Comme nous avons déjà parlé de Tesseract, Tesseract peut être utilisé pour extraire le texte de documents comme les documents PDF. Pour ce faire, nous devons former une bibliothèque Tesseract sur la façon dont les documents sont structurés et le texte qu'il peut contenir.

En dehors de cela, alors que Tesseract prend en charge environ 37 langues, vous devez informer explicitement Tesseract sur la langue que nous lisons en ce moment (si ces informations sont réellement disponibles).

Nous définirons une méthode Java simple pour Tesseract:

Tesseract statique privé gettesseract ()

À l'intérieur de cette méthode, nous pouvons faire une nouvelle instance de Tesseract de la bibliothèque Maven que nous avons ajoutée plus tôt:

Tesseract instance = new Tesseract ();

Juste pour le préciser, voici l'instruction d'importation que nous avons pour l'instanciation ci-dessus:

importer net.sourceforge.Tess4j.Tesseract;

Ensuite, nous ajouterons des propriétés à cette instance comme où les données de formation de cette bibliothèque peuvent être trouvées. Ceci est très important car sans définir un chemin pour la formation des données, Tesseract peut fournir des résultats très inexacts. Heureusement, la formation des données pour Tesseract est livrée avec son installation, donc tout ce que vous avez à faire est de regarder le bon endroit. Voici comment nous définissons le chemin des données de formation:

exemple.setDatapath ("/ usr / local / celar / tisseract / 4.0.0 / Share / TessData ");
exemple.setLanguage ("Eng");

Comme nous utilisons un Macintosh pour ce tutoriel, notre chemin de données ressemble à ce qui précède. En dehors du chemin des données de formation, j'ai également fourni à Tesseract les informations que nous utiliserons Anglais langue.
Ensuite, nous dirons à Tesseract que la sortie dont nous avons besoin est dans le format quelque chose appelé comme le Hocr format. Fondamentalement, le format Hocr est un format basé sur XML simple qui contient deux choses:

  1. Le document PDF texte contiendra
  2. Les coordonnées X et Y de ce texte sur chaque page. Cela signifie qu'un document DF peut être exactement tiré de la même manière à partir d'une sortie HOCR

Nous pouvons activer le format Hocr comme:

exemple.Sethocr (vrai);

Enfin, je peux retourner l'instance que nous avons faite ci-dessus. Voici le code source complet de la méthode que nous venons de définir ici:

Tesseract statique privé gettesseract ()
Tesseract instance = new Tesseract ();
exemple.setDatapath ("/ usr / local / celar / tisseract / 4.0.0 / Share / TessData ");
exemple.setLanguage ("Eng");
exemple.Sethocr (vrai);
retour d'instance;

Utilisation de Tesseract

Vous pourriez ne pas le croire, mais la configuration d'un objet Tesseract a été aussi simple. Nous pouvons le mettre à utiliser maintenant avec une définition simple dans une fonction principale:

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

Pouvez-vous deviner ce qui reste maintenant? La seule chose que nous devons faire maintenant est de fournir un fichier à Tesseract qu'il peut analyser et lire son texte. Maintenant, nous pouvons facilement ramasser un document PDF pour le lire, mais cela semble assez textuel. Pourquoi n'essayons-nous pas une image tout de suite?

Pour cette leçon, nous avons créé une image très simple que nous allons utiliser:

Une fois que vous avez cette image (ou toute autre image de votre choix), nous pouvons compléter notre méthode principale afin que nous puissions enfin analyser l'image sélectionnée:

public static void main (String [] args) lève TesserActException
Tesseract Tesseract = gettesserAtt ();
Fichier file = nouveau fichier ("/ users / shubham / busktop / tess4j.jpg ");
Résultat de la chaîne = Tesseract.DOOCR (fichier);
Système.dehors.println (résultat);

Si nous regardons attentivement, il n'y a rien de magiquement qui s'est passé ici. C'est la puissance de ce simple emballage pour la bibliothèque Tesseract dont nous sommes fournis avec.

Maintenant, nous sommes prêts à exécuter le programme ci-dessus. Vous pouvez l'exécuter pour voir une sortie étrange au format XML. Si vous avez du mal à comprendre la sortie, commentez simplement la propriété où nous avons activé la sortie HOCR. Une fois que vous avez fait cela, vous verrez une sortie simple comme:

Une note rapide qui essaie de Évitez les images PNG et utilisez des images JPEG au lieu de cela si vous travaillez avec des images du tout. C'est parce que Tesseract est très mauvais pour lire des images PNG en raison de ses techniques de compression.

Limites du moteur Tesseract OCR

Selon Tesseract Page FAQ lui-même, «Tesseract est un moteur OCR plutôt qu'un programme entièrement en vedette similaire à un logiciel OCR commercial tel que Nuance's OmniPage. Il était à l'origine destiné à servir de composant partie des autres programmes ou systèmes.

Bien que Tesseract fonctionne à partir de la ligne de commande, pour être utilisable par l'utilisateur moyen, le moteur doit être intégré à d'autres programmes ou interfaces, tels que FreeOCr.net, weocr ou ocrpous. Sans intégration dans des programmes comme ceux-ci, Tesseract n'a aucune analyse de mise en page, pas de formatage de sortie et pas d'interface utilisateur graphique (GUI). "

Si nous regardons la limitation ci-dessus, la limitation ci-dessus a également été résolue par la bibliothèque Tess4J en fournissant un wrapper JAVa JNA simple mais efficace sur la bibliothèque C ++ qui peut être utilisée littéralement n'importe où n'importe où.

Conclusion

Dans cette leçon rapide sur Tesseract et Java, nous avons fait un exemple très simple de moteur Tesseract OCR qui nous permet de lire du texte à partir de divers fichiers de format comme PDF et fichiers d'image. Il s'agit d'une compétence très importante à avoir en tant que texte de lecture de fichiers comme PDF et des images est la première étape que vous devez faire si vous souhaitez appliquer des techniques de traitement du langage naturel (NLP) sur ces formats de données.

Le fait que Tess4J soit disponible est génial car de cette façon, nous pouvons réellement utiliser une bibliothèque C ++ dans un environnement très simple qui est par ailleurs difficile et difficile à utiliser.