OCR is 什么东东?
ocr是Optical Character Recognition(光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
上面一段描述来源于某广告度
什么叫Tesseract?
算了,这不是重点,我提供了一个学习什么是Tesseract的平台,需要的自己去看,点击我跳转
Tesseract的github地址:https://github.com/tesseract-ocr/tesseract
tess-two
Tesseract是使用C++实现的,在Android上使用有一丢丢的麻烦,tess-two就是我们非常喜欢的东西了,它封装了Java API,可以在Android平台上直接调用,是不是开心到飞呢。
tess-two的github地址:https://github.com/rmtheis/tess-two
tess-two的使用
这里我们以Android Studio开发工具为主。
Android版本要求,最低2.3
在app的build.gradle里面添加
dependencies {
implementation 'com.rmtheis:tess-two:9.1.0'
}
识别文字,我们还需要数据包
数据包下载地址:https://github.com/tesseract-ocr/tessdata
我们使用chi_sim.traineddata数据包,根据自己的需求下载对应的数据包。
数据包下载下来放到assets文件夹下
val baseApi = TessBaseAPI()
baseApi.setDebug(true)
baseApi.init(path, LANGUAGE_FILE_NAME)//这里需要注意
baseApi.setImage(bitmap)
val text = baseApi.utF8Text
文字识别的关键代码就五行,是不是很简单。
文字识别过程中,比较耗时,所以建议放到子线程中。
baseApi.init在初始化中,需要两个参数
第一个参数:数据包放到存储卡中位置
第二个参数,数据包的名称
我们点击进去看看init的实现
从源码中可以看出,
1.数据包路径不能为空
2.数据包存储位置上一级文件夹的名称必须是tessdata
3.第二个参数必须是存储在sd卡上的名称,后缀必须是.traineddata
所以,在app启动的时候,需要把assets文件夹中的数据包copy到存储卡上。
Android 6.0还要申请存储卡读写权限哦。
demo效果图