J'ai essayé OCR de traiter un fichier PDF avec Java

Au début

J'ai écrit un programme Java qui effectue un traitement OCR sur le fichier image inclus dans le PDF Au début, j'ai essayé de l'implémenter avec python, mais je ne comprenais pas la dépendance de la bibliothèque à utiliser, alors j'ai décidé de l'implémenter avec le Java familier.

Bibliothèque utilisée

Ingéniosité etc.

La source

Classe pour obtenir une image à partir d'un PDF

PDFmaker.java


package pdf;

import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

public class PDFMaker {
	public static void main(String args[])throws Exception{
		//Fichier PDF à lire
		PDDocument document = PDDocument.load(new File("C:/python/img/pdf/2017h29a_sc_pm2_qs.pdf"));
		//Traiter les pages PDF
		Stream<PDPage>stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
				document.getDocumentCatalog().getPages().iterator(),
						Spliterator.ORDERED),false);
		
		System.out.println("start");
		Files.write(Paths.get("parse.txt"), 
				stream.map(s->exePDFpage(s)).collect(Collectors.toList()), 
				Charset.forName("MS932"),
				StandardOpenOption.CREATE);
		System.out.println("end");
	}
	
	//Page de traitement PDF
	public static String exePDFpage(PDPage p){
		Stream<COSName>stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(
				p.getResources().getXObjectNames().iterator(),Spliterator.ORDERED),false);
		return stream.map(s->exeImage(s,p.getResources()))
		.reduce((s,v)->s+v).get();
	}
	
	//Convertir une page PDF en Jpg
	public static String exeImage(COSName n,PDResources resources){
		try{
			PDXObject xobject = resources.getXObject(n);
			if(xobject instanceof PDImageXObject){
				PDImageXObject image2 = (PDImageXObject) resources.getXObject(n);
				return PDFtoImg.extractFromPDF(image2.getImage());
			}
			return "";
		}catch(Exception e){
			e.printStackTrace();
			return "";
		}	
	}
}

Traitement pour lire le fichier image par OCR

PDFtoImg.java


package pdf;

import java.awt.image.BufferedImage;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

public class PDFtoImg {
	private static final String  DICTIONARY_PATH ="C:/Users/takayoshi/workspace/PDF/tessdata";
    public static String extractFromPDF(BufferedImage img) {
		ITesseract instance = new Tesseract();
		try {
		    instance.setLanguage("jpn");
		    instance.setDatapath(DICTIONARY_PATH);
		    String result = instance.doOCR(img);
		    return result;
		} catch (TesseractException ex) {
		    ex.printStackTrace();
		    return "";
		}
    }
}

Impressions

――Il faut environ 10 à 20 minutes pour réviser le problème de l'examen des assistants de sécurité du traitement de l'information (SC) de l'examen d'ingénieur en informatique.

Automne 2017
{ré`
Femme de traitement de l'information tous obtenant un examen de soutien
Non
après midi=problème
Temps de test-4:30 ~-6:30 (2 heures)
Remarques
- ・ Le début et la fin du test,L'horloge du superviseur est la norme. Suivez les instructions du superviseur 〟
2~Jusqu'à ce qu'il y ait un signal pour démarrer le test,N'ouvrez pas le livret de questions et regardez à l'intérieur.
3~Saisie du numéro d'examen, etc. sur la feuille de réponses,Veuillez commencer après le signal pour démarrer le test.
4_Le problème est,Veuillez répondre selon le tableau de Fuki.

Étant donné que l'OCR est gratuit, je pense que c'est une très bonne ligne en japonais

Recommended Posts

J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé OCR de traiter un fichier PDF avec Java part2
Lire une chaîne dans un fichier PDF avec Java
J'ai essayé de casser le bloc avec java (1)
J'ai créé un PDF avec Java.
J'ai essayé d'interagir avec Java
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de jouer un peu avec BottomNavigationView ①
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
[iOS] J'ai essayé de créer une application de traitement de type insta avec Swift
J'ai essayé de faire une authentification de base avec Java
java j'ai essayé de casser un simple bloc
J'ai essayé de frapper une méthode Java d'ABCL
J'ai essayé d'exécuter Java dans un terminal Mac
[Java] J'ai essayé de me connecter en utilisant le pool de connexion avec Servlet (tomcat) & MySQL & Java
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
Exporter le pdf avec un programme autonome (Java / Perl / VBA)
J'ai essayé de créer une compétence Clova en Java
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé de gratter un graphique boursier en utilisant Java (Jsoup)
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai essayé DI avec Ruby
Pagination de PDF avec Java + PDFBox.jar
[Java] Créer un fichier temporaire
J'ai essayé d'utiliser Java REPL
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
À propos du comportement lors de la création d'un mappage de fichiers avec Java
J'ai créé un client RESAS-API en Java
J'ai essayé de créer un environnement de développement padrino avec Docker
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)
Construire un projet Java avec Gradle
J'ai essayé Tribuo édité par Oracle. Tribuo --Une bibliothèque de prédiction Java (v4.0)
J'ai essayé d'exécuter une application d'échange de cartes de crédit avec Corda 1
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
J'ai créé une application shopify @java
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé l'analyse morphologique avec MeCab
J'ai créé une interface graphique avec Swing
Télécharger des fichiers à l'aide de Java HttpURLConnection
J'ai essayé un petit docker de digdag.
Une personne écrivant C ++ a essayé d'écrire Java
Exécuter le fichier de commandes à partir de Java
J'ai essayé le framework Java "Quarkus"
Sortie PDF et TIFF avec Java 8
J'ai essayé d'utiliser l'API Java8 Stream