CentOS安裝Tesseract,通過(guò)Java程序進(jìn)行圖像識(shí)別

起因

之前的文章里說(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)信息

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/5402364-ce4493e285b5bcd7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
分別是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/)




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容