关于Google Android OCR Tesseract tess-two 的菜鸟心得

本文分享了一位学生在Android OCR项目中的经历,包括使用Tesseract进行文本识别的实践方法,提供了详细的步骤和资源链接。同时介绍了提高开发效率的快捷键技巧,适合正在进行相似项目的学习者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  毕设完成心情大好,这是个小前提。

  求大神收徒,一坐12个小时不起来,乐于专心研究的好学生求师傅求大腿求工作~额~好吧开个玩笑。

  我的毕设是有关于Android、有关于OCR、有关于WebService的课题,没有丁点实用价值所以就不赘述了。

  其中OCR部分确实花了我不少的时间来弄,网上有很多AndroidOCR解决方案,我主要学习了两种。第一是基于云端的OCR,说白了就是发给服务器一张图片,然后服务器给你识别并返回一个值,然后你取得这个数据就行了。我参看的是OCRSDK,有免费配额,貌似是50pages,过了要收费,貌似还挺贵的。网址我也贴出来有兴趣的可以看一下,www.ocrsdk.com

  我最终使用的是Tesseract这套解决方案,虽然对我这只菜鸟来说磕磕绊绊一路,但是好歹也调试出来了,下面我就基于我的思路给大家屡一下。

  本博客是参看 黑暗伯爵 的博文,并且使用了他编译好的tess-two库,后面附的代码转自黑暗伯爵,希望吸血鬼大大不要生气~

  其实我不太好意思附上我测试用的源文件,因为里面还有webservice部分,而且UI其丑无比,或者说根本没有做除了实现功能外的任何东西,不过本着脸厚无敌的宗旨,还是贴出来吧。有什么问题可以M我。

  资源下载:com.googlecode下载  tess-two下载  tessdata下载    其丑无比没脸见人的功能验证源代码外加jar包只官人求不打脸

 

  以下是使用方法:

  1.构建jar路径,将jar包加到项目里面去。jar在tess-two文件中。

  2.复制 com.googlecode.xx.android两个文件夹放到src里面,如图。如果没有的话 

  3.复制tess-two 文件夹中libs到libs中,覆盖进去就行了。 

  4.将tessdata保存到相应路径。手机卡上或者模拟器的sd卡上

  5.使用代码调试即可

---------------下面这个部分写给突击毕设之类的菜鸟们的小心得,高手直接无视跳过即可------------

ctrl+s 这是生命

ctrl+shift+O 自动导入

ctrl+shift+F 快速排版

ctrl+D 删除该行

alt+shift+R 重构名称,可以一次改整个代码中的相关联的名称,回车确认重构

ctrl+/ 快速注释

这几个快捷键我用到的最多,感觉比肩ctrl+s

-----------------------------------------------------------

这个是调用部分的代码。

 1 TessBaseAPI baseApi=new TessBaseAPI();
 2 
 3 //初始化tess
 4 //android下面,tessdata肯定得放到sd卡里了
 5 //如果tessdata这个目录放在sd卡的根目录
 6 //那么path直接传入sd卡的目录
 7 //eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki
 8 baseApi.init("tessdata文件夹的父级目录", "eng");
 9 
10 //options是为了缩放图片,这个酌情缩放,图片小的话可以不缩放
11 BitmapFactory.Options options=new BitmapFactory.Options();
12 //缩小为原来的1/2
13 options.inSampleSize=2;
14 
15 //bitmap,我这里是以流的形式,只要能形成Bitmap就行
16 Bitmap bitmap = BitmapFactory.decodeStream(instream,null,options); 
17         instream.close();    
18 
19 
20 //如果图片有Alpha值,那么最好设置一下
21 /*ExifInterface exif = new ExifInterface(filename)
22     int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
23 
24 
25     int rotate = 0;
26     switch (exifOrientation) {
27         case ExifInterface.ORIENTATION_ROTATE_90:
28             rotate = 90;
29             break;
30         case ExifInterface.ORIENTATION_ROTATE_180:
31             rotate = 180;
32             break;
33         case ExifInterface.ORIENTATION_ROTATE_270:
34             rotate = 270;
35             break;
36     } 
37 
38 
39     if (rotate != 0) { 
40 
41         // Getting width & height of the given image.
42         int w = bitmap.getWidth();
43         int h = bitmap.getHeight(); 
44 
45         // Setting pre rotate
46         Matrix mtx = new Matrix();
47         mtx.preRotate(rotate); 
48 
49         // Rotating Bitmap
50         bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
51         // tesseract req. ARGB_8888
52         bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
53     } */
54 
55 //设置要ocr的图片bitmap
56 baseApi.setImage(bitmap);
57 //根据Init的语言,获得ocr后的字符串
58 String text= baseApi.getUTF8Text();
59 //释放bitmap
60 baseApi.clear();
61 
62 //如果连续ocr多张图片,这个end可以不调用,但每次ocr之后,必须调用clear来对bitmap进行释放
63 //释放native内存
64 baseApi.end();
65 
66 ///////////////////////////其它方法//////////////////////////////////
67         
68 
69         //获取字符边框
70         
71         Pixa pixa= baseApi.getCharacters();
72         
73         //同上,这个是整段文字的边框
74         baseApi.getRegions();
75         
76         //同上,只不过这里是条线
77         baseApi.getTextlines();
78         
79         //剩下的自己测试吧。
80         
81         //转为rect数组 ,之后,可以很方便的在图片上框出方框
82         //怎么框由你
83         ArrayList<Rect> rects=pixa.getBoxRects();

转载于:https://www.cnblogs.com/daguaishou/archive/2013/05/15/3080872.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值