[Google Cloud Speech-to-Text API(V2)] Javaで認識ツールを取得する

Cloud Speech-to-Text API V2(Java)を使用して、
認識ツールを取得する方法についてご紹介します。

**認識ツールとは**
認識ツールは構成可能で再利用可能な認識構成です。

頻繁に使用される認識構成を使用して認識ツールを作成すると、
認識リクエストを簡素化し、リクエストのサイズを削減できます。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](https://qiita.com/doran/items/8e4ef896588229c4fed3)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[認識ツール一覧を取得](#1-認識ツール一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[認識ツールを取得](#2-認識ツールを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. 認識ツール一覧を取得
認識ツール一覧を取得します。

### 1.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。
```
https://www.googleapis.com/auth/cloud-platform
```

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        ListRecognizersRequest.Builder builder = ListRecognizersRequest.newBuilder();
        builder.setParent(String.format("projects/%s/locations/%s", "プロジェクトID","ロケーションID"));
        
        SpeechClient.ListRecognizersPagedResponse response = client.listRecognizers(builder.build());
        for(Recognizer recognizer : response.iterateAll()) {
            System.out.println(recognizer);
        }
    }
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/recognizers
が実行されます。

#### 1.2.2. クエリパラメータ
ListRecognizersRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでListRecognizersRequestインスタンスを取得し、
listRecognizers()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setParent|String|【必須】リソース名<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}"|
|setPageSize|int|取得する認識ツールの最大数(最大100)|
|setPageToken|String|ページトークン|
|setShowDeleted|boolean|削除された認識ツールを表示するか|

