本文将介绍android平台上如何使用tesseract实现OCR。 tesseract出生于HP实验室,如今由Google负责维护,是最好的开源OCR Engine之一,并且支持中文。tesseract个人觉得有两个需要考虑的点,一是大,二是慢,特别是中文。如果系统对空间和时间要求非常高,那么tesseract可能不是最好的选择。
tesseract是用c++实现的,需要封装Java API用于Android平台的调用。这里我们使用的是tesseract-two, 网址是https://github.com/rmtheis/tess-two。tesseract-two 是Tesseract Tools for Android的一个git分支,选择它是由于操作简单,并且集成了leptonica,一个图形处理工具。出发之前请先安装git和android-ndk。接着便是下载和编译,我是在windows上编译的。
git下载(Git Bash操作): git clone https://github.com/rmtheis/tess-two.git tess
ndk编译(cmd命令行): 先cd到刚才Git下载的tess目录。敲如下命令(编译的时间会有点久):
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
private static final String TESSBASE_PATH = "/mnt/sdcard/tesseract/";
private static final String DEFAULT_LANGUAGE = "eng";
private static final String CHINESE_LANGUAGE = "chi_sim";
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(TESSBASE_PATH, CHINESE_LANGUAGE);
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO);
baseApi.setImage(params[0]);
// Ensure that the result is correct.
final String outputText = baseApi.getUTF8Text();
baseApi.end();
mkdir tesseract
cd tesseract
mkdir tessdata
Ctrl+C退出Shell
adb push chi_sim.traineddata /mnt/sdcard/tesseract/tessdata
adb push eng.traineddata /mnt/sdcard/tesseract/tessdata
尝试自己写个Activity,显示张图片并识别一下吧。