背景

  相信我们大家在刚开始学习一门语言的时候都有过听写,现在的小学生学语文的时候一项重要的课后作业就是听写课文中的生词,很多家长们都有这方面的经历。不过一方面这种读单词的动作相对简单,另一方面家长的时间也很宝贵,现在市场上出现了很多xx课后听写的语音,这些播讲人将语文教材上的课后听写单词录好,给家长下载使用,不过这种录音不够灵活,如果老师今天额外留了几道不是课后习题中的单词,这部分的录音就不能满足家长和孩子们的需要。本文就介绍了一个使用我们ML kit 的通用文本识别功能和语音合成功能共同实现自动语音播报APP,只需要对听写的单词或者课文拍照,然后就能自动播报照片中的文字,播报的音色、音调都可以调整。


开发前准备

打开AndroidStudio项目级build.gradle文件


  在allprojects ->repositories里面配置HMS SDK的maven仓地址

allprojects { repositories { google() jcenter() maven {url 'http://developer.huawei.com/repo/'} } }

  在buildscript->repositories里面配置HMS SDK的maven仓地址

buildscript { repositories { google() jcenter() maven {url 'http://developer.huawei.com/repo/'} } }

  在buildscript->repositories里面配置HMS SDK的maven仓地址

buildscript { repositories { google() jcenter() maven {url 'http://developer.huawei.com/repo/'} } }

  在buildscript->dependencies中,配置AGC插件

dependencies {classpath 'com.huawei.agconnect:agcp:1.2.1.301'
}

添加编译依赖

  打开应用级的build.gradle文件

  集成SDK

dependencies{  implementation 'com.huawei.hms:ml-computer-voice-tts:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.4.300'implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:1.0.4.300'
}

  应用ACG插件,添加在文件头即可

apply plugin: 'com.huawei.agconnect'

  指定权限和特性:在AndroidManifest.xml中进行声明

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

  作业朗读代码关键步骤

  主要有两个功能,一个是识别作业文本,一个是朗读作业,通过OCR+TTS实现作业朗读,拍照后点击播放即可朗读。

  1. 动态权限申请
private static final int PERMISSION_REQUESTS = 1;
@Override
public void onCreate(Bundle savedInstanceState) { // Checking camera permission   if (!allPermissionsGranted()) {getRuntimePermissions();}
}
  1. 启动朗读界面
public void takePhoto(View view) {Intent intent = new Intent(MainActivity.this, ReadPhotoActivity.class);startActivity(intent);
}
  1. 在onCreate()法中调用createLocalTextAnalyzer()创建端侧文本识别器
private void createLocalTextAnalyzer() {MLLocalTextSetting setting = new MLLocalTextSetting.Factory().setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE).setLanguage("zh").create();this.textAnalyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);}
  1. 在onCreate()法中调用createTtsEngine ()创建语音合成引擎,并构建语音合成回调,用于处理语音合成结果,将语音合成回调传入新建的语音合成引擎中
private void createTtsEngine() {MLTtsConfig mlConfigs = new MLTtsConfig().setLanguage(MLTtsConstants.TTS_ZH_HANS).setPerson(MLTtsConstants.TTS_SPEAKER_FEMALE_ZH).setSpeed(0.2f).setVolume(1.0f);this.mlTtsEngine = new MLTtsEngine(mlConfigs);MLTtsCallback callback = new MLTtsCallback() {@Overridepublic void onError(String taskId, MLTtsError err) {}@Overridepublic void onWarn(String taskId, MLTtsWarn warn) {}@Overridepublic void onRangeStart(String taskId, int start, int end) {}@Overridepublic void onEvent(String taskId, int eventName, Bundle bundle) {if (eventName == MLTtsConstants.EVENT_PLAY_STOP) {if (!bundle.getBoolean(MLTtsConstants.EVENT_PLAY_STOP_INTERRUPTED)) {Toast.makeText(ReadPhotoActivity.this.getApplicationContext(), R.string.read_finish, Toast.LENGTH_SHORT).show();}}}};mlTtsEngine.setTtsCallback(callback);
}
  1. 设置读取照片、拍照和朗读按钮
this.relativeLayoutLoadPhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ReadPhotoActivity.this.selectLocalImage(ReadPhotoActivity.this.REQUEST_CHOOSE_ORIGINPIC);}});
this.relativeLayoutTakePhoto.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ReadPhotoActivity.this.takePhoto(ReadPhotoActivity.this.REQUEST_TAKE_PHOTO);}});
  1. 在拍照和读取照片的回调当中启动文本识别startTextAnalyzer()
