Tesseract教程翻译:使用Tesseract 来开发一个简单的光学字符识别的安卓应用,Making a Simple OCR Android App using Tesseract

这 篇勃客说的是,怎么样可以轻松地开发一个可从安卓手机摄像头拍摄的图片里提取出文字的安卓应用.我们将会使用由Robert Theis 开发的Tesseract 安卓工具 (Tesseract Android Tools) 衍生版,叫做Tess 2 (Tess Two)。它们 都基于Tesseract 光学字符识别引擎(主要由谷歌维护)和Leptonica 图片处理库。
注意 : 以下操作指示是针对 安卓软件开发工具包 r19 和 安卓原生开发工具包 r7c 的,至少在写这篇勃客时( 在 这个代码树 中 )是如此。 妳应该向PATH 环境变量中加入适当的内容(参考下面 的排错小节 )。
-
1.下载源代码,或者复制(clone)这个 git仓库 。 这个项目包含狠多工具,可用来编译出可在安卓 上使用的Tesseract、Leptonica 和静态图像专家组格式(JPEG)库。 它包含一个Eclipse 安卓库项目, 它提供了一个Java 应用编程接口(API),使得妳可以访问到已编译成原生库的Tesseract 和Leptonica 应用编程接口。 妳不需要eyes-two 代码就可以完成这篇勃客所说的功能。
-
2.使用以下代码来构建此项目( 这里所说的 tess-two 目录是指 tess-two 中的那个子目录,也就是与 tess-two-test 处于同一级的那个目录 ):
cd <项目目录>/tess-two
ndk-build
android update project --path .
ant release
-
3.现在,将此项目作为一个库的形式导入到Eclipse 中。文件 -> 导入 -> 已有项目到工作空间中 -> tess-two 目录。右键单击此项目,Android Tools -> Fix Project Properties。右键单击此项目 -> 属性 -> Android -> 选中Is Library。
-
4.配置妳的项目,将tess-two 项目作为一个库来使用:右键单击妳的项目名字 -> 属性 -> Android -> Library -> Add,然后选中 tess-two 。现在,妳可以使用这个库来识别任何图片中的文字了。
-
5.首先,我们需要获取到图片。对于这个目的,我找到了一段简单的代码,可用于拍照,在 这里 。获取到位图之后,再做光学字符识别就狠简单了。注意调整 一下旋转和图片类型,比如说这样:
// _path = 要做光学字符识别的图片的路径
ExifInterface exif = new ExifInterface(_path);
int exifOrientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (exifOrientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
}
if (rotate != 0) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// 设置预旋转(pre rotate)
Matrix mtx = new Matrix();
mtx.preRotate(rotate);
// 旋转位置,并且转换成ARGB_8888 格式,后者是tess要求的
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
}
-
6.现在我们需要的图片已经在bitmap 中了,然后,我们只需要狠简单地使用TessBaseAPI 来进行光学字符识别,比如说这样:
TessBaseAPI baseApi = new TessBaseAPI();
// DATA_PATH = 训练数据的路径
// lang指定要识别的语言,要求该语言的数据文件存在,通常是"eng"
baseApi.init(DATA_PATH, lang); baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
-
7.现在,识别出来的文字内容已经存在于 recognizedText 变量中了,接下来妳想做什么都可以了 – 翻译、搜索、随便别的什么!补充一句,妳可以支持多种语言的,所需要的语言数据文件可在 这里 下载。妳甚至还可以将它们放置到assets 目录中,再在启动程序的时候复制到SD 卡里。
为了让傻瓜化来得更猛烈一点,并且让妳更好地理解这一砣文字,我已经上传了一个简单的使用Tess Two 做光学字符识别的程序到Github,叫做 简单安卓光学字符识别 (适合于初始学者)。如果 妳想体验一下一个更完善的程序(拍照时有区域选择框,可翻译识别出来的文字,有选项可切换语言)的话,那么可以下载(checkout)Robert Theis 的 安卓光学字符识别程序 (适合于中等玩家及以上)!
更新 : 2012年10月7日
参考
-
1. 使用安卓 Tesseract 工具 包( Tesseract Tools for Android )来创建基本的光学字符识别应用 作者Robert Theis
-
3.tess-two的读我(README )
排错
-
•. 关于更新PATH 环境变量 - 妳需要更新妳的PATH 环境变量,这样那些命令才能正常运行,否则就会出现“找不到此命令”(command not found)错误。对于安卓软件开发工具 包,将工具包中的 tools 和 platform-tools 目录添加到PATH 环境变量中。对于安卓原生开发工具 包,将 android-ndk 目录添加到PATH 环境变量中。GNU/Linux用户应该参考Harsha Dura 的 设置适当的路径( path )变量 以了解更多细节。
-
•.对于别的问题,妳可以尝试在此页面Ctrl+F 搜索一下,可能别的人已经遇到过类似的问题并且在评论中给出解决方法了。
用户创 建的项目
人们根据这篇教程创建了狠多项目,以下是两个例子:
-
1. DatumDroid 作者Aviral、Devashish和我
-
2. MachineRetina 作者Salman Gadit
如果妳也创建了一个这样的项目,就留下评论吧!
孟茜