作者:胡宸宸 | 来源:互联网 | 2023-10-11 12:27
关于tesseract识别工具有Google提供的版本有tesseract-android-tools,不过还有一个tesseract-two也是非常好用的,这里我们使用的是tes
关于tesseract识别工具有Google提供的版本有tesseract-android-tools,不过还有一个tesseract-two也是非常好用的,这里我们使用的是tesseract-two。tesseract是用c++实现的,需要封装Java API用于Android平台的调用。所以在使用tesseract-two之前得下载Android-NDK ,下载NDK之后,解压到自己电脑的一个文件夹下,配置eclipse引用下来的NDK。
解压下载来的NDK,因为要使用ndk-build该命令又为了方便起见,不用CD来CD去的~配置一下环境变量,在path中追加ndk所解压的目录。
tesseract-two其实是Tesseract Tools for Android的一个git分支,选择它是由于操作简单,并且集成了leptonica,一个图形处理工具。所以可以在gitbub上下载来
https://github.com/rmtheis/tess-two
也可以通过git来获取想要的资源。
http://git-scm.com/download/win
资源都准备好了,然后我们使用NDK编译(Windows下的CMD进入),敲入如下的命令(编译的时间会有点久)
cd tess-two
ndk-build
android update project -t 1 --path .
ant release
cd ..
cd eyes-two
ndk-build
android update project -t 1 --path .
ant release
eclipse里面的Android项目中导入编译好的类库,共三个项目,tess-two,tess-two-test 以及eyes-two。其中tess-two和eyes-two为android lib项目,供其它项目引用。
然后编写Java代码,但是发现会出错。主要由于在/mnt/sdcard/目录下缺少语言包,将tessdata下面的两个语言包放到sd卡的根目录下面就可以了~
import com.googlecode.tesseract.android.TessBaseAPI;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private static final String TESSBASE_PATH = "/mnt/sdcard/";
private static final String DEFAULT_LANGUAGE = "eng";
private static final String CHINESE_LANGUAGE = "chi_sim";
private static final String TAG = "tesseract";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TessBaseAPI baseApi=new TessBaseAPI();
baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
baseApi.setPageSegMode(TessBaseAPI.PSM_AUTO);
//从资源里获取一张图片
Bitmap bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.ocr);
baseApi.setImage(bitmap);
final String outputText = baseApi.getUTF8Text();
Log.i(TAG, "识别结果:" + outputText);
baseApi.end();
}
}
原图:
识别结果:
Android文字识别之tesseract的使用