private void startTextAnalyzer() {if (this.isChosen(this.originBitmap)) {MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();Task<MLText> task = this.textAnalyzer.asyncAnalyseFrame(mlFrame);task.addOnSuccessListener(new OnSuccessListener<MLText>() {@Overridepublic void onSuccess(MLText mlText) {// Transacting logic for segment success.if (mlText != null) {ReadPhotoActivity.this.remoteDetectSuccess(mlText);} else {ReadPhotoActivity.this.displayFailure();}}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e) {// Transacting logic for segment failure.ReadPhotoActivity.this.displayFailure();return;}});} else {Toast.makeText(this.getApplicationContext(), R.string.please_select_picture, Toast.LENGTH_SHORT).show();return;}
}
  1. 识别成功后,点击播放按钮即可开始播放
this.relativeLayoutRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (ReadPhotoActivity.this.sourceText == null) {Toast.makeText(ReadPhotoActivity.this.getApplicationContext(), R.string.please_select_picture, Toast.LENGTH_SHORT).show();} else {ReadPhotoActivity.this.mlTtsEngine.speak(sourceText, MLTtsEngine.QUEUE_APPEND);Toast.makeText(ReadPhotoActivity.this.getApplicationContext(), R.string.read_start, Toast.LENGTH_SHORT).show();}}});

Demo效果


往期链接:超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购
原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201283755975150303&fid=18
原作者:littlewhite

超简单集成ML kit 实现听写单词播报相关推荐

  1. 【转载】超简单集成HMS ML Kit 人脸检测实现可爱2D贴纸

    文章目录 前言 场景 开发前准备 在项目级gradle里添加华为maven仓 在应用级的build.gradle里面加上SDK依赖 在AndroidManifest.xml文件里面申请相机.访问网络和 ...

  2. 一文搞懂华为ML Kit数字人,超简单集成

    一.数字人介绍 虚拟数字人是综合多模态AI能力,结合图像视觉.情绪生成.语音克隆.语义理解等多种AI技术,广泛应用于媒体新闻主播.金融客服.虚拟游戏等众多场景. 数字人在行业中的应用: 二.HMS M ...

  3. 超简单集成HMS ML Kit二代身份证识别,一键实名认证

    前言 就在近期华为HMS ML Kit 发布了1.0.3.30版本,ML Kit在原有通用OCR功能的基础上,又新增了银行卡识别(BCR)和二代身份证识别(ICR).今天小编就给大家介绍一下其中的IC ...

  4. android 贴纸 源码,超简单集成HMS ML Kit 人脸检测实现可爱贴纸

    前言 在这个美即真理.全民娱乐的时代,可爱有趣的人脸贴纸在各大美颜软件中得到了广泛的应用,现在已经不仅局限于相机美颜类软件中,在社交.娱乐类的app中对人脸贴纸.AR贴纸的需求也非常广泛.本文详细介绍 ...

  5. 超简单集成HMS Core ML Kit场景识别,构建相册管理新模式

    前言 "给你看下我之前去景区玩拍的照片,风景很好" "嗯嗯,我正好也准备出去玩,快分享下" -- "照片呢,还没找到吗?" "等会 ...

  6. android自带抓拍算法,Android | 超简单集成HMS ML Kit实现最大脸微笑抓拍

    前言 如果大家对HMS ML Kit 人脸检测功能有所了解,相信已经动手调用我们提供的接口编写自己的APP啦.目前就有小伙伴在调用接口的过程中反馈,不太清楚HMS ML Kit 文档中的MLMaxSi ...

  7. 超简单集成HMS ML Kit 实现parental control

    前言   各位应用程序开发者有没有在后台收到过家长们的反馈? 希望能够提供一个开关,采取一些措施保护小孩的眼睛,因为现在小孩子的近视率越来越高,和他们长时间近距离盯着屏幕有很大的关系.最近有一个海外的 ...

  8. 一文搞懂华为ML Kit拍照购,超简单集成

    简介 华为HMS ML Kit提供拍照购服务,用户通过拍摄商品图片,在预先建立的商品图片库中在线检索同款或相似商品,返回相似商品ID和相关信息. 应用场景 使用摄像头设备从开发的购物APP当中捕捉产品 ...

  9. 超简单集成HMS ML套件二代身份证识别,一键实名认证

    前言 就在近期华为HMS ML Kit发布了1.0.3.30版本,ML Kit在原有通用OCR功能的基础上,又添加了银行卡识别(BCR)和二代身份识别(ICR).今天小编就给ML kit除了提供语言相 ...

最新文章

  1. Python设计模式-备忘录模式
  2. Java静态初始化,实例初始化以及构造方法
  3. C++ Double Ended Queues(双向队列)
  4. APK瘦身记,怎样实现高达53%的压缩效果
  5. 便捷的flex弹性布局
  6. 外卖小哥高考623分!查分后淡定送外卖
  7. 360浏览器升级_360安全卫士下载|360安全卫士 12.0 最新版
  8. Windows Server 2008域中组的简析
  9. mysql show_db 权限_菜鸟课堂:MySQL权限的详细解答
  10. 泛微oa系统手机服务器,泛微OA系统移动客服,把客户的所有事宜装入手机
  11. php源码 gd,php 源码安装没有gd库
  12. CentOS 5.5 安装 Python 2.7_老范的空间_百度空间
  13. python 爬虫 代理池
  14. ipod nano7安装linux,奔泪求助ipod nano5怎么取消外放功能
  15. 垃圾场恶臭环境监测系统方案
  16. 【电路设计】Altium Designer 20 PCB设计
  17. 网络存储文件共享之WebDAV
  18. NetLogon事件ID:5722
  19. 第三阶段:Web前端:02数据库(sql语言、JDBC数据库连接) | 03(1)SpringBoot
  20. 数据通信与计算机网络课后习题

热门文章

  1. 【U8+】用友U8+对账不平案例及方法总结
  2. 用友GRP-U8 U8AppProxy任意文件上传漏洞复现+利用
  3. python中英文混输对不齐_python中英文混合字符串对齐输出
  4. 私域是否是数字化中的必要的一环?
  5. 5G带动下的3D可视化发展趋势
  6. 炼厂322℃工艺气余热换热器设计
  7. 输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的交集(交集的元素由两个集合中的相同元素构成),最后输出交集中的元素。
  8. 汇编习题之某机指令字长16位,共有单地址指令和双地址指令两类,若每个地址字段均为5位,且双地址指令已用了X条,问单地址指令最多可以有多少条?
  9. 查询接口返参配置化组件设计(适用定制信息查询)
  10. 台电 p78 刷机成功