android中ocr解决方案(tesseract)

tianyu_xp

贡献于2013-10-18

字数:2358 关键词: Android开发 移动开发 方案

 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对象 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值,那么最好设置一下 /*ExifInterface exif = new ExifInterface(filename) int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); int rotate = 0; switch (exifOrientation) { case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; } if (rotate != 0) { // Getting width & height of the given image. int w = bitmap.getWidth(); int h = bitmap.getHeight(); // Setting pre rotate Matrix mtx = new Matrix(); mtx.preRotate(rotate); // Rotating Bitmap bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false); // tesseract req. ARGB_8888 bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); } */ //设置要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();

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档