起因
之前的文章里說(shuō)過(guò),在我的Java項(xiàng)目里需要用到Tesseract來(lái)進(jìn)行圖像識(shí)別,在Mac中只需要通過(guò)brew命令即可安裝,然而到服務(wù)器上就需要下載源碼進(jìn)行編譯了。
還有一個(gè)問(wèn)題是在本地的Java項(xiàng)目中使用了Tess4J來(lái)進(jìn)行Java對(duì)Tesseract命令的調(diào)用可以很方便進(jìn)行圖像識(shí)別,然而在服務(wù)器上卻出現(xiàn)了“tesseract”等找不到的問(wèn)題。各種奇葩問(wèn)題我就不說(shuō)了,最后的解決方案是棄用Tess4J,改為直接在Java代碼中拼接命令執(zhí)行,相當(dāng)于模擬在命令行中執(zhí)行圖像識(shí)別。
安裝
- 安裝gcc、gcc-c++、make,如果有就不需要安裝:
yum install gcc gcc-c++ make - 安裝編譯相關(guān)工具,沒有的話編譯時(shí)候可能報(bào)錯(cuò):
yum install autoconf automake libtool - 安裝對(duì)圖片識(shí)別相關(guān)支持工具,沒有這些在后續(xù)執(zhí)行Tesseract命令時(shí)會(huì)報(bào)錯(cuò),可以嘗試一下:
yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel - 安裝leptonica,首先去leptonica下載,下載后放到服務(wù)器解壓并編譯,leptonica是一個(gè)tesseract必須的工具:
#到leptonica的目錄執(zhí)行
./configure
make
make install
- 下載對(duì)應(yīng)的Tesseract,執(zhí)行:
./autogen.sh
./configure
make
make install
ldconfig
cp tessdata /usr/local/share -R
- 配置環(huán)境變量,否則在執(zhí)行時(shí)會(huì)出現(xiàn)找不到語(yǔ)言包的錯(cuò)誤:
vim ~/.bash_profile
加入一下內(nèi)容
tesseract-ocr
export TESSDATA_PREFIX=/usr/local/share/tessdata
然后執(zhí)行
source ~/.bash_profile
- 測(cè)試
我們可以執(zhí)行```tesseract -v``查看tesseract的版本相關(guān)信息

分別是tesseract版本,leptonica版本,以及對(duì)圖片文件的支持,這里的支持就是上面第三部安裝的支持。
我們可以上傳一個(gè)示例圖片到服務(wù)器目錄進(jìn)行測(cè)試:
cd ~/testocr
tesseract test.png out -l eng+chi_sim
cat out.txt
如果圖片中的內(nèi)容成功輸出表示我們相關(guān)配置都已經(jīng)OK,接下來(lái)就可以在Java代碼中進(jìn)行操作了。
#Java代碼
因?yàn)榇饲笆褂肨ess4J在服務(wù)器上無(wú)法成功執(zhí)行,所以后來(lái)切換成直接調(diào)用shell命令執(zhí)行。在此之前確保上面的步驟都能成功執(zhí)行。
class TesseractCMDServices {
def doOCR4lin(String ifile, String iconf = "eng+chi_sim") {
def res = []
def xcmd = []
xcmd.add("tesseract")
xcmd.add(ifile)
xcmd.add("tmp")
xcmd.add("-l")
xcmd.add(iconf)
def xpb = new ProcessBuilder()
xpb.command(xcmd)
xpb.redirectErrorStream(true)
def xpc = xpb.start()
def tim = xpc.waitFor()
if (tim == 0) {
def xin = new BufferedReader(new FileReader("tmp.txt"))
def line = xin.readLine()
while (line != null) {
if (!line.isEmpty()) res << line
line = xin.readLine()
}
} else {
res += "sorry, error code is " + tim
}
return res
}
}
#總結(jié)
完成這些之后我在Centos上的圖像識(shí)別部分代碼就可以正常執(zhí)行了,有相關(guān)問(wèn)題的同學(xué)可以留言交流。
#####參考資料
- [CentOS Install Tesseract-OCR](https://alantamproject.wordpress.com/2015/05/12/centos-install-tesseract-ocr/)
- [CentOs install Tesseract](https://my.oschina.net/ayy/blog/663592)
- [Tesseract-ocr and tess4j](https://flystarhe.github.io/2016/01/19/tesseract-ocr/)