Android划矩形截屏并加入OCR识别

点击蓝字关注我们

format,png

format,png

前面文章《Android SurfaceVeiw划矩形截屏存放到RecyclerView中》已经通过手指划矩形把图片存入到RecyclerView中了,以前也加入过TeseractOCR的识别,因为截取的图像不理解 ,所以识别的效果也不好,所以这次利用截图方式再做一个简单的图像预处理来看看识别效果。

format,png

format,png

视频演示

format,png

代码实现

每次重新搭新框架确实好麻烦,所以我们还在原来的那个DEMO上直接加入OCR的模块。

★ 实现方法 ★

 

01

在原DEMO上加入TesserartOCR

02

界面上加入一个TextView用于识别后显示出来

03

NDK中加入C++的类来做为图片的预处理

 

format,png

加入TesserartOCR配置

format,png

build.gradle中右侧红框的中的目录里原来已经存放了对应的OCR的动态库,这里我们就没再修改,动态库如下图

format,png

format,png

在dependencies中要加入api 'com.rmtheis:tess-two:8.0.0',这样我们才能使用OCR识别。

format,png

OCR相关的类

format,png

 

新建VaccaeTesserat的类

这个类中用AsyncTask来处理OCR的识别,具体代码如下:

public class VaccaeTesserat extends AsyncTask<Bitmap, String, String> {


    private Context mContext;
    private TesseratCallBack mCallBack;


    public VaccaeTesserat(Context context) {
        mContext=context;
        mCallBack=(TesseratCallBack)mContext;
    }




    @Override
    protected String doInBackground(Bitmap... bitmaps) {
        TessBaseAPI tessAPI=null;
        try {


            StringBuilder sb=new StringBuilder();
            // 核心预设置代码
            tessAPI=new TessBaseAPI();
            //如果Android的版本大于23,路径取根目录下的tesserart,小于的话是
            //在mnt/sdcard下面
            String path=Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "tesserart";
            tessAPI.setDebug(true);
            tessAPI.init(path , "chi_sim");


            //第一张为原图不取
            if (bitmaps.length > 1) {
                for (int i=1; i < bitmaps.length; i++) {
                    tessAPI.setImage(bitmaps[i]);
                    // 获取并显示识别结果
                    sb.append(tessAPI.getUTF8Text());
                }
            } else {
                tessAPI.setImage(bitmaps[0]);
                sb.append(tessAPI.getUTF8Text());
            }


            mCallBack.CallBackOver(sb.toString());
        } catch (Exception e) {
            Log.e("Tess", e.getMessage());
            mCallBack.CallBackOver(e.getMessage());
        } finally {
            tessAPI.clear();
            tessAPI.end();
        }


        return null;
    }
}

 

TesseratCallBack回调函数

再建一个接口回调函数,用于处理识别后返回的数据

public interface TesseratCallBack {


    void CallBackOver(String... msg);
}

 

MainActivity中加入回调函数操作

在MainActivity中加入回调函数的操作,用于接收到识别的文字后我们在TextView中显示出来。

format,png

format,png

format,png

NDK中图片的预处理

新建C++的类ocrpreprocess用于做图片的预处理

format,png

加入了一个静态方法dealocrbmp

format,png

预处理也很简单,我们直接就是转为灰度图,通过高斯模糊降燥,然后把图片二值化了,这样让识别字体的更方便一些

format,png

然后我们在native-lib.cpp中处理截图这里加入调用的这个方法,让其变成二值化的数据显示出来。

format,png

VaccaeSurfaceView修改

在VaccaeSurfaceView修改就比较简单了,直接在返回的图片中加入对TesserartOCR的调用即可。

format,png

format,png

效果图片

format,png

到这里我们的简单改造就算结束了,从视频中看识别的效果还可以,因为我用的是默认的字库,如果要好的效果就要自己训练数据了。

上面来说我们是一个简单的识别效果,后面我会找个时间继续更新,在截取后的图片预处里中加入分割和透视变换,目的就是让其不是在非常正的角度下截图也能加大识别的效果,等全部完成后,Demo还是会继续上传上去的。

-END-

Vaccae的往期经典

format,png

OpenCV

《C++ OpenCV案例实战---卡号获取

《C++ OpenCV案例实战---卡片截取(附代码)

《C++ OpenCV透视变换---切换手机正面图片》

《C++ OpenCV实战---获取数量

《C++ OpenCV实战---利用颜色分割获取数量》

《OpenCV4Android NDK方式进行Canny边缘检测》

《OpenCV4Android NDK方式TesserartOCR实时进行识别》

《OpenCV4Android NDK级联方式实时进行人脸检测》

OpenCV4Android NDK稠密光流调用

OpenCV4Android NDK背景消除建模(新Demo附源码)

《OpenCV4Android NDK利用SurfaceVeiw划矩形截屏存放到RecyclerView中

format,png

Android

《Android利用SurfaceView结合科大讯飞修改语音实别UI

《Android关于语音识别的功能实现分析(一)---结构化思维》

《Android关于语音识别的功能实现分析(二)---语义解析》

《Android根据类生成签名字符串

《Android碎片化布局fragment的实战应用

《Android中RecyclerView嵌套RecyclerView

《Android里用AsyncTask后的接口回调

format,png

.Net C#

《C#自定义特性(Attribute)讲解与实际应用

《C#根据类生成签名字符串(附DEMO下载地址)

《C++创建动态库C#调用》

《C#与三菱PLC(型号FX2N)串口通讯类

C#开源跨平台机器学习框架ML.NET----二元分类情绪分析

C#开源跨平台机器学习框架ML.NET----结合SqlSugar进行多类分类

format,png

数据库及其它

《Oracel存储过程写报表实战》

《Delphi轮播视频和图片程序(用于双屏显示程序)

《SQL随机增加销售数据的脚本编写(附脚本下载地址)

SQL Server中With As的介绍与应用(三)--递归的实战应用

《Oracle通过ODBC连接SQL Server数据库

Oracle利用row_number()over()方式解决插入数据时重复键的问题

 

请扫码

给个关注

format,png

微卡智享

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vaccae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值