赞
踩
最近项目需要做图片上的文字识别,在网上找了很久,这方面的知识挺多的,但是很杂。将最近学习到的东西整理一下,仅供参考。
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。
这样就在AS里面下载了NDK,是不是很简单。
PS:不要问我NDK怎么开发,我不是来讲这个的。
5、在AS里面新建一个项目。还记得之前 tess-two里面的 tess-two 文件夹么。嗯,将它作为 module导入项目中,添加到项目依赖中,然后编译。
。。。。。。。。。
我去,报错!!!
如果是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'
}
}
图片辅助:
编译通过,恭喜,集成成功!!!
这就完了?不对,还有怎么用。
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:为了提高图片识别的准确率,一般是会对图片进行灰度处理。这里就不做介绍了,基本功能都是可以实现的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。