Android 快速集成文档校正能力 超简单

前言

在之前的《超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入》文章中,我们给大家介绍了华为HMS ML Kit文本识别技术如何通过拍照自动识别照片中的文本信息。那么有的小伙伴可能会问,如果拍照时不是正对着文本拍摄,拍出来的照片是歪斜的,那么还能准确识别文本吗?当然可以啦。HMS ML Kit文档校正技术可以自动识别文档位置,校正拍摄角度,并且支持用户自定义边界点位置,即使在倾斜角度也能够拍摄出文档的正面图像。

应用场景

文档校正技术在生活中有很多的应用场景。比如说在拍摄纸质文档时,相机处于倾斜的角度,导致阅读文档非常不方便。使用文档校正技术可以把文档调整到正对的视角,这样阅读起来就顺利多了。

再比如在记录卡证信息时,使用文档校正技术,不需要调整到正对卡证的视角,也可以拍摄出卡证的正面照片。

另外,在行程中因为身处于倾斜位置,道路旁的路牌难以准确识别,这时可以通过文档校正技术拍摄到路牌正面图片。

怎么样,是不是很方便呢?那我们接下来详细给大家介绍安卓如何快速集成文档校正技术。

开发实战

详细的准备步骤可以参考华为开发者联盟:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-process-4
这里列举关键的开发步骤。

1.1 项目级gradle里配置Maven仓地址

    buildscript {repositories {...maven {url 'https://developer.huawei.com/repo/'}}}dependencies {...classpath 'com.huawei.agconnect:agcp:1.3.1.300'}allprojects {repositories {...maven {url 'https://developer.huawei.com/repo/'}}}

1.2 应用级gradle里配置SDK依赖

    dependencies{// 引入基础SDKimplementation 'com.huawei.hms:ml-computer-vision-documentskew:2.0.2.300'// 引入文档检测/校正模型包implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:2.0.2.300'}

1.3 在文件头添加配置

    apply plugin: 'com.huawei.agconnect'apply plugin: 'com.android.application'

1.4 添加如下语句到AndroidManifest.xml文件中,自动更新机器学习模型到设备

    <meta-dataandroid:name="com.huawei.hms.ml.DEPENDENCY" android:value= "dsc"/>

1.5 申请摄像机权限和读本地图片权限

    <uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. 代码开发

2.1 创建文本框检测/校正分析器

MLDocumentSkewCorrectionAnalyzerSetting setting = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
MLDocumentSkewCorrectionAnalyzer analyzer =                 MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting);

2.2 通过android.graphics.Bitmap创建MLFrame对象用于分析器检测图片,支持的图片格式包括:jpg/jpeg/png,建议图片尺寸不小于320320像素,不大于19201920像素。

MLFrame frame = MLFrame.fromBitmap(bitmap);

2.3 调用asyncDocumentSkewDetect异步方法或analyseFrame同步方法进行文本框的检测。当返回码是MLDocumentSkewCorrectionConstant.SUCCESS时,将会返回文本框的四个顶点的坐标值,该坐标值是相对于传入图像的坐标,若与设备坐标不一致,需调用者进行转换;否则,返回的数据没有意义。

        // asyncDocumentSkewDetect异步调用。Task<MLDocumentSkewDetectResult> detectTask = analyzer.asyncDocumentSkewDetect(mlFrame);detectTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewDetectResult>() {@Overridepublic void onSuccess(MLDocumentSkewDetectResult detectResult) {// 检测成功。}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {// 检测失败。}})// analyseFrame同步调用。SparseArray<MLDocumentSkewDetectResult> detect = analyzer.analyseFrame(mlFrame);if (detect != null && detect.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {// 检测成功。} else {// 检测失败。}

2.4 检测成功后,分别获取文本框四个顶点的坐标数据,然后以左上角为起点,按顺时针方向,分别把左上角、右上角、右下角、左下角加入到列表(List)中,最后构建MLDocumentSkewCorrectionCoordinateInput对象。

2.4.1 如果使用analyseFrame同步调用,先获取到检测结果,如下所示(使用asyncDocumentSkewDetect异步调用可忽略此步骤直接进行步骤2.4.2):

MLDocumentSkewDetectResult detectResult = detect.get(0);

2.4.2 获取文本框四个顶点的坐标数据并构建MLDocumentSkewCorrectionCoordinateInput对象:

 Point leftTop = detectResult.getLeftTopPosition();Point rightTop = detectResult.getRightTopPosition();Point leftBottom = detectResult.getLeftBottomPosition();Point rightBottom = detectResult.getRightBottomPosition();List<Point> coordinates = new ArrayList<>();coordinates.add(leftTop);coordinates.add(rightTop);coordinates.add(rightBottom);coordinates.add(leftBottom);MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);

2.5 调用asyncDocumentSkewCorrect异步方法或syncDocumentSkewCorrect同步方法进行文本框的校正。

