当前位置: 首页 > 工具软件 > Eye OCR > 使用案例 >

Android之Tesseract OCR

漆雕绍晖
2023-12-01

    本文将介绍android平台上如何使用tesseract实现OCR。 tesseract出生于HP实验室,如今由Google负责维护,是最好的开源OCR Engine之一,并且支持中文。tesseract个人觉得有两个需要考虑的点,一是大,二是慢,特别是中文。如果系统对空间和时间要求非常高,那么tesseract可能不是最好的选择。

    1.  准备工具tesseract-two

          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

    2. 调用tesseract识别图片

      eclipse里面导入编译好的android project,共三个项目,tess-two, tess-two-test 以及eyes-two。其中tess-two和eyes-two为android lib项目,供其它项目引用。tess-two封装Tesseract的Android API,eyes-two封装leptonica的Android APItess-two-test为OCR的测试,先读一下TessBaseAPITest.java的代码,了解API的使用方法。
        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();


基本的API调用步骤非常之简单。不过模拟器启动之后,还需要把Tesseract的trained data放到模拟器里面,下载地址为https://code.google.com/p/tesseract-ocr/downloads/list

adb shell 
cd /mnt/sdcard/

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,显示张图片并识别一下吧。


3.  写在最后

    OCR的识别率取决于两个方面,图片质量和OCR engine的能力。通常为了提高识别率,需要对图片作预处理。比如常见的二值化(黑白),放大,切割,锐化等。可以直接调用leptonica接口实现。至于Tesseract Engine,只能说是非常好的英文OCR engine,处理中文还是有待提高。选择好一个OCR engine之后,能做的估计也就是在图片的预处理上下功夫了。


 类似资料: