刘沛瑶 發表於 2020-9-22 15:52:00

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

<h3 id="android-快速集成文档校正能力-超简单">Android 快速集成文档校正能力 超简单</h3>
<h1 id="前言">前言</h1>
<p>在之前的《超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入》文章中,我们给大家介绍了华为HMS ML Kit文本识别技术如何通过拍照自动识别照片中的文本信息。那么有的小伙伴可能会问,如果拍照时不是正对着文本拍摄,拍出来的照片是歪斜的,那么还能准确识别文本吗?当然可以啦。HMS ML Kit文档校正技术可以自动识别文档位置,校正拍摄角度,并且支持用户自定义边界点位置,即使在倾斜角度也能够拍摄出文档的正面图像。<br>
<img src="https://img-blog.csdnimg.cn/20200922145658738.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<h1 id="应用场景">应用场景</h1>
<p>文档校正技术在生活中有很多的应用场景。比如说在拍摄纸质文档时,相机处于倾斜的角度,导致阅读文档非常不方便。使用文档校正技术可以把文档调整到正对的视角,这样阅读起来就顺利多了。<br>
<img src="https://img-blog.csdnimg.cn/20200922145707896.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDcwODI0MA==,size_16,color_FFFFFF,t_70#pic_center"></p>
<p>再比如在记录卡证信息时,使用文档校正技术,不需要调整到正对卡证的视角,也可以拍摄出卡证的正面照片。<br>
<img src="https://img-blog.csdnimg.cn/20200922145716606.png#pic_center"></p>
<p>另外,在行程中因为身处于倾斜位置,道路旁的路牌难以准确识别,这时可以通过文档校正技术拍摄到路牌正面图片。<br>
<img src="https://img-blog.csdnimg.cn/20200922145728125.png#pic_center"></p>
<p>怎么样,是不是很方便呢?那我们接下来详细给大家介绍安卓如何快速集成文档校正技术。</p>
<h1 id="开发实战">开发实战</h1>
<p>详细的准备步骤可以参考华为开发者联盟:<br>
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-process-4<br>
这里列举关键的开发步骤。</p>
<h2 id="11----项目级gradle里配置maven仓地址">1.1    项目级gradle里配置Maven仓地址</h2>
<pre><code class="language-java">    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/'}
            }
    }
</code></pre>
<h2 id="12-应用级gradle里配置sdk依赖">1.2 应用级gradle里配置SDK依赖</h2>
<pre><code class="language-java">    dependencies{
             // 引入基础SDK
            implementation 'com.huawei.hms:ml-computer-vision-documentskew:2.0.2.300'
            // 引入文档检测/校正模型包
         implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:2.0.2.300'
    }
</code></pre>
<h2 id="13-在文件头添加配置">1.3 在文件头添加配置</h2>
<pre><code class="language-java">    apply plugin: 'com.huawei.agconnect'
    apply plugin: 'com.android.application'
</code></pre>
<h2 id="14-添加如下语句到androidmanifestxml文件中自动更新机器学习模型到设备">1.4 添加如下语句到AndroidManifest.xml文件中,自动更新机器学习模型到设备</h2>
<pre><code class="language-java">    &lt;meta-data
    android:name="com.huawei.hms.ml.DEPENDENCY"
    android:value= "dsc"/&gt;
</code></pre>
<h2 id="15-申请摄像机权限和读本地图片权限">1.5 申请摄像机权限和读本地图片权限</h2>
<pre><code class="language-java">    &lt;uses-permission android:name="android.permission.CAMERA" /&gt;
    &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
