バックグラウンド
私たち全員が最初に言語を学び始めたときに口述したと思います。小学生が中国語を学んでいるとき、重要な宿題はテキストの新しい単語を口述することです。多くの親がこの経験を持っています。しかし、言葉を読むという行為は比較的単純であると同時に、両親の時間も非常に貴重です。現在、市場では授業後のxxの声が多く出回っています。これらの放送局は、授業後の言葉を中国の教科書に記録しています。両親がダウンロードして使用することはできますが、この種の録音は十分な柔軟性がありません。今日の放課後の演習にない単語を教師がいくつか残しておくと、録音のこの部分は両親と子供のニーズを満たしません。この記事では、MLキットの一般的なテキスト認識機能と音声合成機能を紹介し、自動音声ブロードキャストAPPを実現します。口述された単語またはテキストの写真を撮るだけで、写真内のテキスト、ブロードキャストのトーンとトーンを自動的にブロードキャストできます。調整可能です。
開発前の準備
AndroidStudioプロジェクトレベルのbuild.gradleファイルを開きます
すべてのプロジェクト->リポジトリでHMSSDKのmavenウェアハウスアドレスを構成します
allprojects {
repositories {
google()
jcenter()
maven {
url 'http://developer.huawei.com/repo/'}
}
}
buildscript-> repositoriesでHMSSDKのmavenウェアハウスアドレスを構成します
buildscript {
repositories {
google()
jcenter()
maven {
url 'http://developer.huawei.com/repo/'}
}
}
buildscript-> repositoriesでHMSSDKの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で宣言します
private static final int PERMISSION_REQUESTS = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
// Checking camera permission
if (!allPermissionsGranted()) {
getRuntimePermissions();
}
}
コードを声に出して読むための重要なステップ
主な機能は、宿題のテキストを認識する機能と、宿題を読み上げる機能の2つです。宿題は、OCR + TTSで読み上げることができます。写真を撮った後、再生をクリックして読みます。
1.動的許可申請
private static final int PERMISSION_REQUESTS = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
// Checking camera permission
if (!allPermissionsGranted()) {
getRuntimePermissions();
}
}
2.読み取りインターフェイスを開始します
public void takePhoto(View view) {
Intent intent = new Intent(MainActivity.this, ReadPhotoActivity.class);
startActivity(intent);
}
3. onCreate()メソッドでcreateLocalTextAnalyzer()を呼び出して、エンドサイドテキストレコグナイザーを作成します
private void createLocalTextAnalyzer() {
MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
.setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
.setLanguage("zh")
.create();
this.textAnalyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
}
4. 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() {
@Override
public void onError(String taskId, MLTtsError err) {
}
@Override
public void onWarn(String taskId, MLTtsWarn warn) {
}
@Override
public void onRangeStart(String taskId, int start, int end) {
}
@Override
public 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);
}
5.写真を読んだり、写真を撮ったり、声を出して読んだりするためのボタンを設定します
this.relativeLayoutLoadPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ReadPhotoActivity.this.selectLocalImage(ReadPhotoActivity.this.REQUEST_CHOOSE_ORIGINPIC);
}
});
this.relativeLayoutTakePhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ReadPhotoActivity.this.takePhoto(ReadPhotoActivity.this.REQUEST_TAKE_PHOTO);
}
});
6.写真の撮影と読み取りのコールバックでテキスト認識を開始します
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>() {
@Override
public void onSuccess(MLText mlText) {
// Transacting logic for segment success.
if (mlText != null) {
ReadPhotoActivity.this.remoteDetectSuccess(mlText);
} else {
ReadPhotoActivity.this.displayFailure();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public 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;
}
}
7.認識に成功したら、再生ボタンをクリックして再生を開始します
this.relativeLayoutRead.setOnClickListener(new View.OnClickListener() {
@Override
public 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();
}
}
});
デモ効果
実装に興味がある場合は、Githubでソースコードをダウンロードできます:https://github.com/HMS-Core/hms-ml-demo/tree/master/Homework-Reader