tesseract 是非常著名的Open Source 的文字辨識套件。
透過tesseract-ocr進行影像辨識之成果如下圖,可以看到整體辨識的準確度非常高。
要在Android 上運行文字辨識需要完成以下幾個步驟 :
1. 載入相依套件(tesseract-ocr)
2. 載入辨識用模型
3. 開啟存取權限
4. 進行辨識
1. 載入相依套件(tesseract-ocr)
先在專案中的build.gradl 中增加 tess-two 的套件包。
compile 'com.rmtheis:tess-two:6.0.0'
2. 載入辨識用模型
取得訓練好的資料 (連結),主要應用可參考之語言包如下:
1. eng 英文
2. chi_tra 繁體中文
3. chi_sim 簡體中文
3. 開啟存取權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
4.進行辨識
宣告tesseract的辨識模型的位置與要使用的語言包。
static final String TESSBASE_PATH = "/storage/emulated/0/download/tesseract/";
static final String DEFAULT_LANGUAGE = "eng";
static final String CHINESE_LANGUAGE = "chi_tra";
以下函數為進行文字辨識之主要程式碼。
透過TessBaseAPI進行文字辨識,init 方法進行模組的初始化第一個參數為資料目錄,第二個參數為辨識的語言。
PageSegMode.PSM_SINGLE_LINE 是指來源影像之中只有單行文字需要進行辨識處理。
透過 setImage 方法設定需辨識的目標影像,再透過getUTF8Text取得辨識結果。
處理完後須主動釋放資源。
public String ocrWithEnglish() {
String resString = "";
imgSrc.setDrawingCacheEnabled(true);
final Bitmap bitmap = imgSrc.getDrawingCache();
final TessBaseAPI ocrApi = new TessBaseAPI();
ocrApi.init(TESSBASE_PATH, CHINESE_LANGUAGE);
ocrApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
ocrApi.setImage(bitmap);
resString = ocrApi.getUTF8Text();
ocrApi.clear();
ocrApi.end();
return resString;
}
此處較為關鍵之處為 辨識模型得路徑設定。
查閱原始碼中發現TessBaseAPI在進行初始化時會主動在路徑中加入tessdata的目錄夾。
因此需在TESSBASE_PATH所設定的路徑底下新增一個tessdata的資料夾,並在裡面放入辨識的語言模型。
若來源影像之中不僅只有單行文字需要進行辨識處理時可以參考其他設定(專案原始碼參考連結)。
範例專案 (連結)
留言列表