กุญแจสำคัญในโปรแกรมการจดจำข้อความ Java คือการค้นหาเอ็นจิ้น OCR ที่สามารถเรียกได้ Tesseract-COR เป็นเครื่องยนต์ OCR ที่พัฒนาโดย HP Labs ตั้งแต่ปี 1985 ถึง 1995 และตอนนี้อยู่ใน Google Tesseract-COR 3.0 ได้รับการปล่อยตัวสนับสนุนภาษาจีน อย่างไรก็ตาม Tesseract-COR 3.0 ไม่ได้เป็นไคลเอนต์สำหรับอินเทอร์เฟซกราฟิกและไคลเอนต์กราฟิก FreeOcr ที่เขียนโดยผู้อื่นไม่สนับสนุนการนำเข้าใหม่ 3.0 TranedData ใหม่ แต่นี่หมายความว่าขณะนี้มีซอฟต์แวร์ OCR ของจีนฟรี
ขั้นตอนในการใช้ Tesseract-COC3.01 ใน Java มีดังนี้:
1. ดาวน์โหลดและติดตั้ง tesseract-cor-setup-3.01-1.exe (การรับรู้ภาษาจีนจะถูกเพิ่มในเวอร์ชัน 3.0 หรือสูงกว่า) เท่านั้น
2. คุณสามารถเลือกแพ็คเกจภาษาที่คุณต้องการดาวน์โหลดในตัวช่วยสร้างการติดตั้ง
3. ค้นหาและดาวน์โหลด 2 แพ็คเกจที่จำเป็นสำหรับการประมวลผลกราฟิก Java: JAI_IMAGEIO-1.1-Alpha.jar, swingx-1.6.1.jar
4. รายการโปรแกรม java:
คลาส ImageioHelper:
นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.util.iterator; นำเข้า java.util.locale; นำเข้า Javax.imageio.iioimage; imagejavax.imageio.imageio; javax.imageio.imagewriteparam; นำเข้า Javax.imageio.imagewriter; นำเข้า Javax.imageio.metadata.iiometadata; นำเข้า Javax.imageio.stream.imageInputstream; นำเข้า Javax.imageio.stream.imageOutputstream; com.sun.media.imageio.plugins.tiff.tiffimagewriteparam; คลาสสาธารณะ imageiohelper {ไฟล์คงที่สาธารณะ createimage (ไฟล์ imagefile, string imageFormat) {ไฟล์ tempfile = null; ลอง {iterator readers = imageio.getimageEdersByFormatName (imageFormat); imageReader reader = readers.next (); ImageInputStream IIS = Imageio.CreateImageInputStream (ImageFile); reader.setInput (IIS); // อ่าน metadata riemetadata streammetadata = reader.getStreamMetadata (); // ตั้งค่า writeparam tiffimagewriteparam tiffwriteparam = ใหม่ tiffimagewriteparam (locale.chinese); tiffwriteparam.setCompressionMode (imagewriteparam.mode_disabled); // รับ TIF Writer และตั้งค่าเอาต์พุตเป็น File Iterator Writers = imageio.getimagewritersbyFormatName ("tiff"); Imagewriter Writer = Writers.next (); bufferedImage bi = reader.read (0); IioImage image = ใหม่ 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 (); } return tempfile; } ไฟล์คงที่ส่วนตัว tempimageFile (ไฟล์ imageFile) {String Path = imageFile.getPath (); StringBuffer strb = new StringBuffer (PATH); strb.insert (path.lastindexof ('.'), 0); ส่งคืนไฟล์ใหม่ (strb.toString (). แทนที่ first ("(? <= //.) (// w+) $", "tif")); - คลาส OCR:
แพ็คเกจ com.hhp.util; นำเข้า java.io.bufferedreader; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.InputStreamReader; นำเข้า java.util.arraylist; นำเข้า java.util.list; นำเข้า java.util.list; นำเข้า org.jdesktop.swingx.util.os; คลาสสาธารณะ OCR {สตริงสุดท้ายส่วนตัว lang_option = "-l"; // ตัวอักษรภาษาอังกฤษตัวพิมพ์เล็ก l, ไม่ใช่ 1 สตริงสุดท้ายส่วนตัว eol = system.getProperty ("line.separator"); สตริงส่วนตัว tesspath = "c: // ไฟล์โปรแกรม (x86) // tesseract-coR"; // สตริงส่วนตัว tesspath = ไฟล์ใหม่ ("tesseract"). getabsolutepath (); Public String Recognizetext (ไฟล์ imageFile, string imageFormat) พ่นข้อยกเว้น {ไฟล์ tempimage = imageiohelper.createImage (ImageFile, imageFormat); ไฟล์ outputFile = ไฟล์ใหม่ (imageFile.getParentFile (), "เอาต์พุต"); StringBuffer strb = new StringBuffer (); รายการ cmd = new ArrayList (); if (os.iswindowsxp ()) {cmd.add (tesspath+"// tesseract"); } อื่นถ้า (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 = processbuilder ใหม่ (); pb.directory (imagefile.getParentFile ()); cmd.set (1, tempimage.getName ()); PB.Command (CMD); PB.RedireCterRorStream (จริง); กระบวนการกระบวนการ = pb.start (); //tesseract.exe 1.jpg 1 -l Chi_sim int w = process.waitfor (); // ลบไฟล์ทำงานชั่วคราว tempimage.delete (); if (w == 0) {bufferedReader in = new bufferedReader (ใหม่ inputStreamReader (ใหม่ fileInputStream (outputFile.getAbSolutePath ()+". txt"), "UTF-8")); String str; ในขณะที่ ((str = in.readline ())! = null) {strb.append (str) .append (eol); } in.close (); } else {String msg; สวิตช์ (w) {กรณีที่ 1: msg = "ข้อผิดพลาดในการเข้าถึงไฟล์อาจมีช่องว่างในชื่อไฟล์ของภาพของคุณ"; หยุดพัก; กรณีที่ 29: msg = "ไม่สามารถจัดทำภาพหรือภูมิภาคที่เลือกได้"; หยุดพัก; กรณีที่ 31: msg = "รูปแบบภาพที่ไม่ได้รับการสนับสนุน"; หยุดพัก; ค่าเริ่มต้น: msg = "ข้อผิดพลาดเกิดขึ้น"; } tempimage.delete (); โยน RuntimeException ใหม่ (MSG); } ไฟล์ใหม่ (outputFile.getAbsolutePath ()+". txt"). delete (); return strb.toString (); - Testocr:
นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า com.hhp.util.ocr; คลาสสาธารณะ ocrtest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริงพา ธ = "c: //temp//ocrcode//4.png"; System.out.println ("การทดสอบ orc เริ่มต้น ... "); ลอง {string valcode = new ocr (). RepondizeText (ไฟล์ใหม่ (พา ธ ), "png"); System.out.println (valcode); } catch (ioexception e) {e.printstacktrace (); } catch (exception e) {e.printstacktrace (); } system.out.println ("orc test end ... "); - หลังจากการทดสอบอัตราการจดจำข้อความของ Tesseract-COR 3.01 สูงมากและอัตราการรับรู้ของรหัสการตรวจสอบทั่วไปในเว็บไซต์ก็สูงมากเช่นกัน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น