
android手机调用OCR识别图像中的文字的方法为:
一、下载&编译tesseract
1、首先下载tess-two。
2、进入 tess目录,里面有三个项目,我们只需要进入tess-two就可以直接编译了。
3、编译好后,将src下的两个包以及libs导入到自己的项目就可以用。
二、使用
1、使用时,首先创建TessBaseAPI对象。
TessBaseAPI baseApi=new TessBaseAPI();
//初始化tess
//android下面,tessdata肯定得放到sd卡里了
//如果tessdata这个目录放在sd卡的根目录
//那么path直接传入sd卡的目录
//eng就是英文,关于语言,按ISO 639-3标准的代码就行,具体请移步wiki
baseApiinit("tessdata文件夹的父级目录", "eng");
//options是为了缩放,这个酌情缩放,小的话可以不缩放
BitmapFactoryOptions options=new BitmapFactoryOptions();
//缩小为原来的1/2
optionsinSampleSize=2;
//bitmap,我这里是以流的形式,只要能形成Bitmap就行
Bitmap bitmap = BitmapFactorydecodeStream(instream,null,options);
instreamclose();
//如果有Alpha值,那么最好设置一下
//设置要ocr的bitmap
baseApisetImage(bitmap);
//根据Init的语言,获得ocr后的字符串
String text= baseApigetUTF8Text();
//释放bitmap
baseApiclear();
//如果连续ocr多张,这个end可以不调用,但每次ocr之后,必须调用clear来对bitmap进行释放
//释放native内存
baseApiend();
///////////////////////////其它方法//////////////////////////////////
//获取字符边框
Pixa pixa= baseApigetCharacters()
//同上,这个是整段文字的边框
baseApigetRegions();
//同上,只不过这里是条线
baseApigetTextlines();
//剩下的自己测试吧。
//转为rect数组 ,之后,可以很方便的在上框出方框
//
ArrayList rects=pixagetBoxRects();
2、开始识别。
Bitmap是Android系统中图像处理的最重要类之一。用它可以获取图像信息,对图像进行剪切、旋转、缩放等 *** 作,并可以指定格式保存图像文件。
以in开头的都是设置属性值,以out开头的都是获取属性值。
Bitmap的加载获取方式主要有有从Resource资源加载、本地SD卡加载及网络加载等方式。
使用BitmapFactorydecodeResource方式加载如果要经过缩放,该缩放是在java层进行的,效率比较低,会消耗java层的内存,因此如果大量使用会导致OOM。
BitmapFactorydecodeStream一般用于二进制文件的读取。
从网络加载本质上也是从网络读取数据流,通过BitmapFactorydecodeStream方式加载。
其他的转换就不一一列举了,不能直接转换的可以间接进行转换。
在拍照上传过程中,我们可能会遇到上传的被旋转了,需要给他复原进行旋转。
获取的旋转角度:
解释:
1、首先创建一个Bitmap,并指定大小;
2、在该上创建一个新的画布Canvas,然后在画布上绘制,并保存即可;
3、需要保存的目录File,注意如果写的目录如“/sdcard/akai/”如果不存在的话,要先创建(filemkdirs()),否则FileOutputStream会报错No found;
4、需要添加权限:<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE"/>
什么是画布呢 其实通过字面意思的理解就是用来绘画的地方,那么android里的画布是神马样子的呢?
在自定义画布中常用到下面3个类
Canvas
这些绘图方法中的每一个都需要指定一个Paint对象来渲染它
Paint
Paint也称为"刷子",Paint可以指定如何将基本图形绘制到位图上。
Paint类相当于一个笔刷和调色板。它可以选择如何使用上面描述的draw方法来渲染绘 制在画布上的基本图形。通过修改Paint对象,可以在绘图的时候控制颜色、样式、字体和特殊效果。最简单地,setColor可以让你选择一个Paint的颜色,而Paint对象的样式(使用setStyle控制)则可以决定是绘制绘图对象的轮廓(STROKE),还是只填充每一部 分(FILL),或者是两者都做(STROKE_AND_FILL)除了这些简单的控制之外,Paint类还支持透明度,另外,它也可以通过使用各种各样的阴影、过滤器和效果进行修改,从而提供由更丰富的、复杂的画笔和颜料组成的调色板。
从继承View类(或其子类)开始,并定义onDraw()回调方法。系统会调用该方法来完 成View对象自己的绘制请求。这也是通过Canvas对象来执行所有的图形绘制调用的地方,这个Canvas对象是由onDraw()回调方法传入的。
Android框架只在必要的时候才会调用onDraw()方法,每次请求应用程序准备完成图形 绘制任务时,必须通过调用invalidate()方法让该View对象失效。这表明可以在该View 对象上进行图形绘制处理了,然后Android系统会调用该View对象的onDraw()方(尽 管不保证该回调方法会立即被调用)。
在定制的View组件的onDraw()方法内部,使用给定的Canvas对象来完成所有的图形绘制处理(如Canvasdraw…()方法或把该Canvas对象作为参数传递给其他类的draw() 方法)。一旦onDraw()方法被执行完成,Android框架就会使用这个Canvas对象来绘制一个有系统处理的Bitmap对象。
下面是Paint一些常用方法:
Bitmap
Bitmap绘图的表面也称位图(这里详细说哈位图的功能)。
从资源中获取位图:
通过Resource的函数:InputStream openRawResource(int id)获取得到资源文件的数据流后,可以通过2种方式获得bitmap
使用BitmapDrawable :
使用BitmapDrawable(InputStream is)构造一个BitmapDrawable;
使用BitmapDrawable类的getBitmap()获取得到位图;
使用BitmapFactory使用BitmapFactory类decodeStream(InputStream is)解码位 图资源,获取位图BitmapFactory的所有函数都是static,这个辅助类可以通过资 源ID、路径、文件、数据流等方式来获取位图。
获取位图的信息
一般获取位图信息包括:位图大小、透明度、颜色格式等等,这些信息呢可以通过 三-一方法获取得到Bitmap就迎刃而解了,Android SDK中对Bitmap有详细说明,大家可以去详细了解哈。
显示位图
显示位图需要使用核心类Canvas,可以直接通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas,下面的实例中会详细列举到
位图的缩放
位图的缩放,在Android SDK中提供了2种方法:
1:将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎 一样:
drawBitmap(Bitmap bitmap, Rect src, Rectdst, Paint paint)
2:在原有位图的基础上,缩放原位图,创建一个新的位图:
createBitmap(Bitmap source, int x, int y,int width, int height, Matrix m, boolean filter)
位图旋转
位图的旋转,离不开Matrix。Android SDK提供了Matrix类,可以通过各种接口来设置 矩阵
android 处理工具
截取视频帧并转化为Bitmap
最近在弄一个功能,其中别人已经写好了显示,是用把url转成了String格式的,但是我需要一个bitmap格式来做保存,后来查看了Glide之后发现可以利用Glide把url加载出来获得bitmap资源。
Glide中加载之后into到一个simpleTarget<Bitmap>里就可以得到Bitmap资源了。
以上就是关于android手机怎么调用OCR识别图像中的文字全部的内容,包括:android手机怎么调用OCR识别图像中的文字、Android Bitmap详解、android图像绘制——画布保存为图片等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)