生活随笔
收集整理的這篇文章主要介紹了
超简单集成ML kit 实现听写单词播报
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
??相信我們大家在剛開始學習一門語言的時候都有過聽寫,現在的小學生學語文的時候一項重要的課后作業就是聽寫課文中的生詞,很多家長們都有這方面的經歷。不過一方面這種讀單詞的動作相對簡單,另一方面家長的時間也很寶貴,現在市場上出現了很多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實現作業朗讀,拍照后點擊播放即可朗讀。
動態權限申請
private static final int PERMISSION_REQUESTS
= 1;
@Override
public void onCreate(Bundle savedInstanceState
) { if (!allPermissionsGranted()) {getRuntimePermissions();}
}
啟動朗讀界面
public void takePhoto(View view
) {Intent intent
= new Intent(MainActivity
.this, ReadPhotoActivity
.class);startActivity(intent
);
}
在onCreate()法中調用createLocalTextAnalyzer()創建端側文本識別器
private void createLocalTextAnalyzer() {MLLocalTextSetting setting
= new MLLocalTextSetting.Factory().setOCRMode(MLLocalTextSetting
.OCR_DETECT_MODE
).setLanguage("zh").create();this.textAnalyzer
= MLAnalyzerFactory
.getInstance().getLocalTextAnalyzer(setting
);}
在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
);
}
設置讀取照片、拍照和朗讀按鈕
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
);}});
在拍照和讀取照片的回調當中啟動文本識別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
) {if (mlText
!= null
) {ReadPhotoActivity
.this.remoteDetectSuccess(mlText
);} else {ReadPhotoActivity
.this.displayFailure();}}}).addOnFailureListener(new OnFailureListener() {@Overridepublic void onFailure(Exception e
) {ReadPhotoActivity
.this.displayFailure();return;}});} else {Toast
.makeText(this.getApplicationContext(), R
.string
.please_select_picture
, Toast
.LENGTH_SHORT
).show();return;}
}
識別成功后,點擊播放按鈕即可開始播放
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 实现听写单词播报的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。