OCR is 什么東東八回?
ocr是Optical Character Recognition(光學字符識別)是指電子設備(例如掃描儀或數(shù)碼相機)檢查紙上打印的字符芹务,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程。
上面一段描述來源于某廣告度
什么叫Tesseract?
算了狸捕,這不是重點,我提供了一個學習什么是Tesseract的平臺众雷,需要的自己去看灸拍,點擊我跳轉
Tesseract的github地址:https://github.com/tesseract-ocr/tesseract
tess-two
Tesseract是使用C++實現(xiàn)的,在Android上使用有一丟丟的麻煩砾省,tess-two就是我們非常喜歡的東西了鸡岗,它封裝了Java API,可以在Android平臺上直接調(diào)用编兄,是不是開心到飛呢轩性。
tess-two的github地址:https://github.com/rmtheis/tess-two
tess-two的使用
這里我們以Android Studio開發(fā)工具為主。
Android版本要求狠鸳,最低2.3
在app的build.gradle里面添加
dependencies {
? ? implementation 'com.rmtheis:tess-two:9.1.0'
}
識別文字揣苏,我們還需要數(shù)據(jù)包
數(shù)據(jù)包下載地址:https://github.com/tesseract-ocr/tessdata
我們使用chi_sim.traineddata數(shù)據(jù)包悯嗓,根據(jù)自己的需求下載對應的數(shù)據(jù)包。
數(shù)據(jù)包下載下來放到assets文件夾下
val baseApi = TessBaseAPI()
baseApi.setDebug(true)
baseApi.init(path, LANGUAGE_FILE_NAME)//這里需要注意
baseApi.setImage(bitmap)
val text = baseApi.utF8Text
文字識別的關鍵代碼就五行卸察,是不是很簡單脯厨。
文字識別過程中,比較耗時坑质,所以建議放到子線程中合武。
baseApi.init在初始化中,需要兩個參數(shù)
第一個參數(shù):數(shù)據(jù)包放到存儲卡中位置
第二個參數(shù)洪乍,數(shù)據(jù)包的名稱
我們點擊進去看看init的實現(xiàn)
從源碼中可以看出,
1.數(shù)據(jù)包路徑不能為空?
2.數(shù)據(jù)包存儲位置上一級文件夾的名稱必須是tessdata
3.第二個參數(shù)必須是存儲在sd卡上的名稱夜焦,后綴必須是.traineddata
所以壳澳,在app啟動的時候,需要把assets文件夾中的數(shù)據(jù)包copy到存儲卡上茫经。
Android 6.0還要申請存儲卡讀寫權限哦巷波。
demo效果圖