Android文字识别之tesseract的使用

关于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();
        
    }
    
}

 

原图:

技术分享

识别结果:

技术分享

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。