一発話認識
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 {
//以下のコードを追加します
externalNativeBuild {
ndk {
abiFilters "armeabi-v7a"
}
}
}1.2 アプリ関連の権限を追加
AndroidManifest.xmlファイルを修正します
<!--録音の権限は必ず追加する必要があります-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--ネットワークの権限は必ず追加する必要があります。-->
<uses-permission android:name="android.permission.INTERNET" />1.3 呼び出し手順/サンプルコード
1.3.1 録音権限の取得
registerForActivityResult(new ActivityResultContracts.RequestPermission(), success -> {
String msg = "録音の権限を取得する" + (success ? "success" : "error");
tip(msg);
}).launch(Manifest.permission.RECORD_AUDIO);1.3.2 識別クラスを作成します
private Recognizer recognizer;//一発話認識
private BaseAsr getAsr() {
if (type == Asr.Type.RECOGNIZER) {
return recognizer;
}
return transcriber;
}
//onCreateでSDKを初期化する
transcriber = Transcriber.getInstance(activity);
recognizer = Recognizer.getInstance(activity);1.3.3 マイクを初期化します
getAsr().initRecorder();//マイクを初期化すると同時に認識クラスを作成する 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("初期化成功");
}
@Override
public void onFail(Errors.Err err) {
}
};
}オンライン認証
getAsr().initOnline(appId, appSecret, getInitListener());1.3.6 パラメータの設定
インターフェースパラメータの説明
| パラメータ | 型 | 必須か | 説明 | デフォルト値 |
|---|---|---|---|---|
| lang_type | String | はい | 言語オプション | 必須 |
| format | String | いいえ | 音声エンコード形式 | mp3 |
| 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 | いいえ | 敏感詞ID 複数の敏感詞IDを使用することをサポートし、各IDは竖線で区切られます。 allはすべての敏感詞IDを使用することを示します | なし |
//4.1認識パラメータを設定する
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);//後処理でITNを実行するかどうか
params.addProperty("max_sentence_silence", 800);//音声の区切り検出閾値、マルチメディアの長さがこの閾値を超えると区切りとみなされます。有効なパラメータ範囲は200〜2000(ms)、デフォルト値は800msです
params.addProperty("enable_words", true);//単語情報を返す機能をオンにするかどうか1.3.7 開始/停止
| 名前 | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| autoRecording | boolean | マイクの初期化後はtrue | true |
| onlineAsr | boolean | オンライン時はtrue、オフライン時はfalse | true |
| params | JsonObject | パラメータjson | なし |
音声認識を開始します(SDK内蔵通話マイク)
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,"LOCAL_AUDIO_PATH");
//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);
//デフォルトでは保存しませんが、trueに設定すると保存します。パスはcontext.getExternalFilesDir(null)/asrCacheです