之前在對tif做ocr的時候,在網上找了很多資源,最后選擇了tesseract。
關於tesseract相信大多數人找到了資料無非兩種,我來一一闡述一下用后的感受。
1.使用tess4j,在實測中發現這種封裝后的效果極差,稍微復雜一點的文檔識別出來的精度慘不忍睹。所以推薦以下一種方式。
2.安裝tesseract原版客戶端,使用java中的ProcessBuilder運行。
網上找出來的資源多是3個類,一個OCR,一個OCR2,一個ImageIOHelper,在使用中發現了實在實際上只OCR了tif中的第一個圖片,如果tif有多張那么后面都被略過。
於是我把代碼研究了后,發現在ImageIOHelper中的這一行代碼出了問題
BufferedImage bi = reader.read(0); IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0)); tempFile = tempImageFile(imageFile); ios = ImageIO.createImageOutputStream(tempFile); writer.setOutput(ios); writer.write(streamMetadata, image, tiffWriteParam);
BufferedImage bi 只是reader.read的第一張圖,並沒有把剩余的圖片進行讀取。
在修改的過程中我又想,又為什么要把原來的文檔轉成imageFile呢,tesseract客戶端不是可以直接讀取源文件?難道是轉成imageFile后精度會變高,最后我試了一下,發現轉沒轉結果都沒有發生改變
最后我整理了一下代碼,以下是完整的教程。
1.安裝tesseract ,我是用的是5.0,將tessdata.zip中的內容覆蓋到安裝目錄的tessdata文件夾下
2.記得看下環境變量下是否有這兩台
一丶安裝路徑path
二丶TESSDATA_PREFIX變量
3.測試OCR.java 完成
tesseract安裝包及tessdata壓縮包,和java文件的網盤地址:
鏈接: https://pan.baidu.com/s/1UchatLQm2WRBksKTd1aK3w 提取碼: 14hc