认证码识别

来源:互联网 发布:ae2015cc mac破解版 编辑:程序博客网 时间:2024/05/21 19:26


 

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;

import javax.imageio.ImageIO;

import javax.imageio.ImageReader;

import javax.imageio.ImageWriteParam;

import javax.imageio.ImageWriter;

import javax.imageio.metadata.IIOMetadata;

importjavax.imageio.stream.ImageInputStream;

importjavax.imageio.stream.ImageOutputStream;

 

importcom.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;

 

public class ImageIOHelper

{

         /**

          * 图片文件转换为tif格式

          * @param imageFile 文件路径

          * @param imageFormat 文件扩展名

          * @return

          */

         publicstatic File createImage(File imageFile, String imageFormat)

         {

                   FiletempFile = null;

                   try

                   {

                            Iterator<ImageReader>readers = ImageIO.getImageReadersByFormatName(imageFormat);

                            ImageReaderreader = readers.next();

 

                            ImageInputStreamiis = ImageIO.createImageInputStream(imageFile);

                            reader.setInput(iis);

                            //Read the stream metadata

                            IIOMetadatastreamMetadata = reader.getStreamMetadata();

 

                            //Set up the writeParam

                            //TIFFImageWriteParamtiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);

                            TIFFImageWriteParamtiffWriteParam = new TIFFImageWriteParam(Locale.ENGLISH);

                            tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);

 

                            //Get tif writer and set output to file

                            Iterator<ImageWriter>writers = ImageIO.getImageWritersByFormatName("tiff");

                            ImageWriterwriter = writers.next();

 

                            BufferedImagebi = reader.read(0);

                            IIOImageimage = new IIOImage(bi, null, reader.getImageMetadata(0));

                            tempFile= tempImageFile(imageFile);

                            ImageOutputStreamios = ImageIO.createImageOutputStream(tempFile);

                            writer.setOutput(ios);

                            writer.write(streamMetadata,image, tiffWriteParam);

                            ios.close();

 

                            writer.dispose();

                            reader.dispose();

 

                   }catch (IOException e)

                   {

                            e.printStackTrace();

                   }

                   returntempFile;

         }

 

         privatestatic File tempImageFile(File imageFile)

         {

                   Stringpath = imageFile.getPath();

                   StringBufferstrB = new StringBuffer(path);

                   strB.insert(path.lastIndexOf('.'),0);

                   returnnew File(strB.toString().replaceFirst("(?<=//.)(//w+)$","tif"));

         }

 

}



import java.io.BufferedReader; 

import java.io.File; 

import java.io.FileInputStream; 

import java.io.IOException;

import java.io.InputStreamReader; 

import java.util.ArrayList; 

import java.util.List; 

import org.jdesktop.swingx.util.OS; 

 

public class OCR { 

   private final String LANG_OPTION = "-l";  //英文字母小写l,并非数字1 

   private final String EOL =System.getProperty("line.separator"); 

   private String tessPath = "F://soft//Tesseract-OCR"; 

   //private String tessPath = newFile("tesseract").getAbsolutePath(); 

     

   public String recognizeText(File imageFile,String imageFormat)throwsException{ 

       File tempImage = ImageIOHelper.createImage(imageFile,imageFormat); 

       File outputFile = newFile(imageFile.getParentFile(),"output"); 

       StringBuffer strB = new StringBuffer(); 

       List<String> cmd = new ArrayList<String>(); 

       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); 

         

       Process process = pb.start(); 

       System.out.println(cmd);

       //tesseract.exe 1.jpg 1 -l chi_sim 

       int w = process.waitFor(); 

         

       //删除临时正在工作文件 

       tempImage.delete(); 

         

       if(w==0){ 

           BufferedReader in = new BufferedReader(new InputStreamReader(newFileInputStream(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 = "Errorsaccessing files.There may be spaces in your image's filename."; 

                    break; 

               case 29: 

                    msg = "Cannotrecongnize the image or its selected region."; 

                    break; 

                case 31: 

                    msg = "Unsupportedimage format."; 

                    break; 

                default: 

                    msg = "Errorsoccurred."; 

           } 

           tempImage.delete(); 

           throw new RuntimeException(msg); 

       } 

       new File(outputFile.getAbsolutePath()+".txt").delete(); 

       return strB.toString(); 

   } 

   

   public static void main(String[] args) { 

       String path = "d://OCR//22.jpg";    

       try {    

           String valCode = new OCR().recognizeText(new File(path),"jpg");    

           System.out.println(valCode);    

       } catch (IOException e) {    

           e.printStackTrace();    

       } catch (Exception e) { 

           e.printStackTrace(); 

       }      

   }  


0 0
原创粉丝点击