机器学习让拍照翻译更简单:java+华为ML Kit

简介

拍照翻译同时结合了文本识别和翻译两个功能。用户只要打开相机拍下需要识别的外国文字,即可
翻译成自己的母语。

在现实中,大家如果到了语言不通的地方,大概率可能会遇到如下麻烦:

梦幻菜单

在这里插入图片描述

魔性的路标指示牌

在这里插入图片描述

商场中琳琅满目的商品

在这里插入图片描述

拍照翻译帮你忙

我们首先来看一下效果展示
同时po上源码(找到Photo-translate):
https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample
在这里插入图片描述

基本功能介绍(免费

今天就来给大家介绍一下,怎么样来开发一个拍照翻译服务。简单来讲完成拍照翻译小应用的开发只需要两大步:

文本识别

在这里插入图片描述
先拍张照片获取图片,然后把获取的图像帧送到华为HMS ML Kit文本识别服务做文本识别
华为文本识别服务同时提供离线SDK(端侧)和云侧两种方式,端侧免费可实时检测,云侧识别种类和精度更高。本次实战我们采用云侧提供的能力。

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

详见华为开发者联盟官网:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/text-recognition-0000001050040053

翻译

在这里插入图片描述
将识别后的文字送到华为HMS MLKit 翻译服务做文本翻译,就可以获取到想要翻译后的结果了。
翻译是云侧提供的服务。

文本翻译特性 规格(HMS 4.0)
多语种 7个语种 中、英、法、西、土、阿、泰
时延 300ms/100字
BLEU值 >30
动态术语配置 支持

详见华为开发者联盟官网:
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/text-translation-0000001050040079

拍照翻译APP开发实战

1 开发准备

由于使用了云侧的服务,需要到华为的开发者联盟注册开发者账号,并且在云端开通这些服务,这里就不细讲了,直接按照官方的的AppGallery Connect配置、开通服务部分操作步骤进行即可:
注册开发者,开通服务参考请戳:

1.1 在项目级gradle里添加华为maven仓

打开AndroidStudio项目级build.gradle文件。

增量添加如下maven地址:

buildscript {
    repositories {        
        maven {url 'http://developer.huawei.com/repo/'}
    }    
}
allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
    }
}
1.2 在应用级的build.gradle里面加上SDK依赖

集成SDK。(由于使用云侧能力,只引入SDK基础包即可)

dependencies{  
    implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300'
    implementation 'com.huawei.hms:ml-computer-translate:1.0.2.300'
}

1.3 在AndroidManifest.xml文件里面申请相机和存储权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2 代码开发关键步骤
2.1 动态权限申请
private static final int CAMERA_PERMISSION_CODE = 1; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // Checking camera permission   
   if (!allPermissionsGranted()) {
       getRuntimePermissions();
   }
} 
2.2 创建云侧文本分析器。可以通过文本检测配置器“MLRemoteTextSetting”创建文本分析器。
MLRemoteTextSetting setting = (new MLRemoteTextSetting.Factory()).
         setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE).create();
this.textAnalyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting);
2.3 通过android.graphics.Bitmap创建“MLFrame”对象用于分析器检测图片。
MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();
2.4 调用“asyncAnalyseFrame ”方法进行文本检测。
Task<MLText> task = this.textAnalyzer.asyncAnalyseFrame(mlFrame);
            task.addOnSuccessListener(new OnSuccessListener<MLText>() {
                @Override
                public void onSuccess(MLText mlText) {
                    // Transacting logic for segment success.
                    if (mlText != null) {
                        RemoteTranslateActivity.this.remoteDetectSuccess(mlText);
                    } else {
                        RemoteTranslateActivity.this.displayFailure();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                    // Transacting logic for segment failure.
                    RemoteTranslateActivity.this.displayFailure();
                    return;
                }
            });
2.5 创建文本翻译器。可以通过文本翻译器自定义参数类“MLRemoteTranslateSetting”创建翻译器。
MLRemoteTranslateSetting.Factory factory = new MLRemoteTranslateSetting
                .Factory()
                // Set the target language code. The ISO 639-1 standard is used.
                .setTargetLangCode(this.dstLanguage);
        if (!this.srcLanguage.equals("AUTO")) {
            // Set the source language code. The ISO 639-1 standard is used.
            factory.setSourceLangCode(this.srcLanguage);
        }
        this.translator = MLTranslatorFactory.getInstance().getRemoteTranslator(factory.create());
2.6 调用“asyncAnalyseFrame ”方法对文本识别获取的内容进行文本翻译。
final Task<String> task = translator.asyncTranslate(this.sourceText);
        task.addOnSuccessListener(new OnSuccessListener<String>() {
            @Override
            public void onSuccess(String text) {
                if (text != null) {
                    RemoteTranslateActivity.this.remoteDisplaySuccess(text);
                } else {
                    RemoteTranslateActivity.this.displayFailure();
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                RemoteTranslateActivity.this.displayFailure();
            }
        });
2.7 翻译完成释放资源。
if (this.textAnalyzer != null) {
            try {
                this.textAnalyzer.close();
            } catch (IOException e) {
                SmartLog.e(RemoteTranslateActivity.TAG, "Stop analyzer failed: " + e.getMessage());
            }
        }
        if (this.translator != null) {
            this.translator.stop();
        }

3 源码

老规矩,简单的小Demo源码已上传Github,github源码地址请戳(工程目录为:Photo-Translate),大家可以做参考做基于场景的优化。
https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample

4 结后语

本次给大家演示的小程序APP开发同时用到了华为HMS ML Kit的两种云侧能力,文字识别和翻译的能力,华为的文字识别和翻译还可以帮助开发者做很多其他有趣又强大的功能,比如:

【通用文本识别】

1、公交车牌文字识别
2、文档阅读场景下的文本识别

【卡证类文本识别】

1、通过文字识别可以识别银行卡的卡号,用于银行卡绑定等场景
2、当然除了识别银行卡,还可以识别生活中的各种卡证号,比如会员卡、优惠卡
3、此外还可以实现身份证、港澳通行证等证件类号码的识别

【翻译】

1、路标路牌翻译
2、文档翻译
3、网页翻译,比如识别网站评论区的语言类型并翻译成对应国家的语言;
4、海淘商品介绍翻译
5、餐厅点餐菜单翻译

5 华为MLkit其余功能介绍

在这里插入图片描述
欢迎来到官网查阅
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/service-introduction-0000001050040017
示例代码参考:(不要使用微信的扫码)
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples-V5/sample-code-0000001050265470-V5
上架华为应用市场会有机会得到免费流量推广

猜你喜欢

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