Tess4J 是Java (JNA) 對 Tesseract OCR API 的封裝。
很久之前需要做一個自動登陸並對網頁上的未處理的數據進行按鈕點擊,其中需要登陸的驗證碼校驗,因此用了一下Tess4J,能識別一些簡單的文字和數字等,識別率好像一般,但出錯了就重新換一個驗證碼再試,多試幾次也能成功。現將之前簡單的使用流程記錄,備查。
Tess4J
是對Tesseract OCR API
的Java JNA
封裝。使java能夠透過呼叫Tess4J
的API來使用Tesseract OCR
。支援的格式包括TIFF、JPEG、GIF、PNG、BMP、JPEG、PDF
。這個開始接觸的時候,我對這兩個東西還搞混淆了。明確說一下,Tess4J
是java直接可使用的jar包,而Tesseract OCR
是支援Tess4J
進檔文字辨識的基礎,Tess4J
可直接使用Maven
方式引進。
<!-- tess4j start --> <dependency> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>5.6.0</version> </dependency> <!-- tess4j end -->
要提前下載好相關的語言庫文件,這裡我下了chi_sim.traineddata和eng.traineddata兩個
下載地址:https://codechina.csdn.net/mirrors/tesseract-ocr/tessdata
下載好後放在程式碼裡面的目錄下
準備兩張圖片放置在程式碼的資源目錄下,方便程式讀取,
圖片1
#圖片2
#兩張圖片放在資源目錄下
#程式碼如下:
package cn.ljhua; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.InputStream; import javax.imageio.ImageIO; import lombok.extern.slf4j.Slf4j; import net.sourceforge.tess4j.ITesseract; import net.sourceforge.tess4j.Tesseract; import net.sourceforge.tess4j.TesseractException; /** * Tess4jOcr测试示例 * @author liujh */ @Slf4j public class Tess4jOcrTest { public static void main(String[] args) { Tess4jOcrTest test = new Tess4jOcrTest(); test.ocrTest(); } public void ocrTest() { log.info("ocrTest start...."); long startMs = System.currentTimeMillis(); //Tesseract的代码开始---------------------->>>> ITesseract instance = new Tesseract(); /** * 组装接好tessdata目录的路径字符串 */ String filePathPre = System.getProperty("user.dir"); String dataPath = filePathPre + File.separator + "tessdata"; /** * 设置目录datapath the tessdata path to set * 否则会报Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.错误 */ instance.setDatapath(dataPath); //instance.setLanguage("eng");//默认,可以不写 instance.setLanguage("chi_sim");//设置中文识别 String imageName = "verifyCode.png"; try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) { BufferedImage bImage = ImageIO.read(inStream); //doOCR也可以传参为File,我这里传的BufferedImage String result = instance.doOCR(bImage); //识别的结果回来可能会带回车,处理掉 result = result.replaceAll("\n", ""); log.info("图片名:" + imageName +" 识别结果:"+ result); } catch (IOException e) { log.error(e.getMessage(),e); } catch (TesseractException e) { log.error(e.getMessage(),e); } imageName = "vCode2.jpg"; try (InputStream inStream = this.getClass().getResourceAsStream("/" + imageName)) { BufferedImage bImage = ImageIO.read(inStream); //doOCR也可以传参为File,我这里传的BufferedImage String result = instance.doOCR(bImage); //识别的结果回来可能会带回车,处理掉 result = result.replaceAll("\n", ""); log.info("图片名:" + imageName +" 识别结果:"+ result); } catch (IOException e) { log.error(e.getMessage(),e); } catch (TesseractException e) { log.error(e.getMessage(),e); } //Tesseract的代码结束--------------------->>>> log.info("ocrTest success. spend time :{} ms.", (System.currentTimeMillis() - startMs)); } }
測試結果截圖如:
英文辨識出來比較正常,中文辨識出來帶了空格,如果需要可以透過程式碼進一步去掉空格,至此, tess4j的簡單使用測試完成。
以上是如何利用tess4j實作Java中的圖片文字辨識功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!