A chave para os programas de reconhecimento de texto Java é encontrar um mecanismo OCR que possa ser chamado. O TESSERACT-OOCR é um mecanismo de OCR, desenvolvido pela HP Labs de 1985 a 1995 e agora está no Google. O TESSERACT-OOCR 3.0 é lançado, apoiando chinês. No entanto, o TESSERACT-OOCR 3.0 não é um cliente para a interface gráfica, e o cliente gráfico livre -r, escrito por outros, não suporta a importação de novos 3.0 TreinDATA. Mas isso significa que agora existe um software OCR chinês gratuito.
As etapas para usar o TESSERACT-OCR3.01 em Java são as seguintes:
1. Faça o download e instale o tesseract-setup-3.01-1.exe (o reconhecimento chinês é adicionado apenas na versão 3.0 ou acima)
2. Você pode selecionar o pacote de idiomas que deseja baixar no assistente de instalação.
3. Pesquise e faça o download de 2 pacotes necessários para o processamento de gráficos Java: JAI_IMAGEIO-1.1-ALPHA.JAR, swingx-1.6.1.jar
4.Java Lista de programas:
Classe Imageiohelper:
importar java.awt.image.bufferedImage; importar java.io.file; importar java.io.ioException; importar java.util.iterator; importar java.util.locale; importar javax.imageio.iioimage; imagejavax.imageio.imageio; javax.Imageio.ImageWriteParam; importar javax.imageio.imagewriter; importar javax.imageio.metadata.iometadata; importar javax.imageio.stream.imageInputStream; importação javax.imageio.stream.imageoutStream; com.sun.media.imageio.plugins.tiff.tiffImageWriteParam; public class ImageioHelper {public Static File CreateImage (arquivo imagefile, string imageFormat) {arquivo tempfile = null; tente {iterator Readers = imageio.getImageReadesByFormatName (ImageFormat); ImageReader Reader = Readers.Next (); ImageInputStream iis = imageio.createImageInputStream (ImageFile); leitor.setInput (IIS); // Leia os metadados do fluxo iiometadata streammetadata = reader.getStreamMetadata (); // Configure o WriteParam TiffImageWriteParam TiffWriteParam = new TiffImageWriteParam (Locale.Chinese); tiffWriteParam.SetCompressionMode (ImageWriteParam.mode_disabled); // Obtenha o Writer TIF e defina a saída para arquivar Writers = imageio.getImageWritersByFormatName ("TIFF"); ImageWriter Writer = Writers.Next (); BufferImage bi = leitor.read (0); Iioimage imagem = new iioimage (bi, null, reader.getImageMetadata (0)); tempfile = tempImageFile (ImageFile); ImageOutputStream iOS = imageio.createImageOutputStream (tempfile); writer.setOutput (iOS); writer.write (streammetadata, imagem, tiffwriteparam); iOS.Close (); writer.dispose (); leitor.dispose (); } catch (ioexception e) {e.printStackTrace (); } retornar tempfile; } arquivo estático privado TempImageFile (arquivo imagefile) {string path = imagefile.getpath (); StringBuffer strb = new StringBuffer (caminho); strb.Insert (path.LastIndexOf ('.'), 0); Retorne novo arquivo (strb.toString (). substituirfirst ("(? <= //.) (// w+) $", "tif")); }} Classe OCR:
pacote com.hhp.util; importar java.io.bufferedreader; importar java.io.file; importar java.io.fileInputStream; importar java.io.inputStreamReader; importar java.util.arraylist; importar java.util.list; importar java.util.list; importar org.jdesktop.swingx.util.os; classe pública OCR {private final string lang_option = "-l"; // letras em inglês minúsculo l, não 1 string final privada eol = System.getProperty ("line.separator"); String privada TessPath = "C: // Arquivos de programas (x86) // TESSERACT-ACR"; // String privada TessPath = new File ("TESSERACT"). getAbsolutepath (); public String ReconheteText (arquivo imagefile, string imageformat) lança a exceção {file tempimage = imageiohelper.createImage (imagefile, imageformat); Arquivo outputfile = novo arquivo (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); Processo de processo = pb.start (); //tesseract.exe 1.jpg 1 -l chi_sim int w = process.waitfor (); // exclua o arquivo de trabalho temporário tempimage.delete (); if (w == 0) {buffarrederader in = new BufferredReader (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; switch (w) {case 1: msg = "erros de acesso a arquivos. pode haver espaços no nome do arquivo da sua imagem."; quebrar; Caso 29: msg = "Não é possível reciscar a imagem ou sua região selecionada."; quebrar; caso 31: msg = "formato de imagem não suportado."; quebrar; Padrão: msg = "Erros ocorreram."; } tempimage.Delete (); lançar uma nova hora de execução (msg); } novo arquivo (outputFile.getAbsolutepath ()+". txt"). Delete (); return strb.toString (); }} Testoc:
importar java.io.file; importar java.io.ioException; importar com.hhp.util.ocr; classe pública ocrtest {public static void main (string [] args) {string path = "c: //temp//ocrcode//4.png"; System.out.println ("Orc Test Begin ..."); tente {string valcode = new ocr (). reconheceText (novo arquivo (caminho), "png"); System.out.println (valcode); } catch (ioexception e) {e.printStackTrace (); } catch (Exceção e) {e.printStackTrace (); } System.out.println ("Orc Test End ..."); }} Após o teste, a taxa de reconhecimento de texto do TESSERACT-OCR 3.01 é muito alta, e a taxa de reconhecimento de códigos de verificação comum no site também é muito alta.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.