リアルタイム音声認識
Android SDK
注意:
複数のSDKを同時に統合する場合、ファイルの競合が発生することがありますが、解凍ソフト(7-zipなど)を使ってaarパッケージを解凍し、競合するsoファイルを削除してください。 Android 5.0以上のバージョンに対応しています。
SDKを使用する前に、インターフェイスプロトコルをお読みください。詳細についてはインターフェイスプロトコルを参照してください。
1 統合手順
1.1 aar依存追加
asr-sdk.aar をプロジェクトの libs ディレクトリに配置し、app モジュールの build.gradle を修正して、aarファイルとokhttpを依存として追加します。
implementation fileTree(dir: "libs", include: ["*.jar","*.aar"])
implementation 'com.squareup.okhttp3:okhttp:4.10.0'//ここでokhttpを追加します。古いプロジェクトの場合は3.14.2バージョンを使用することができます
implementation 'org.java-websocket:Java-WebSocket:1.5.3'
implementation 'com.google.code.gson:gson:2.10.1'もし32ビットSDKを使用する場合は、以下のコードを追加する必要があります:
defaultConfig {
//Add the following code
externalNativeBuild {
ndk {
abiFilters "armeabi-v7a"
}
}
}1.2 アプリ関連の権限を追加
AndroidManifest.xmlファイルを修正します
<!--Recording permission-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--Network permission-->
<uses-permission android:name="android.permission.INTERNET" />1.3 呼び出し手順/サンプルコード
1.3.1 録音権限を取得する
registerForActivityResult(new ActivityResultContracts.RequestPermission(), success -> {
tip(success);
}).launch(Manifest.permission.RECORD_AUDIO);1.3.2 認識クラスを作成する
private Transcriber transcriber;//Real-time speech recognition
private BaseAsr getAsr() {
if (type == Asr.Type.RECOGNIZER) {
return recognizer;
}
return transcriber;
}
//Initialize the SDK in onCreate
transcriber = Transcriber.getInstance(activity);
recognizer = Recognizer.getInstance(activity);1.3.3 マイクを初期化します
getAsr().initRecorder();//Initializes the microphone when creating the identification class 1.3.4 コールバックを設定します
(1)コールバックパラメータの説明
| 名前 | 型 | 説明 | 戻り値のパラメータ |
|---|---|---|---|
| onStart | Function | エンジン接続開始のコールバックメソッド | String型 現在のタスクのID |
| onResult | Function | エンジンが返す内容の結果のコールバックメソッド | String型の結果データ |
| onIntermediateResult | Function | エンジンが中間結果を返すコールバックメソッド | String型の中間結果データ |
| onWarning | Function | エンジンが結果の警告を返すコールバックメソッド | タスクIDとエラー型の状態コード |
| onError | Function | エンジンが結果のエラーを返すコールバックメソッド | タスクIDとエラー型の状態コード |
| onGetAudio | Function | エンジンが認識音声データを返すコールバックメソッド | byte[]型の音声データ |
| onStop | Function | エンジンが終了すると返すコールバックメソッド | 何もない |
(2)パラメータの例
getAsr().setListener(new Asr.Listener() {
@Override
public void onStart(String taskId) {
}
@Override
public void onError(String taskId, Errors.Err err) {
}
@Override
public void onResult(String msg) {
}
@Override
public void onIntermediateResult(String msg) {
}
@Override
public void onWarning(String taskId, Errors.Err err) {
}
@Override
public void onGetAudio(byte[] data) {
}
@Override
public void onStop() {
}
});
1.3.5 権限のアクティブ化
(1)構成パラメータ
| 名前 | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| onSuccess | Function | 初期化成功時のコールバックメソッド | 何もない |
| onFail | Function | 初期化失敗時のコールバックメソック | 何もない |
(2)パラメータの例
@NonNull
private Asr.InitListener getInitListener() {
return new Asr.InitListener() {
@Override
public void onSuccess() {
tip("onSuccess");
}
@Override
public void onFail(Errors.Err err) {
}
};
}オンライン認証
getAsr().initOnline(appId, appSecret, getInitListener());1.3.6 パラメータの設定
インターフェースパラメータの説明
| パラメータ | タイプ | 必須 | 説明 | デフォルト値 |
|---|---|---|---|---|
| lang_type | String | はい | 言語オプション | 必須 |
| format | String | いいえ | 音声エンコード形式 | pcm |
| sample_rate | Integer | いいえ | 音声サンプルレート | 16000 |
| enable_intermediate_result | Boolean | いいえ | 中間認識結果を返すかどうか | true |
| enable_punctuation_prediction | Boolean | いいえ | 後処理で句読点を追加するかどうか | true |
| enable_inverse_text_normalization | Boolean | いいえ | 後処理でITNを実行するかどうか | true |
| max_sentence_silence | Integer | いいえ | 音声センテンスのサイレンス検出しきい値、試練ス時間がこのしきい値を超えるとセンテンスが切り替えられます。有効なパラメータ範囲は200~1200で、単位はミリ秒です | 450 |
| enable_words | Boolean | いいえ | 単語情報を返すかどうか | false |
| enable_modal_particle_filter | Boolean | いいえ | 語気詞フィルタを有効にするかどうか | true |
| hotwords_id | String | いいえ | 単語ID | 無し |
| hotwords_weight | Float | いいえ | 単語のウェイト、値の範囲[0.1, 1.0] | 0.4 |
| correction_words_id | String | いいえ | 強制置換単語庫ID 複数の強制置換単語庫IDを使用することができ、各IDは縦線 |で区切られます;all は全ての強制置換単語庫IDを使用することを意味します。 | 無し |
| forbidden_words_id | String | いいえ | NG単語ID 複数のNG単語IDを使用することができ、各IDは縦線 |で区切られます;all は全てのNG単語IDを使用することを意味します。 | 無し |
JsonObject params = new JsonObject();
params.addProperty("lang_type", langType);
params.addProperty("sample_rate", 16000);
params.addProperty("enable_intermediate_result", true);
params.addProperty("enable_punctuation_prediction", true);
params.addProperty("enable_inverse_text_normalization", true);
params.addProperty("max_sentence_silence", 800);
params.addProperty("enable_words", true);1.3.7 開始/停止認識
| 名前 | タイプ | 説明 | デフォルト値 |
|---|---|---|---|
| autoRecording | boolean | マイクの初期化後はtrue | true |
| onlineAsr | boolean | オンライン時はtrue、オフライン時はfalse | true |
| params | JsonObject | パラメータjson | 何もない |
認識を開始します
getAsr().start(autoRecording, onlineAsr, params);識別を開始します(SDK外部転送音声)
1. 外部録画の送信モード
1.1 start
getAsr().start(false, onlineAsr, params);
1.2 feed audio
getAsr().feed(data, false);
1.3 end
getAsr().stop();
2. オーディオを転送するためのファイルの外部読み込み
2.1 start
getAsr().start(false, onlineAsr, params);
2.2 feed audio
getAsr().feed(data, false);
2.3 end(終了データはテールパケットのデータを渡す必要がある)
getAsr().feed(data, true);認識開始(ファイル認識方式)
getAsr().startPath(onlineAsr,params,"ローカル・オーディオ・アドレス");
//No need to manually stop, automatically stops and calls back the onstop method when the file transfer is complete.強制的に文を区切ります
getAsr().sentenceEnd();カスタムの話者番号を設定します
getAsr().speakerStart("speaker_name")認識を停止します
getAsr().stop();認識音声を保存します
getAsr().setSaveAudio(true);
//The default value is not saved. If true is set to save, the path is “context.getExternalFilesDir(null)/asrCache”