Tesseract是一个开源的OCR(optical character Recognition)库,最初由惠普公司开发,然后开源之后由google维护。使用Tesseract可以从图片中识别出文字。Tesseract支持多种文字,还可以针对目标训练自己的识别模型,可以说大大方便了开发者。tess-two是Tesseract在Android平台上的移植。更多信息参阅tess-two主页
cd tess-two/tess-two
ndk-build
在你的项目目录下新建一个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 的识别需要提供一个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/