Home

在Android Studio中使用tess-Two

Tesseract & tess-two

Tesseract是一个开源的OCR(optical character Recognition)库,最初由惠普公司开发,然后开源之后由google维护。使用Tesseract可以从图片中识别出文字。Tesseract支持多种文字,还可以针对目标训练自己的识别模型,可以说大大方便了开发者。tess-two是Tesseract在Android平台上的移植。更多信息参阅tess-two主页

tess-two在Android Studio的配置

1. 下载安装Android NDK

2. 下载解压tess-two或者直接git clone

3. 使用NDK编译解压出来的 tess-two 下的 tess-two 文件夹

cd tess-two/tess-two
ndk-build

4. 配置Android Studio

在你的项目目录下新建一个libraries的文件夹,将NDK编译好的tess-two/tess-two目录复制到libraries下。
在libraries/tess-two目录下新建一个 build.gradle 的文件。将下面的内容复制进去

apply plugin: 'android-library'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'   // 根据你的gradle版本进行调整
    }
}

android {
    compileSdkVersion 23             // 根据你的项目进行调整
    buildToolsVersion "23.0.2"       // 根据你的项目进行调整

    defaultConfig {
        minSdkVersion 15             // 根据你的项目进行调整
        targetSdkVersion 23          // 根据你的项目进行调整
    }

    sourceSets.main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        res.srcDirs = ['res']
        jniLibs.srcDirs = ['libs']
    }
}

然后在项目目录下的 setting.gradle 文件下加入一行

include ':libraries:tess-two'

在项目目录下的app/build.gradle 文件中的 dependencies 部分加入一行 compile project(':libraries:tess-two')

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    ....

    compile project(':libraries:tess-two')
}

使用Tess-two

tess-two 的识别需要提供一个tessdata的文件夹,可以在http://code.google.com/p/tesseract-ocr/中找到。

这里提供一个简单的 demo

import com.googlecode.tesseract.android.TessBaseAPI;


public class MainActivity extends AppCompatActivity {

    private static final String SD_PATH= Environment.getExternalStorageDirectory().getPath();

    private Button button;
    private TextView textView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                TessBaseAPI baseApi = new TessBaseAPI();
                // 指定语言集,sd卡根目录下放置Tesseract的tessdata文件夹   
                baseApi.init(SD_PATH, "eng");
                // 设置psm模式
                baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);

                editText = (EditText) findViewById(R.id.editText);
                String img = editText.getText().toString();
                // 设置图片
                baseApi.setImage(new File(SD_PATH + img));
                // 获取结果
                final String result = baseApi.getUTF8Text();
                textView.setText(result);
                // 释放内存
                baseApi.clear();
                baseApi.end();

            }
        });
    }
}

参考

https://coderwall.com/p/eurvaq/tesseract-with-andoird-and-gradle
http://www.kaustubhraghavan.com/ocr.html
http://hellosure.github.io/ocr/2014/10/11/tesseract-ocr/