</code></pre>
<h1 id="2-代码开发">2. 代码开发</h1>
<h2 id="21-创建文本框检测校正分析器">2.1 创建文本框检测/校正分析器</h2>
<pre><code class="language-java">MLDocumentSkewCorrectionAnalyzerSetting setting = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
MLDocumentSkewCorrectionAnalyzer analyzer =               MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting);
</code></pre>
<h2 id="22-通过androidgraphicsbitmap创建mlframe对象用于分析器检测图片支持的图片格式包括jpgjpegpng建议图片尺寸不小于320320像素不大于19201920像素">2.2 通过android.graphics.Bitmap创建MLFrame对象用于分析器检测图片,支持的图片格式包括:jpg/jpeg/png,建议图片尺寸不小于320<em>320像素,不大于1920</em>1920像素。</h2>
<pre><code class="language-java">MLFrame frame = MLFrame.fromBitmap(bitmap);
</code></pre>
<h2 id="23-调用asyncdocumentskewdetect异步方法或analyseframe同步方法进行文本框的检测当返回码是mldocumentskewcorrectionconstantsuccess时将会返回文本框的四个顶点的坐标值该坐标值是相对于传入图像的坐标若与设备坐标不一致需调用者进行转换否则返回的数据没有意义">2.3 调用asyncDocumentSkewDetect异步方法或analyseFrame同步方法进行文本框的检测。当返回码是MLDocumentSkewCorrectionConstant.SUCCESS时,将会返回文本框的四个顶点的坐标值,该坐标值是相对于传入图像的坐标,若与设备坐标不一致,需调用者进行转换;否则,返回的数据没有意义。</h2>
<pre><code class="language-java">      // asyncDocumentSkewDetect异步调用。
      Task&lt;MLDocumentSkewDetectResult&gt; detectTask = analyzer.asyncDocumentSkewDetect(mlFrame);
      detectTask.addOnSuccessListener(new OnSuccessListener&lt;MLDocumentSkewDetectResult&gt;() {
                @Override
                public void onSuccess(MLDocumentSkewDetectResult detectResult) {
                        // 检测成功。
                }
      }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                      // 检测失败。
               }
         })
   
          // analyseFrame同步调用。
          SparseArray&lt;MLDocumentSkewDetectResult&gt; detect = analyzer.analyseFrame(mlFrame);
          if (detect != null &amp;&amp; detect.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {
                  // 检测成功。
          } else {
                  // 检测失败。
          }
</code></pre>
<h2 id="24-检测成功后分别获取文本框四个顶点的坐标数据然后以左上角为起点按顺时针方向分别把左上角右上角右下角左下角加入到列表list中最后构建mldocumentskewcorrectioncoordinateinput对象">2.4 检测成功后,分别获取文本框四个顶点的坐标数据,然后以左上角为起点,按顺时针方向,分别把左上角、右上角、右下角、左下角加入到列表(List<point>)中,最后构建MLDocumentSkewCorrectionCoordinateInput对象。</point></h2>
<p>2.4.1 如果使用analyseFrame同步调用,先获取到检测结果,如下所示(使用asyncDocumentSkewDetect异步调用可忽略此步骤直接进行步骤2.4.2):</p>
<pre><code class="language-java">MLDocumentSkewDetectResult detectResult = detect.get(0);
</code></pre>
<p>2.4.2 获取文本框四个顶点的坐标数据并构建MLDocumentSkewCorrectionCoordinateInput对象:</p>
<pre><code class="language-java"> Point leftTop = detectResult.getLeftTopPosition();
    Point rightTop = detectResult.getRightTopPosition();
    Point leftBottom = detectResult.getLeftBottomPosition();
    Point rightBottom = detectResult.getRightBottomPosition();
    List&lt;Point&gt; coordinates = new ArrayList&lt;&gt;();
    coordinates.add(leftTop);
    coordinates.add(rightTop);
    coordinates.add(rightBottom);
    coordinates.add(leftBottom);
    MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);
</code></pre>
<h2 id="25-调用asyncdocumentskewcorrect异步方法或syncdocumentskewcorrect同步方法进行文本框的校正">2.5 调用asyncDocumentSkewCorrect异步方法或syncDocumentSkewCorrect同步方法进行文本框的校正。</h2>
<pre><code class="language-java">// asyncDocumentSkewCorrect异步调用。
Task&lt;MLDocumentSkewCorrectionResult&gt; correctionTask = analyzer.asyncDocumentSkewCorrect(mlFrame, coordinateData);
correctionTask.addOnSuccessListener(new OnSuccessListener&lt;MLDocumentSkewCorrectionResult&gt;() {
      @Override
      public void onSuccess(MLDocumentSkewCorrectionResult refineResult) {
                // 检测成功。
         }
}).addOnFailureListener(new OnFailureListener() {
         @Override
         public void onFailure(Exception e) {
                // 检测失败。
          }
});

// syncDocumentSkewCorrect同步调用。
SparseArray&lt;MLDocumentSkewCorrectionResult&gt; correct= analyzer.syncDocumentSkewCorrect(mlFrame, coordinateData);
if (correct != null &amp;&amp; correct.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {
         // 校正成功。
} else {
          // 校正失败。
}
</code></pre>
<h2 id="26-检测完成停止分析器释放检测资源">2.6 检测完成,停止分析器,释放检测资源。</h2>
<pre><code class="language-java">if (analyzer != null) {
      analyzer.stop();
}
</code></pre>
<h1 id="demo效果">Demo效果</h1>
<p>下面这个demo展示了在倾斜角度扫描文档,文档校正技术可以把文档调整到正对视角。效果是不是很棒?</p>
<p><img src="https://img-blog.csdnimg.cn/20200922145931441.gif#pic_center"></p>
<p>文档校正技术还可以辅助文档识别技术,将倾斜的文档调整到正面视角,快速实现从纸质文件到电子文件的转化,大幅度提升信息的录入效率。</p>
<h1 id="github源码">Github源码</h1>
<p>https://github.com/HMS-Core/hms-ml-demo/blob/master/MLKit-Sample/module-text/src/main/java/com/mlkit/sample/activity/DocumentSkewCorretionActivity.java</p>
<h1 id="更详细的开发指南参考华为开发者联盟官网">更详细的开发指南参考华为开发者联盟官网</h1>
<p>https://developer.huawei.com/consumer/cn/hms/huawei-mlkit</p>
<p>欲了解更多详情,请参阅:<br>
华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms<br>
获取开发指导文档:https://developer.huawei.com/consumer/cn/doc/development<br>
参与开发者讨论请到Reddit社区:https://www.reddit.com/r/HMSCore/<br>
下载demo和示例代码请到Github:https://github.com/HMS-Core<br>
解决集成问题请到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest</p>
<hr>
<p>文章来源:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202344452930050418&amp;fid=18<br>
作者:留下落叶</p><br><br>
来源:https://www.cnblogs.com/developer-huawei/p/13712695.html
頁: [1]
查看完整版本: Android 快速集成文档校正能力 超简单