Android百度文字识别bitmap,Android集成Tesseract OCR实现图片文字识别

最近项目需要做图片上的文字识别,在网上找了很久,这方面的知识挺多的,但是很杂。将最近学习到的东西整理一下,仅供参考。

1、Tesseract OCR 介绍我就不说了,自行百度,或者访问:https://github.com/tesseract-ocr  在这个下面你需要关心两个项目:

tesseract:开源的识别引擎,里面包含Android的项目

tessdata:字体识别库(chi_sim.traineddata 中文简体,chi_tra.traineddata 中文繁体,eng.traineddata 英文库)

PS:请自行下载

2、目前针对Android部分的jni需要自己配置很多资源文件,所以本文使用的是Tesseract OCR的一个分支(别人项目自己说的,是不是真的我不知道)

下载地址: https://github.com/rmtheis/tess-two     一定要下载

3、下载解压就ok ,在 tess-two里面找到 tess-two 文件夹,记一下及行,后面要用。

可以开始了么?不行!!!

4、 tess-two 是一个ndk项目!(会ndk的大神可以跳过)

加入你的Android Studio(下文简称为AS)里面没有下载NDK那就跟着我一步步来。

打开AS,点击File,选择settings。(快捷键 Ctrl + alt + S)

偷个懒,直接看图片。红色框全部打钩就行。然后OK,等它自己下载完成后点击finish。

1305745239998238720.htm

71633eb1ba7ea39ef80d6f42e3c339cf.png

这样就在AS里面下载了NDK,是不是很简单。

PS:不要问我NDK怎么开发,我不是来讲这个的。

5、在AS里面新建一个项目。还记得之前 tess-two里面的 tess-two 文件夹么。嗯,将它作为 module导入项目中,添加到项目依赖中,然后编译。

。。。。。。。。。

我去,报错!!!

1305745239998238720.htm

如果是android-maven的错误。这样子解决

打开添加的tess-two的module,找到build.gradle文件。

在最开始的地方添加

代码:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:2.1.2'

classpath 'org.codehaus.groovy:groovy-backports-compat23:2.3.5'

classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'

classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

}

}

图片辅助:

1305745239998238720.htm

21ccac10d73cef8c209ef6692dba01bc.png

编译通过,恭喜,集成成功!!!

这就完了?不对,还有怎么用。

6、在你的项目中要有相关tessdata文件,tessdata的下载自己参考步骤1里面的。

chi_sim.traineddata一般是使用这个。

7、开始使用!!!

先来初始化TessBaseAPI

private void initTessBaseData() {

TessBaseAPI mTess = new TessBaseAPI();

//存放tessdata的文件路径 就是chi_sim.traineddata文件的位置chi_sim.traineddata

String datapath = Environment.getExternalStorageDirectory() + "/tesseract/";

//选择语言 chi_sim 简体中文 eng 英文

String language = "eng";

File dir = new File(datapath + "tessdata/");

if (!dir.exists())

dir.mkdirs();

mTess.init(datapath, language);

}

第二步:获取图片,进行识别

public void onClick(View v) {

//获取自己的图片,这里是自己放在项目里面的。

Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.testimage);

//将图片设置到mTess进行识别

mTess.setImage(bitmap);

//获取识别的文字(这里会等一段时间,这里的代码是在主线程的,建议将这部分代码放到子线程)

String result = mTess.getUTF8Text();

TextView txtView = new TextView(this);

txtView.setText("结果为:" + result);

ImageView imageView = new ImageView(this);

imageView.setImageBitmap(bitmap);

}

我忘记把view添加到界面,自己自行发挥了。

PS:为了提高图片识别的准确率,一般是会对图片进行灰度处理。这里就不做介绍了,基本功能都是可以实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值