ディクテーションワードブロードキャストを実現する方法は?MLキットの超簡単な統合がそれを行うことができます!

バックグラウンド


私たち全員が最初に言語を学び始めたときに口述したと思います。小学生が中国語を学んでいるとき、重要な宿題はテキストの新しい単語を口述することです。多くの親がこの経験を持っています。しかし、言葉を読むという行為は比較的単純であると同時に、両親の時間も非常に貴重です。現在、市場では授業後の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

おすすめ

転載: blog.csdn.net/weixin_47546655/article/details/107856357
おすすめ