### 1.3. レスポンスの内容
#### SpeechClient.ListRecognizersPagedResponse
|メソッド|戻り値|説明|
|---|---|---|
|iterateAll|Iterable\<[Recognizer](#recognizer)\>|認識ツールのリスト|
|getNextPageToken|String|次ページのトークン|

#### Recognizer
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|リソース名<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}/recognizers/{認証ツールID}"|
|getUid|String|システムによって割り当てられた認識ツールID|
|getDisplayName|String|認識ツールの名前(63文字まで)|
|getDefaultRecognitionConfig|[RecognitionConfig](#recognitionconfig)|リクエストに使用するデフォルトの構成|
|getState|[State(enum)](#state)|認識ツールのライフサイクル状態|
|getCreateTime|Timestamp|認識ツールの作成時間|
|getUpdateTime|Timestamp|認識ツールの最終更新時刻|
|getDeleteTime|Timestamp|認識ツールの削除要求された時刻|
|getExpireTime|Timestamp|認識ツールのパージされる時刻|
|getEtag|String|チェックサム値|
|getReconciling|boolean|認識ツールが更新中か|
|getKmsKeyName|String|認識ツールの暗号化に使用されるKMSキーの名前<br>形式："projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"|
|getKmsKeyVersionName|String|認識ツールの暗号化に使用されるKMSキーのバージョン名<br>形式："projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}/cryptoKeyVersions/{crypto_key_version}"|

#### RecognitionConfig
|メソッド|戻り値|説明|
|---|---|---|
|getModel|String|モデル<br><br>[⧉Speech-to-TextV2でのサポート言語](https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages?hl=ja)の「モデル」を指定|
|getLanguageCodesList|[ProtocolStringList](#protocolstringlist)|変換する言語<br><br>[⧉Speech-to-TextV2でのサポート言語](https://cloud.google.com/speech-to-text/v2/docs/speech-to-text-supported-languages?hl=ja)の「BCP-47」を指定|
|getFeatures|[RecognitionFeatures](#recognitionfeatures)|有効にする音声認識機能|
|getAdaptation|[SpeechAdaptation](#speechadaptation)|特定の単語やフレーズに対する認識エンジンの予測を重み付けする音声適応コンテキスト|
|getTranscriptNormalization|[TranscriptNormalization](#transcriptnormalization)|文字起こしの正規化を使用して文字起こしの一部を選択したフレーズに自動的に置き換えるユニオンフィールド|
|getAutoDecodingConfig|[AutoDetectDecodingConfig(enum)](#autodetectdecodingconfig)|デコードパラメータを自動的に検出<br>explicitDecodingConfigの設定がない場合は必須(空のインスタンスを設定)|
|getExplicitDecodingConfig|[ExplicitDecodingConfig](#explicitdecodingconfig)|明示的に指定されたデコードパラメータ<br>ヘッダーレスPCMオーディオ(linear16、mulaw、alaw)の場合は必須|

#### ProtocolStringList
|メソッド|戻り値|説明|
|---|---|---|
|asByteStringList|List\<ByteString\>|データビューのByteStringリスト|

#### RecognitionFeatures
|メソッド|戻り値|説明|
|---|---|---|
|getProfanityFilter|boolean|フィルタリングされた各単語の最初の文字を除くすべての文字をアスタリスクに置き換えるか|
|getEnableWordTimeOffsets|boolean|一番上の結果には単語のリストと、それらの単語の開始時刻と終了時刻のオフセット(タイムスタンプ)が含まれるか|
|getEnableWordConfidence|boolean|一番上の結果には単語のリストとそれらの単語の信頼度が含まれるか|
|getEnableAutomaticPunctuation|boolean|認識結果の仮説に句読点を追加するか|
|getEnableSpokenPunctuation|boolean|音声の句読点をリクエスト内の対応する記号に置き換えるか|
|getEnableSpokenEmojis|boolean|リクエストに音声絵文字の書式設定を追加するか|
|getMultiChannelMode|[MultiChannelMode(enum)](#multichannelmode)|マルチチャンネルオーディオを認識するモード|
|getDiarizationConfig|[SpeakerDiarizationConfig](#speakerdiarizationconfig)|追加パラメータを設定するための構成|
|getMaxAlternatives|int|返される認識仮説の最大数(0〜30)|

#### SpeakerDiarizationConfig
|メソッド|戻り値|説明|
|---|---|---|
|getMinSpeakerCount|int|会話内の発言者の最小数(1〜6)|
|getMaxSpeakerCount|int|会話内の発言者の最大数(1〜6)|

#### SpeechAdaptation
|メソッド|戻り値|説明|
|---|---|---|
|getPhraseSetsList|List\<[AdaptationPhraseSet](#adaptationphraseset)\>|フレーズセットのリスト|
|getCustomClassesList|List\<[⧉ CustomClass](https://qiita.com/doran/items/ae4623b450b2241b961d#customclass)\>|インラインで定義されたカスタムクラスのリスト|

#### AdaptationPhraseSet
|メソッド|戻り値|説明|
|---|---|---|
|getPhraseSet|String|既存のフレーズセットリソースの名前|
|getInlinePhraseSet|[⧉ PhraseSet](https://qiita.com/doran/items/1e03ee24adcd1e438467#phraseset)|インラインで定義されたフレーズセット|

#### TranscriptNormalization
|メソッド|戻り値|説明|
|---|---|---|
|getEntriesList|List\<[TranscriptNormalization.Entry](#transcriptnormalizationentry)\>|置換エントリのリスト(最大100)|

#### TranscriptNormalization.Entry
|メソッド|戻り値|説明|
|---|---|---|
|getSearch|String|何を交換するか(最大100文字)|
|getReplace|String|何と交換するか(最大100文字)|
|getCaseSensitive|boolean|検索で大文字と小文字が区別されるか|

#### ExplicitDecodingConfig
|メソッド|戻り値|説明|
|---|---|---|
|getEncoding|[AudioEncoding(enum)](#audioencoding)|認識のために送信される音声データのエンコーディング|
|getSampleRateHertz|int|認識のために送信されるオーディオデータのサンプルレート(ヘルツ)(8000～48000)<br>[サポートエンコーディング](#サポートエンコーディング)|
|getAudioChannelCount|int|認識のために送信された音声データに存在するチャネルの数(最大8)<br>[サポートエンコーディング](#サポートエンコーディング)|

#### AutoDetectDecodingConfig
|定義値|内容|
|---|---|
|WAV_LINEAR16|WAVコンテナー内の16ビット符号付きリトルエンディアンPCMサンプル|
|WAV_MULAW|WAVコンテナ内の8ビット圧縮されたmulawサンプル|
|WAV_ALAW|WAVコンテナ内の8ビット圧縮されたalawサンプル|
|RFC4867_5_AMR|rfc4867.5ヘッダーを持つAMRフレーム|
|RFC4867_5_AMRWB|rfc4867.5ヘッダーを持つAMR-WBフレーム|
|FLAC|「ネイティブFLAC」コンテナ形式のFLACフレーム|
|MP3|オプションの(無視される)ID3メタデータを含むMPEGオーディオフレーム|
|OGG_OPUS|Oggコンテナ内のOpusオーディオフレーム|
|WEBM_OPUS|WebMコンテナ内のOpusオーディオフレーム|
|M4A|M4Aオーディオ形式|

#### サポートエンコーディング
|定義値|内容|
|---|---|
|LINEAR16|ヘッダーなしの16ビット符号付きリトルエンディアンPCMサンプル|
|MULAW|ヘッダーのない8ビットの圧縮されたmulawサンプル|
|ALAW|ヘッダーなしの8ビット圧縮されたalawサンプル|

#### MultiChannelMode
|定義値|内容|
|---|---|
|MULTI_CHANNEL_MODE_UNSPECIFIED|マルチチャンネルモードのデフォルト値|
|SEPARATE_RECOGNITION_PER_CHANNEL|提供されたオーディオの各チャネルが個別に転写される|

#### AudioEncoding
|定義値|内容|
|---|---|
|AUDIO_ENCODING_UNSPECIFIED|デフォルト値|
|LINEAR16|ヘッダーなしの16ビット符号付きリトルエンディアンPCMサンプル|
|MULAW|ヘッダーなしの8ビット圧縮されたmulawサンプル|
|ALAW|ヘッダーなしの8ビット圧縮されたalawサンプル|

#### State
|定義値|内容|
|---|---|
|STATE_UNSPECIFIED|未指定|
|ACTIVE|認証ツールはアクティブな状態|
|DELETED|認証ツールは削除された|

## 2. 認識ツールを取得
指定した認識ツールの情報を取得します。

### 2.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。
```
https://www.googleapis.com/auth/cloud-platform
```

### 2.2. 実行
認証ツールIDには、[RecognizerのgetName()](#recognizer)で取得できる値の{認証ツールID}の箇所を
指定します。

```java
public static void main(String[] args) throws Exception{
    try(SpeechClient client = getSpeechClient()){
        GetRecognizerRequest.Builder builder = GetRecognizerRequest.newBuilder();
        builder.setName(String.format("projects/%s/locations/%s/recognizers/%s", "プロジェクトID","ロケーションID","認証ツールID"));
        
        Recognizer response = client.getRecognizer(builder.build());
        System.out.println(response);
    }
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//speech.googleapis.com/v2/projects/{プロジェクトID}/locations/{ロケーションID}/recognizers/{認証ツールID}
が実行されます。

#### 2.2.2. クエリパラメータ
GetRecognizerRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでGetRecognizerRequestインスタンスを取得し、
listRecognizers()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setName|String|【必須】リソース名<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}"|

### 2.3. レスポンスの内容
#### Recognizer
[2.3. レスポンスの内容(Recognizer)](#recognizer)と同じです。

<br>
<br>
おしまい。。