Java 텍스트 인식 프로그램의 핵심은 호출 할 수있는 OCR 엔진을 찾는 것입니다. Tesseract-Acr은 1985 년부터 1995 년까지 HP Labs에서 개발 한 OCR 엔진이며 현재 Google에 있습니다. Tesseract-Aroc 3.0은 중국어를 지원하며 중국어를 지원합니다. 그러나 TesserAct-Acr 3.0은 그래픽 인터페이스의 클라이언트가 아니며 다른 사람이 작성한 FreeOcro 그래픽 클라이언트는 새로운 3.0 TrainedData 가져 오기를 지원하지 않습니다. 그러나 이것은 이제 무료 중국 OCR 소프트웨어가 있음을 의미합니다.
Java에서 Tesseract-Acr3.01을 사용하는 단계는 다음과 같습니다.
1. TesserAct-Aroc-Setup-3.01-1.exe를 다운로드하여 설치하십시오 (중국 인식은 버전 3.0 이상에서만 추가됩니다)
2. 설치 마법사에서 다운로드하려는 언어 패키지를 선택할 수 있습니다.
3. Java 그래픽 처리에 필요한 패키지 2 개 검색 및 다운로드 : Jai_Imageio-1.1-alpha.jar, SwingX-1.6.1.jar
4. 자바 프로그램 목록 :
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; imagejavav.imageio.imageio; import javax.imageio.imageoader; javax.imageio.imagewriteparam; import javax.imageio.imagewriter; import javax.imageio.metadata.iiometadata; import javax.imageio.stream.imageinputstream; import javax.imageio.stream.imageoutputstream; import com.sun.media.imageio.plugins.piffarmage class imageioHelper {public static 파일 CreateImage (파일 imageFile, String imageFormat) {file tempfile = null; {iterator readers = imageio.getImagerEadersByFormatName (imageFormat); imageReader reader = readers.next (); imageInputStream iis = imageio.createImageInputStream (ImageFile); reader.setInput (IIS); // 스트림 메타 데이터 IIOMETADATA StreamMetadata = 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 (StreamMetadata, Image, Tiffwriteparam); ios.close (); Writer.dispose (); reader.dispose (); } catch (ioexception e) {e.printstacktrace (); } 반환 온도; } private static 파일 tempimageFile (파일 ImageFile) {String path = imageFile.getPath (); StringBuffer strb = new StringBuffer (경로); strb.insert (path.lastindexof ( '.'), 0); 새 파일을 반환합니다 (strb.toString (). REPLECTFIRST ( "(? <= //.) (// w+) $", "tif"); }} OCR 클래스 :
package com.hhp.util; import java.io.bufferedReader; import java.io.file; import java.io.fileInputStream; import 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"); 개인 문자열 tesspath = "c : // program files (x86) // tesseract-ocr"; // private String tesspath = 새 파일 ( "TesserAct"). getAbsolutepath (); public String alludizetext (file imageFile, String imageFormat) 예외 {file tempimage = imageioHelper.createImage (imageFile, imageFormat); 파일 outputfile = 새 파일 (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 = 새로운 프로세스 빌더 (); 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) {new 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 {문자열 msg; switch (w) {case 1 : msg = "파일에 액세스하는 오류. 이미지의 파일 이름에 공백이있을 수 있습니다."; 부서지다; 사례 29 : MSG = "이미지 또는 선택한 영역을 다시 생각할 수 없습니다."; 부서지다; 사례 31 : msg = "지원되지 않는 이미지 형식."; 부서지다; 기본값 : msg = "오류가 발생했습니다."; } tempimage.delete (); 새로운 runtimeexception (MSG)을 던지십시오. } 새 파일 (outputfile.getAbsolutePath ()+". txt"). delete (); return strb.tostring (); }} 테스트코 사람 :
가져 오기 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 ( "오크 테스트 시작 ..."); try {string valcode = new ocr (). enlokizetext (새 파일 (path), "png"); System.out.println (valcode); } catch (ioexception e) {e.printstacktrace (); } catch (예외 e) {e.printstacktrace (); } system.out.println ( "Orc Test End ..."); }} 테스트 후 TesserAct-Acr 3.01의 텍스트 인식 속도는 매우 높으며 웹 사이트의 일반적인 검증 코드의 인식 속도도 매우 높습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.