0
点赞
收藏
分享

微信扫一扫

Android OCR 之 tesseract


OCR属于CV的范畴,也就是计算机视觉,目前来看,除了opencv这个龙头老大,也就是hp开发的tesseract比较好用,虽然年头比较长了,但现在归google维护并托管在google code上了。


现在有android版本的
地址:http://code.google.com/p/tesseract-android-tools/

这个版本得自己git 三个库 leptonica  tesseract  libjpeg ,我自己是编译成功了,但测试的时候native层总是crash。


于是发现了tess的android的另一个分支 tess-two

推荐linux上编译


一、下载&编译

1、首先下载tess-two



git clone git://github.com/rmtheis/tess-two tess



2、进入 tess目录,里面有三个项目,我们只需要进入tess-two就可以直接编译了



cd tess/tess-two

ndk-build



 3、编译好后,将src下的两个包以及libs导入到自己的项目就可以用啦

这里把我我把编译好后的东西放出来,用的话不用再编译了

下载:tess-two.zip


二、使用

tesseract 使用了 leptonica的图像处理库,对于图像处理还是比较强大的

Android官方地址:tesseract-android-tools

但它必须要一个匹配库,即tessdata,我们可以从官方拷贝,在前面git的项目里面tesseract源码目录有现成的tessdata可以用,对于中文,google code上也有下载,当然也可以自己训练不同语言的tessdata。

包leptonica的类我们不必使用,只要使用tess包的类就行了

TessBaseAPI

使用时,首先创建TessBaseAPI对象



Android OCR 之 tesseract_git



TessBaseAPI baseApi=new TessBaseAPI();

//初始化tess
//android下面,tessdata肯定得放到sd卡里了
//如果tessdata这个目录放在sd卡的根目录
//那么path直接传入sd卡的目录
//eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki
baseApi.init("tessdata文件夹的父级目录", "eng");

//options是为了缩放图片,这个酌情缩放,图片小的话可以不缩放
BitmapFactory.Options options=new BitmapFactory.Options();
//缩小为原来的1/2
options.inSampleSize=2;

//bitmap,我这里是以流的形式,只要能形成Bitmap就行
Bitmap bitmap = BitmapFactory.decodeStream(instream,null,options); 

        instream.close();    


//如果图片有Alpha值,那么最好设置一下


//设置要ocr的图片bitmap
baseApi.setImage(bitmap);
//根据Init的语言,获得ocr后的字符串
String text= baseApi.getUTF8Text();
//释放bitmap
baseApi.clear();

//如果连续ocr多张图片,这个end可以不调用,但每次ocr之后,必须调用clear来对bitmap进行释放
//释放native内存
baseApi.end();

///其它方法//


//获取字符边框
        

        Pixa pixa= baseApi.getCharacters();

//同上,这个是整段文字的边框
        baseApi.getRegions();

//同上,只不过这里是条线
        baseApi.getTextlines();

//剩下的自己测试吧。

//转为rect数组 ,之后,可以很方便的在图片上框出方框
//怎么框由你
        ArrayList rects=pixa.getBoxRects();



Android OCR 之 tesseract_git


结束。


android下ocr就这么简单,好好使用第三方库就行了。

ps:在使用这套库对12306的验证码进行ocr时,耗时50ms左右

举报

相关推荐

0 条评论