Android | Kotlin tess-two圖像文字識別(Ocr)
先把tess-two的Github鏈接掛上:https://github.com/rmtheis/tess-two,先說明一下,這個項目已經(jīng)停止更新了。(Github有時會抽風(fēng)上不去,下載不了也可以直接找我要)
按照用法說明,先在build.gradle中添加依賴
implementation 'com.rmtheis:tess-two:9.1.0'

在用法的上方有一個預(yù)先準(zhǔn)備的說明,需要Android版本2.3及以上,并且需要去下載一個3.04的訓(xùn)練數(shù)據(jù)文件(注意不要下載錯了,不然程序會出錯),下載鏈接是:https://github.com/tesseract-ocr/tessdata/tree/3.04.00

可以全部都下載,我嘗試了單獨進(jìn)入想要的文件想點下載,卻沒有反應(yīng)。下載后解壓放著備用。訓(xùn)練數(shù)據(jù)文件是以.traineddata作為后綴名,以某語言英文的前三位字母命名的,英文對應(yīng)的是eng.traineddata,中文(簡體)是chi_sim.traineddata,中文(繁體)則是chi_tra.traineddata。

然后是如何在項目中實現(xiàn),這里可以去參考一下tess-two推薦的分支項目(相關(guān)代碼演示請往下看):https://github.com/adaptech-cz/Tesseract4Android

這兩個的用法是差不多的,我本來是想用它這個比較新的,但是在使用他們提供的maven路徑后gradle同步非常慢,而且這好像是必須加的,如果有梯子,想試試這個新的,要注意訓(xùn)練數(shù)據(jù)要去下載4.0的,在文檔中也有說明并給出網(wǎng)址。
題外話了,接著看文檔(后面有Kotlin代碼,看不下去可以跳過):

想吐槽一下,我逛了很多的文章都說要把下載的訓(xùn)練數(shù)據(jù)文件放到Assets文件夾下,然后......然后就沒有然后了,我在這里卡了很久。
Assets目錄默認(rèn)是沒有的,需要自己創(chuàng)建,注意是與res文件夾同級的:

你只需要將你需要的訓(xùn)練數(shù)據(jù)文件復(fù)制到此文件夾下即可:

? ? ? ? 在用法的第三點中有提到,你要初始化API,這里需要傳入一個路徑(dataPath),而你的文件是放在Assets文件夾下的,打包后是獲取不到Assests文件夾的路徑的,需要利用Context對象獲取到Assets管理器去訪問Assets文件夾下的文件,然后把訓(xùn)練數(shù)據(jù)文件拷貝到一個能獲取到路徑的位置。
????????考慮到兩個API的方法有點不同,并且上方代碼是Java代碼,我用Kotlin代碼簡單演示一下如何去使用:
在MainActivity.kt中可以這樣去使用:
因為識別過程比較耗時,推薦放到子線程中:
這個識別的功能中規(guī)中矩,需要圖片盡可能清晰明了(不然可能會出現(xiàn)錯誤,甚至識別不出來)。如果是需要識別驗證碼,還需要對圖片進(jìn)行一定的處理,比如二值化(比較重要)、去除邊框、噪點等等,可以去網(wǎng)上逛逛。