机器学习让文字识别更简单:Kotlin+MVVM+华为ML Kit

简介

计算机可以从图像或视频流中获取信息的过程属于计算机视觉领域。
文本识别服务是计算机视觉的一部分。也是当前最火的人工智能应用,文本识别服务可以识别收据、名片、文档照片等含文字的图片,将其中的文本信息提取出来。打开相机就可以轻松将图片或者实景中的文字转换为文字信息。

使用场景

  1. 在寄快递场景下,通过识别上传的图片,能快速将收件人姓名、电话、收件人地址等重要信息填入对应位置
    在这里插入图片描述
  2. 结合翻译功能做到实时拍照翻译,面对原本看不懂的菜单,看不懂的路标等等,使用这个功能,让用户在异国也不用担心看不懂文字,我们已经写好了相关代码,可以访问博客查看具体实现流程
    https://blog.csdn.net/weixin_38132951/article/details/107352702
    在这里插入图片描述
  3. 平时也会经常使用到pdf文档转word,在本质上也是使用了文本识别的能力。同时,在平时的生活中有时候也需要将图片中的文字提取出来发给朋友或者自己写进备忘录。
    在这里插入图片描述

能力展示

首先让我们来看一下利用华为MLKit的文本识别能力。
在这里插入图片描述

功能描述

在这里插入图片描述

识别语种

该服务可以同时支持设备端和云端,不过其能识别的文字种类有区别。当调用设备端接口时,仅可识别中文(简体)、日文、韩文、拉丁字符(支持的拉丁字符参见文字识别客户端支持的拉丁字符)。当调用云端接口时,可以识别中文(简体)、英文、西班牙文、葡萄牙文、意大利文、德文、法文、俄文、日文、韩文、波兰文、芬兰文、挪威文、瑞典文、丹麦文、土耳其文、泰文、阿拉伯文、印地文、印尼文等文字。

文本识别特性 文本识别特性
端侧 支持中、日、韩、拉丁字符
云侧 中、英、法、西、泰语等19个语种
倾斜识别 30度倾斜情况下依然可以识别
弯曲文字支持 支持45度弯曲情况下依然可以成功识别
文字跟踪 端侧支持跟踪
识别方式

该服务支持静态图片识别和动态视频流识别,同步和异步两种调用方式,通过提供丰富的API,可帮助开发者快速构建各种文本识别应用。

详见华为开发者联盟官网:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/text-recognition-0000001050040053
在这里插入图片描述

集成步骤

步骤1:在Android Studio中新建工程
步骤2:根据项目需求选择依赖项
// Import the base SDK.
implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.3.300'
// Import the Latin-based language model package.
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:1.0.3.315'
// Import the Japanese and Korean model package.
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:1.0.3.300'
// Import the Chinese and English model package.
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:1.0.3.300'

下面是每个SDK的大小

包类型 包名 包大小
拉丁语模型 ml-computer-vision-ocr-latin-model 952 KB
日韩语模型 ml-computer-vision-ocr-jk-model 2.14 MB
中英文模型 ml-computer-vision-ocr-cn-model 3.46 MB

如果想要一个精简版本使用下面的依赖

implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.3.300'

自动更新机器学习模型

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

在manifest文件中添加以下权限

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

让我们跳到TextRecognitionViewModel类中,在该类中,我们接收到了一个包含用户图像的位图。
下面是您可以用来调用文本识别API并获取String响应的代码。

fun textRecognition() {
    
    
     val setting = MLRemoteTextSetting.Factory()
         .setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE)
         .setLanguageList(object : ArrayList<String?>() {
    
    
             init {
    
    
                 this.add("zh")
                 this.add("en")
                 this.add("hi")
                 this.add("fr")
                 this.add("de")
             }
         })
         .setBorderType(MLRemoteTextSetting.ARC)
         .create()
     val analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting)
     val frame = MLFrame.fromBitmap(bitmap.value)
     val task = analyzer.asyncAnalyseFrame(frame)
     task.addOnSuccessListener {
    
    
         result.value = it.stringValue
     }.addOnFailureListener {
    
    
         result.value = "Exception occurred"
     }
 }

我想使用云服务,因此选择MLRemoteTextSetting()
根据字符的密度,我们可以将setTextDensityScene()设置为OCR_LOOSE_SCENEOCR_COMPACT_SCENE
一旦密度被设置,我们将通过setLanguageList ()设置文本语言。
我们可以传递一个
ArrayList
的集合对象给它。我已经在我的模型中添加了5种语言,但是您可以根据需要添加语言。
MLRemoteTextSetting.ARC:以弧形格式返回多边形边界的顶点。
现在,我们的自定义MLRemoteTextSetting对象已经准备好,我们可以将其传递给MLTextAnalyzer对象。
下一步是创建一个MLFrame

**· MLFrame frame= MLFrame.fromBitmap(bitmap);**

在分析器对象上,我们将调用asyncAnalyseFrame (框架)并提供我们最近创建的MLFrame。

这将生成一个Task对象,在这个对象上,您将得到2个回调。

on 成功
onFailure

可以在**onSuccess()中保存新的资源,并通过analyzer.stop()**方法停止分析器,释放检测资源。

为了以防万一,您想使用在设备模型仅以下更改是必需的。

MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer();
MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
  .setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
  .setLanguage("en")
  .create();

相关链接

github:
https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample/tree/master/MLKit-Sample
开发者联盟开发指导文档:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/text-recognition-0000001050040053-V5
示例demo:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples-V5/sample-code-0000001050265470-V5

猜你喜欢

转载自blog.csdn.net/weixin_38132951/article/details/107352272