La clé des programmes de reconnaissance de texte Java est de trouver un moteur OCR qui peut être appelé. Tesseract-OCR est un tel moteur OCR, développé par HP Labs de 1985 à 1995 et est maintenant sur Google. Tesseract-OCR 3.0 est publié, soutenant le chinois. Cependant, Tesseract-OCR 3.0 n'est pas un client de l'interface graphique, et le client graphique FreeOCr écrit par d'autres ne prend pas en charge l'importation de nouvelles data 3.0. Mais cela signifie qu'il existe maintenant un logiciel OCR chinois gratuit.
Les étapes pour utiliser Tesseract-OCR3.01 en Java sont les suivantes:
1. Télécharger et installer Tesseract-OCr-Settup-3.01-1.exe (la reconnaissance chinoise n'est ajoutée que dans la version 3.0 ou plus)
2. Vous pouvez sélectionner le package de langue que vous souhaitez télécharger dans l'assistant d'installation.
3. Recherche et télécharger 2 packages requis pour le traitement graphique Java: jai_imageio-1.1-alpha.jar, swingx-1.6.1.jar
4. Liste des programmes Java:
Classe ImageIoHelper:
Importer java.awt.image.bufferedImage; import java.io.file; import java.io.ioException; import java.util.iterator; import java.util.locale; import javax.imageio.iioimage javax.imageio.imagewriteparam; importer javax.imageio.imagewriter; import javax.imageio.metadata.iiometadata; import javax.imageio.stream.imageInputStream; import javax.imageio.stream.imageoutstream; importer; com.sun.media.imageio.plugins.tiff.tiffimagewriteParam; public class ImageIoHelper {public static file createImage (file imagefile, string imageformat) {file tempfile = null; try {iterator Readers = imageo.getImageRedersByFormatName (imageFormat); ImageReader Reader = Readers.Next (); ImageInputStream iis = imageo.CreateImageInputStream (ImageFile); Reader.SetInput (IIS); // Lire les métadonnées du flux iiometadata streamMetadata = reader.getStreamMetAdata (); // Configurez le WriteParam TiffimageWriteParam TiffWriteParam = new TiffimageWriteParam (Locale.chinese); tiffwriteParam.setCompressionMode (imagewriteParam.mode_disabled); // Obtenez un écrivain TIF et définissez la sortie dans File 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 (image d'image); ImageOutputStream iOS = imageo.CreateImageOutputStream (tempfile); writer.setOutput (iOS); écrivain.write (streammetadata, image, tiffwriteParam); iOS.Close (); écrivain.dispose (); Reader.Dispose (); } catch (ioException e) {e.printStackTrace (); } Retour Tempfile; } Fichier statique privé TempImageFile (fichier ImageFile) {String path = imageFile.getPath (); StringBuffer strb = new StringBuffer (Path); strb.insert (path.llastindexof ('.'), 0); return nouveau fichier (strb.toString (). RemplaceFirst ("(? <= //.) (// w +) $", "ail")); }} Classe OCR:
package com.hhp.util; importer java.io.bufferedReader; Importer java.io.file; import java.io.fileInputStream; Importer java.io.inputStreamReader; import java.util.arraylist; Importer java.util.list; Importer java.util.list; import org.jdesktop.swingx.util.os; classe publique ocr {chaîne finale privée lang_option = "-l"; // Lettres anglaises minuscules l, pas 1 chaîne finale privée eol = System.getProperty ("line.separator"); chaîne privée Tesspath = "C: // Files de programme (x86) // Tesseract-OCR"; // String privé Tesspath = nouveau fichier ("Tesseract"). getAbSolutepath (); public String ReconnueText (fichier imageFile, chaîne imageFormat) lève l'exception {file tempImage = ImageIoHelper.CreateImage (imageFile, imageFormat); File OutputFile = new File (imageFile.GetParentFile (), "Output"); StringBuffer strb = new StringBuffer (); List 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("eng "); ProcessBuilder pb = new ProcessBuilder (); pb.Directory (imageFile.getParentFile ()); cmd.set (1, tempImage.getName ()); pb.command (cmd); pb.redireCterRorstream (true); Processus process = pb.start (); //tesseract.exe 1.jpg 1 -l chi_sim int w = process.waitfor (); // Supprimer le fichier de travail temporaire tempimage.delete (); if (w == 0) {BufferedReader dans = new BufferedReader (new inputStreamReader (new FileInputStream (outputFile.getAbsolutepath () + ". Txt"), "utf-8")); String Str; while ((str = in.readline ())! = null) {strb.append (str) .append (eol); } in.close (); } else {String msg; commutateur (w) {cas 1: msg = "erreurs accédant aux fichiers. Il peut y avoir des espaces dans le nom de fichier de votre image."; casser; Cas 29: msg = "ne peut pas recongniser l'image ou sa région sélectionnée."; casser; Cas 31: MSG = "Format d'image non pris en charge."; casser; par défaut: msg = "erreurs s'est produite."; } tempimage.delete (); lancer une nouvelle RuntimeException (MSG); } nouveau fichier (outputFile.getAbsolutepath () + ". txt"). Delete (); return strb.toString (); }} Testocr:
import java.io.file; import java.io.ioException; import com.hhp.util.ocr; public class ocrTest {public static void main (string [] args) {String path = "c: //temp//ocrode//4.png"; System.out.println ("Orc Test Begin ..."); try {String valcode = new ocr (). reconnaissancet (nouveau fichier (path), "png"); System.out.println (valcode); } catch (ioException e) {e.printStackTrace (); } catch (exception e) {e.printStackTrace (); } System.out.println ("Orc Test End ..."); }} Après les tests, le taux de reconnaissance de texte de Tesseract-OCR 3.01 est très élevé et le taux de reconnaissance des codes de vérification courants sur le site Web est également très élevé.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.