Der Schlüssel zu Java -Texterkennungsprogrammen liegt darin, eine OCR -Engine zu finden, die aufgerufen werden kann. Tesseract-OCR ist eine solche OCR-Engine, die von HP Labs von 1985 bis 1995 entwickelt wurde und jetzt bei Google ist. Tesseract-OCR 3.0 wird veröffentlicht und unterstützt Chinesisch. Tesseract-OCR 3.0 ist jedoch kein Kunde für die grafische Schnittstelle, und der von anderen geschriebene kostenlose grafische Kunde unterstützt nicht das Importieren neuer 3.0 trainedData. Dies bedeutet jedoch, dass es jetzt kostenlose chinesische OCR -Software gibt.
Die Schritte zur Verwendung von Tesseract-OCR3.01 in Java sind wie folgt:
1. Download und installieren Sie Tesseract-OCR-Setup-3.01-1.exe (chinesische Erkennung wird nur in Version 3.0 oder höher hinzugefügt)
2. Sie können das Sprachpaket auswählen, das Sie im Installationsassistenten herunterladen möchten.
3. Suchen und Download 2 Pakete, die für die Java-Grafikverarbeitung benötigt werden: jai_imageo-1.1-alpha.jar, Swingx-1.6.1.Jar
4. Java -Programmliste:
ImageioHelper -Klasse:
Import Java.awt.image.Buffenedimage; Import Java.io.file; Import Java.io.ioException; Import Java.util.iterator; Import Java.util.locale; javax.imageo.imagewriteParam; import Javax.imageo.imageWriter; import Javax.imageo.metadata.iiometadata; import Javax.imageo.stream.imageInputStream; Import Javax.image.stream.imageOutputStream; com.sun.media.imageo.plugins.tiff.tiffimageWriteParam; öffentliche Klasse imageioHelper {öffentliche statische Datei createImage (Dateisimmobilie, String imageFormat) {Datei tempfile = null; try {iterator readers = imageIo.getImagereArerByFormatName (ImageFormat); ImageReader reader = readers.next (); ImageInputStream iis = imageIO.CreateimageInputStream (ImageFile); Reader.SetInput (IIS); // Lesen Sie die Stream Metadata iiometadata streammetadata = reader.getStreamMetadata (); // Richten Sie das WriteParam TiffimageWriteParam TiffwriteParam = New TiffimageWriteParam (Lokale.chinesisch) ein; tiffWriteParam.setCompressionMode (ImageWriteParam.mode_Disabled); // TIF Writer Holen Sie sich und setzen Sie die Ausgabe auf Datei iterator writers = imageio.getImagewritersByFormatName ("Tiff"); ImageWriter writer = writers.next (); Bufferedimage bi = reader.read (0); Iioimage image = new iioimage (bi, null, reader.getImagemetadata (0)); tempFile = tempimageFile (ImageFile); ImageOutputStream iOS = imageIO.CreateImageOutputStream (tempfile); Writer.Setoutput (iOS); Writer.Write (StreamMetadata, Image, TiffwriteParam); ios.close (); writer.dispose (); reader.disponse (); } catch (ioException e) {e.printstacktrace (); } return tempfile; } private statische Datei tempimageFile (DateisimmobilFile) {String path = ImageFile.getPath (); StringBuffer strb = new StringBuffer (Pfad); strb.insert (path.lastindexof ('.'), 0); Neue Datei zurückgeben (strb.toString (). ersetzensFirst ("(? <= //.) (// w+) $", "tif"); }} OCR -Klasse:
Paket com.hhp.util; import Java.io.BufferedReader; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.inputStreamReader; Import Java.util.ArrayList; importieren java.util.list; importieren java.util.list; import org.jdesktop.swingx.util.os; public class ocr {private final String lang_option = "-l"; // Englische Buchstaben Kleinbuchstaben L, nicht 1 private endgültige Zeichenfolge eol = system.getProperty ("line.separator"); private String tesspath = "C: // Programmdateien (x86) // Tesseract-ocr"; // private String tessPath = neue Datei ("Tesseract"). getAbsolutepath (); public Stringerkennungsext (DateisimmobilFile, String ImageFormat) löst Ausnahme aus {Datei tempimage = imageiohelper.createimage (ImageFile, ImageFormat); Datei outputFile = neue Datei (ImageFile.getParentFile (), "Ausgabe"); StringBuffer strb = new StringBuffer (); Liste cmd = new ArrayList (); if (os.iswindowsXP ()) {cmd.add (TessPath+"// Tesseract"); } else if (os.islinux ()) {cmd.add ("Tesseract"); } else {cmd.add (TessPath+"// Tesseract"); } cmd.add (""); cmd.add (outputFile.getName ()); CMD.ADD (LANG_OPTION); cmd.add ("chi_sim"); //cmd.add("g "); ProcessBuilder pb = new ProcessBuilder (); pb.directory (ImageFile.getParentFile ()); cmd.set (1, tempimage.getName ()); PB.Command (CMD); pb.RedirecterrorStream (wahr); Prozessprozess = pb.start (); //tesseract.exe 1.jpg 1 -l chi_sim int w = process.waitfor (); // Löschen Sie die temporäre Arbeitsdatei tempimage.delete (); if (w == 0) {bufferedReader in = new bufferedReader (neuer InputStreamReader (neuer FileInputStream (outputFile.getabsolutepath ()+". TXT"), "UTF-8"); String str; while ((str = in.readline ())! = null) {strb.Append (str) .Append (eol); } in.close (); } else {String msg; Switch (W) {Fall 1: msg = "Fehler zugreifen auf Dateien. In den Dateinamen Ihres Bildes können Räume enthalten sein."; brechen; Fall 29: msg = "Kann das Bild oder seine ausgewählte Region nicht widerrufen."; brechen; Fall 31: msg = "Uns unterstütztes Bildformat."; brechen; Standard: msg = "Fehler sind aufgetreten."; } tempimage.delete (); Neue RunTimeException (MSG) werfen; } neue Datei (outputFile.getabsolutepath ()+". txt"). Delete (); return strb.tostring (); }} Testokal:
Java.io.file importieren; import java.io.ioxception; import com.hhp.util.oc. System.out.println ("ORC -Test beginnen ..."); try {string valcode = new OCR (). RecondizeText (neue Datei (Pfad), "png"); System.out.println (Valcode); } catch (ioException e) {e.printstacktrace (); } catch (Ausnahme e) {e.printstacktrace (); } System.out.println ("Orc Test End ..."); }} Nach dem Testen ist die Texterkennungsrate von Tesseract-OCR 3.01 sehr hoch, und die Erkennungsrate der gemeinsamen Überprüfungscodes auf der Website ist ebenfalls sehr hoch.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.