La clave para los programas de reconocimiento de texto de Java es encontrar un motor OCR que se pueda llamar. Tesseract-OCR es un motor OCR, desarrollado por HP Labs de 1985 a 1995 y ahora está en Google. Tesseract-OCR 3.0 se libera, apoyando a los chinos. Sin embargo, Tesseract-OCR 3.0 no es un cliente para la interfaz gráfica, y el cliente gráfico FreeOCR escrito por otros no es compatible con la importación de datos nuevos 3.0. Pero esto significa que ahora hay un software OCR chino gratuito.
Los pasos para usar Tesseract-OCR3.01 en Java son los siguientes:
1. Descargue e instale tesseract-oCom-setup-3.01-1.exe (el reconocimiento chino se agrega solo en la versión 3.0 o superior)
2. Puede seleccionar el paquete de idioma que desea descargar en el asistente de instalación.
3. Busque y descargue 2 paquetes requeridos para el procesamiento de gráficos Java: Jai_imageio-1.1-alpha.jar, swingx-1.6.1.jar
4. Lista de programas de java:
Clase ImageIOHelper:
import java.awt.image.bufferedImage; import java.io.file; import java.io.ioexception; import java.util.iterator; import java.util.locale; import javax.imageio.iioiMage; imageJavax.Imageio.Imageio; import javax.imageio.imageReader; importador; importar; importar; import javax.imageio.ImageWriteParam; import javax.imageio.imageWriter; import javax.imageio.metadata.iiometadata; import javax.imageio.stream.imageInputStream; import javax.imageio.stream.imageOutputPutputStream; import Com.sun.media.imageio.plugins.tiff.tiff.tiff.tiff.tiff clase ImageIOHelper {Public Static File CreateImage (archivo ImageFile, String ImageFormat) {File TempFile = null; Pruebe {iterator Readers = imageIO.getImageReadersByFormatName (ImageFormat); ImageReader Reader = Readers.next (); ImageInputStream IIS = imageIO.CreateEmageInputStream (ImageFile); lector.setInput (IIS); // leer los metadatos de transmisión iiometadata streammetadata = lector.getstreammetadata (); // Configure el WriteParam TiffimageWriteparam TiffWriteParam = new TiffImageWriteParam (locale.chinese); tiffWriteParam.SetCompressionMode (ImageWriteParam.Mode_Disable); // Obtener el escritor TIF y establecer la salida a los escritores de Iterator de archivos = imageIO.GetImageWritersByFormatName ("TIFF"); ImageWriter Writer = WRITERS.NEXT (); BufferedImage Bi = Reader.read (0); IioiMage Image = new iioImage (bi, null, lector.getImageMetadata (0)); tempfile = tempImageFile (ImageFile); ImageOutputStream iOS = imageIO.CreateEmageOutputStream (tempfile); escritor.setOutput (iOS); Writer.Write (StreamMetadata, Image, TiffWriteParam); iOS.Close (); escritor.dispose (); lector.dispose (); } catch (ioException e) {E.PrintStackTrace (); } return tempfile; } Archivo estático privado TempIMageFile (File ImageFile) {String Path = ImageFile.getPath (); StringBuffer strb = new StringBuffer (ruta); strb.insert (path.lastindexof ('.'), 0); return nuevo archivo (strb.tostring (). reemplazarFirst ("(? <= //.) (// w+) $", "tif")); }} Clase OCR:
paquete com.hhp.util; import java.io.bufferedReader; import java.io.file; import java.io.fileInputStream; import java.io.inputstreamreader; import java.util.arrayList; import java.util.list; import java.util.list; importar org.jdesktop.swingx.util.os; clase pública OCR {cadena final privada lang_option = "-l"; // Letras en inglés en minúsculas l, no 1 cadena final privada eol = system.getProperty ("line.separator"); String private tesspath = "c: // archivos de programa (x86) // tesseract-oCR"; // private string tesspath = nuevo archivo ("tesseract"). getAbSolutePath (); public String ReconConizeText (archivo ImageFile, String ImageFormat) lanza Exception {File TempIMage = ImageIOHelper.CreateImage (ImageFile, ImageFormat); Archivo outputFile = new File (imageFile.getParentFile (), "output"); StringBuffer strb = new StringBuffer (); Lista 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.RedirErterrorStream (verdadero); Proceso proceso = pb.start (); //tasseract.exe 1.jpg 1 -l chi_sim int w = process.waitfor (); // eliminar el archivo de trabajo temporal tempimage.delete (); if (w == 0) {bufferedReader in = new BufferedReader (new InputStreamReader (new FileInputStream (outputFile.GetAbSolutePath ()+". Txt"), "UTF-8")); Cuerda str; while ((str = in.readline ())! = null) {strb.append (str) .append (eol); } in.close (); } else {string msg; switch (w) {caso 1: msg = "errores de acceso a archivos. Puede haber espacios en el nombre de archivo de su imagen."; romper; Caso 29: msg = "No se puede reconconmar la imagen o su región seleccionada"; romper; caso 31: msg = "formato de imagen no compatible"; romper; predeterminado: msg = "ocurrieron errores"; } tempimage.delete (); tirar nueva runtimeException (msg); } nuevo archivo (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//ocrocode//4.png"; System.out.println ("ORC Test Begin ..."); intente {String valcode = new OCr (). ReconconseText (nuevo archivo (ruta), "png"); System.out.println (valcode); } catch (ioException e) {E.PrintStackTrace (); } catch (Exception e) {E.PrintStackTrace (); } System.out.println ("ORC Test End ..."); }} Después de la prueba, la tasa de reconocimiento de texto de Tesseract-OCR 3.01 es muy alta, y la tasa de reconocimiento de los códigos de verificación comunes en el sitio web también es muy alta.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.