Javaテキスト認識プログラムの鍵は、呼び出されるOCRエンジンを見つけることです。 Tesseract-ocrは、1985年から1995年までHP Labsによって開発されたOCRエンジンであり、現在はGoogleにあります。 Tesseract-OCC3.0がリリースされ、中国語をサポートしています。ただし、Tesseract-OCR 3.0はグラフィカルインターフェイスのクライアントではなく、他の人によって書かれたFreeCORCORグラフィカルクライアントは、新しい3.0 TrainedDataのインポートをサポートしていません。しかし、これは現在、無料の中国のOCRソフトウェアがあることを意味します。
JavaでTesseract-OCR3.01を使用する手順は次のとおりです。
1。Tesseract-cocr-setup-3.01-1.exeのダウンロードとインストール(中国の認識はバージョン3.0以上でのみ追加されます)
2。インストールウィザードでダウンロードする言語パッケージを選択できます。
3. Javaグラフィックスの処理に必要な2つのパッケージを検索してダウンロード:Jai_Imageio-1.1-Alpha.jar、Swingx-1.6.1.jar
4.Javaプログラムリスト:
ImageioHelperクラス:
java.awt.image.bufferedimage; import java.io.file; Import java.io.ioexception; Import java.util.iterator; Import java.util.locale; Import javax.iioimage; ImageJavax.imageio.imageio; Import.imagio.image.imageereaser; javax.imageio.imagewriteparam; Import javax.imageio.imagewriter; Import javax.imageio.metadata.iiometadata; Import javax.imageio.imageInputStream; Import javax.imageio.stream.imageOtputStream; com.sun.media.imageio.plugins.tiff.tiffimagewriteparam; public class imageiohelper {public static file createimage(file imagefile、string imageformat){file tempfile = null; try {iterator readers = imageio.getimagereadersbyformatname(imageformat); ImagEReader reader = readers.next(); ImageInputStream iis = imageio.createimageinputStream(imageFile); reader.setInput(IIS); //ストリームメタデータIIOMETADATA STREEMMETADATA = READER.GETSTREAMMETADATA(); // writeparam tiffimagewriteparam tiffwriteparam = new tiffimagewriteparam(locale.chinese)をセットアップします。 tiffwriteparam.setCompressionMode(imagewriteparam.mode_disabled); // tif Writerを取得し、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(stramemetadata、image、tiffwriteparam); ios.close(); writer.dispose(); reader.dispose(); } catch(ioexception e){e.printstacktrace(); } tempfileを返します。 } private static file tempimageFile(file imageFile){string path = imagefile.getPath(); stringbuffer strb = new stringbuffer(path); strb.insert(path.lastindexof( '。')、0);新しいファイルを返します(strb.tostring()。 }} OCRクラス:
パッケージcom.hhp.util; import java.io.bufferedreader; java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.io.inputStreamReaderをインポートします。 java.util.arraylistをインポートします。 java.util.listをインポートします。 java.util.listをインポートします。 Import org.jdesktop.swingx.util.os;パブリッククラスOCR {プライベートファイナルストリングlang_option = "-l"; //英語の手紙小文字L、1つではない最終文字列eol = system.getProperty( "line.separator"); private string tesspath = "c://プログラムファイル(x86)// tesseract-ocr"; // private string tesspath = new file( "tesseract")。getabsolutepath(); public string readizetext(file imagefile、string imageformat)スロー例外{file tempimage = imageiohelper.createimage(imageFile、ImageFormat); file outputFile = new file(imagefile.getParentFile()、 "output"); stringbuffer strb = new StringBuffer();リスト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);プロセスプロセス= pb.start(); //tesseract.exe 1.jpg 1 -l chi_sim int w = process.waitfor(); //一時的な作業ファイルtempimage.delete()を削除します。 if(w == 0){bufferedReader in = new bufferedReader(new inputStreamReader(new FileInputStream(outputFile.getAbsolutepath()+"。txt")、 "utf-8"));文字列str; while((str = in.readline())!= null){strb.append(str).append(eol); } in.close(); } else {string msg; switch(w){ケース1:msg = "ファイルにアクセスするエラー。画像のファイル名にスペースがある場合があります。";壊す;ケース29:MSG = "画像またはその選択された領域を再ング化することはできません。";壊す;ケース31:MSG = "サポートされていない画像形式。";壊す;デフォルト:MSG = "エラーが発生しました。"; } tempimage.delete();新しいruntimeexception(msg)を投げる; } new file(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//ocrcode//4.png"; system.out.println( "orc test begin ..."); try {string valcode = new OCR()。 System.out.println(valcode); } catch(ioexception e){e.printstacktrace(); } catch(Exception e){e.printstacktrace(); } system.out.println( "orc test end ..."); }}テスト後、Tesseract-cocr 3.01のテキスト認識率は非常に高く、ウェブサイト上の一般的な検証コードの認識率も非常に高くなっています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。