// asyncDocumentSkewCorrect异步调用。
Task<MLDocumentSkewCorrectionResult> correctionTask = analyzer.asyncDocumentSkewCorrect(mlFrame, coordinateData);correctionTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewCorrectionResult>() {@Overridepublic void onSuccess(MLDocumentSkewCorrectionResult refineResult) {// 检测成功。}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {// 检测失败。}});// syncDocumentSkewCorrect同步调用。
SparseArray<MLDocumentSkewCorrectionResult> correct= analyzer.syncDocumentSkewCorrect(mlFrame, coordinateData);if (correct != null && correct.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {// 校正成功。
} else {// 校正失败。
}

2.6 检测完成,停止分析器,释放检测资源。

if (analyzer != null) {analyzer.stop();
}

Demo效果

下面这个demo展示了在倾斜角度扫描文档,文档校正技术可以把文档调整到正对视角。效果是不是很棒?

文档校正技术还可以辅助文档识别技术,将倾斜的文档调整到正面视角,快速实现从纸质文件到电子文件的转化,大幅度提升信息的录入效率。

Github源码

https://github.com/HMS-Core/hms-ml-demo/blob/master/MLKit-Sample/module-text/src/main/java/com/mlkit/sample/activity/DocumentSkewCorretionActivity.java

更详细的开发指南参考华为开发者联盟官网

https://developer.huawei.com/consumer/cn/hms/huawei-mlkit

欲了解更多详情,请参阅:
华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms
获取开发指导文档:https://developer.huawei.com/consumer/cn/doc/development
参与开发者讨论请到Reddit社区:https://www.reddit.com/r/HMSCore/
下载demo和示例代码请到Github:https://github.com/HMS-Core
解决集成问题请到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


文章来源:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202344452930050418&fid=18
作者:留下落叶

Android 快速集成文档校正能力 超简单相关推荐

  1. android sdk集成文档,android jpush sdk 集成文档.pdf

    android jpush sdk 集成文档 使⽤提⽰ 本⽂是 Android SDK 标准的集成指南⽂档. 匹配的 SDK 版本为:v2.0.5 及以后版本. 本⽂随SDK压缩包分发.在你看到本⽂时 ...

  2. Android apm监控框架,移动性能监控 SDK 详细集成文档

    移动性能监控 SDK 详细集成文档 一. Gradle配置 在 Project 的 build.gradle 文件中添加ArgusAPM的相关配置,示例如下: 在项目根目录的 build.gradle ...

  3. Android极光推送厂商离线通道集成文档及flutter集成总结

    <极光推送厂商离线通道集成文档> flutter集成指南 1.Android端配置 gradle配置 //极光推送def jpushVersion = '4.4.0'implementat ...

  4. UMeng统计分析Android集成文档

    相信大家对友盟应该不陌生了有些人可能用了它的多渠道打包,有的开发者可能用导它的分享sdk等等,今天我给大家介绍下怎样简单集成友盟统计分析Android集成文档,废话不多说下面看主要步骤: - 1. 集 ...

  5. 【JEECG技术文档】JEECG在线聊天插件功能集成文档

    原文地址:http://jeecg.iteye.com/blog/2320670 JEECG在线聊天插件功能集成文档 前提: 采用jeecg_3.6.3版本以上(Maven工程) 插件项目: 在线聊天 ...

  6. 微信sdk服务器文档,4.4. 微信小程序 SDK 集成文档

    微信小程序 SDK 集成文档 下载SDK 请联系客户经理获取SDK. 引入SDK 在您工程的app.js中,引入SDK: -- var adhoc = require('./utils/ab.wx.j ...

  7. android 搭建短信平台,Android 短信SDK集成文档 | Mob文档中心

    第一步 获取SDK(查看视频教程) 请到我们官网下载最新版本的SDK,下载回来后解压,可以看到下面的文件结构: 其中"SMSSDK"目录存放的是短信SDK的全部内容,"S ...

  8. Android封装sdk页面为h5,Android/H5混合 SDK 集成文档

    Android /H5 混合SDK 该SDK用于Android Hybrid 模式下,H5页面的以下情形: * 用户以app或单个设备为单位,进行H5页面的试验 * 离线缓存模式H5页面的试验 SDK ...

  9. ionic平台下的Android极光推送集成文档

    虽然当前提供推送服务的第三方有很多,例如jpush,友盟,个推,腾讯信鸽等.但是由于大部分第三方只支持原生环境,再加上考虑到ionic平台下网上已经提供了一套jpush的集成方案,所以我只是针对在jp ...

  10. springcloud alibab + sentinel1.8.1集成文档

    集成版本说明: springboot 2.5.2 spring cloud 2020.0.5 spring cloud alibaba 2.2.6.RELEASE sentinel 1.8.1 nac ...

最新文章

  1. SEO研究:网站结构
  2. Kali Linux安装OpenVAS
  3. Pixhawk代码分析-启动代码及入口函数
  4. Java学习(Map接口)
  5. Hadoop之MapReduce入门
  6. 光纤传感器实验模块_飞秒激光制备异质光纤光栅的温度应变双参数传感器
  7. Qt 两个Ui 界面传值
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨寻找用户推荐人【难度简单】
  9. python2.7如何安装库_python 2.7 安装目录python如何连接数据库
  10. 荣耀X20 SE评测:6400万高清美拍 2000元以下真香现场
  11. 疫情政务问答助手算法冠军开源
  12. shell正则表与文本工具sed
  13. Caffe的各个版本简介
  14. Corona Enterprise 引入第三方 jar 包
  15. Unity3D AABB包围盒效果
  16. 电子教室的功能有哪些-极域电子教室
  17. 山东省2013高职分数线
  18. 自动驾驶(三十二)---------车辆行人识别
  19. Python基础知识总结—数据类型,列表,元组,集合,字典
  20. 《多传感器融合定位》惯性导航基础(二)

热门文章

  1. Linux系统介绍:内核、shell及软件包管理
  2. iTOP-4418开发板RS85模块ioctl操作时间间隔修改
  3. 中国崛起让西方乱了阵脚
  4. C语言关键字浅析-_Complex
  5. 【读书笔记】《谈谈方法》(笛卡尔)
  6. ion-infinite-scroll上拉加载 ion-refresher下拉刷新
  7. Caused by: java.lang.IllegalStateException: No ServletContext set
  8. 09年高考零分作文:兔子,你就是一个牛B
  9. 1.Attach(E-UTRAN Initial)
  10. 读 《周爱民--大道之简》 笔记