Speech To Text コンテナライブラリ- 組み込みAI セルフサービス型デジタル共創体験(DSCE)

# 組み込みAI セルフサービス型デジタル共創体験(DSCE)とは

[組み込みAI セルフサービス型デジタル共創体験](https://qiita.com/trtrbohz/items/356a5a4b66624b2c94a2)に記載しておりますが、現在STT(speech-to-text)、TTS(test-to-speech)、NLU(natural-language-understanding)等のAIがサーバーに接続しなくても組み込んで利用することが可能となりました。

その情報がこちらの[サイト](https://dsce.ibm.com/)、DSCE([Digital Self-Serve Co-Create Experience](https://dsce.ibm.com/);"組み込みAI セルフサービス型デジタル共創体験"？)にて紹介されております。

今回はそのDSCEの中から、「Speech to Text container for running a pre-trained model」 を実施します。
※個人的な利用は無償ですが、商用利用は有償となります。

# 今回 「Speech to Text container for running a pre-trained model」により、音源からテキスト抽出をやってみた。※参照1

# 1. 前提
* コンテナ動作環境準備
コンテナ上で学習済みのSTTエンジンを動作させます。そのため、コンテナ環境としてDockerをインストールしてください。
mac：[ココ](https://matsuand.github.io/docs.docker.jp.onthefly/desktop/mac/install/)を参照
windows:[ココ](https://matsuand.github.io/docs.docker.jp.onthefly/desktop/windows/install/)を参照


* Entitlement key 入手
  IBM Entitled Registry にアクセスしてするための entitlement key を [container soft library](https://myibm.ibm.com/products-services/containerlibrary)から入手していること
入手した entitlement key を以下のように環境変数として登録し、cp.icr.io のレジストリサービスにサインインします。
【Mac】上での操作

    export IBM_ENTITLEMENT_KEY=〈 entitlement key 〉
    echo $IBM_ENTITLEMENT_KEY | docker login -u cp --password-stdin cp.icr.io

【Windows powershell】上での操作

    $Env:IBM_ENTITLEMENT_KEY=〈 entitlement key 〉
    echo $Env:IBM_ENTITLEMENT_KEY | docker login -u cp --password-stdin cp.icr.io

# 2. コードリポジトリ クローン
この[URL](https://github.com/ibm-build-lab/Watson-Speech)(https://github.com/ibm-build-lab/Watson-Speech) にアクセスして、以下のように一連のソースコードをダウンロード。
※コード改変＆プルリクをしていただけるのであれば「git clone」コマンドを使ってください。ただ、今回はソースコードの入手が目的ですので Zip ファイルでソースコードを入手しています。
![スクリーンショット 2023-07-02 16.15.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/3344c1fc-6394-c839-85d6-b0cac13b23db.png)
その後、ダウンロードしたZipファイルをご自身の都合の良い場所で展開し、以下のディレクトリへ移動してください。

    cd Watson-Speech/single-container-stt


# 3. コンテナイメージビルド
移動したディレクトリにはDockerファイルが既にあるので、以下のコマンドを使ってDockerファイルからコンテナイメージをビルドしてください。
このビルドでは、"chuck_var"ディレクトリにある configuration file を使います。
デフォルトでは、事前学習済み２つの言語（en_US:英語、fr_FR:仏語）を用いたモデルを組み込みます。
他の言語を用いたい場合は、Dockerファイルやchuck_varディレクトリにあるenv_config.jsonファイル、sessionPools.yaml ファイルを適宜修正してください。
※初めてイメージをビルドする場合には1時間強時間を要する場合があります。気長にビルドが完了するまでお待ち下さい。m(_ _)m
    
    docker build . -t stt-standalone

# 4. STTサービス開始
#3でビルドしたイメージを使ってコンテナを走らせます。その際、ライセンスが設定されていることを示すため以下のコマンドにあるように"ACCEPT_LICENSE"を"true"としてください。
    
    docker run --rm -it --env ACCEPT_LICENSE=true --publish 1080:1080 stt-standalone

上記コマンドでは、ローカルの1080番ポートにてサービスが提供されるようにしています。


# 5. STTサービス利用
#4にてTTサービスが開始されています。対応言語モデルを確認するため、curlコマンドで以下のURLにアクセスしてみてください。
【Mac】上での操作

    curl "http://localhost:1080/speech-to-text/api/v1/models"

【Windwos powershell】上での操作

    curl.exe "http://localhost:1080/speech-to-text/api/v1/models"

※Windows powershell では、curl コマンドが内部で Invoke-WebRequest コマンドレットとして設定されているため、Mac/Linux と同じ curl を使いたい場合は curl.exe を使います。※参照2


    {
       "models": [
          {
             "name": "en-US_Multimedia",
             "rate": 16000,
             "language": "en-US",
             "description": "US English multimedia model for broadband audio (16kHz or more)",
             "supported_features": {
             "custom_acoustic_model": false,
             "custom_language_model": true,
             "low_latency": true,
             "speaker_labels": true
             },
             "url": "http://localhost:1080/speech-to-text/api/v1/models/en-US_Multimedia"
          },
          {
             "name": "fr-FR_Multimedia",
             "rate": 16000,
             "language": "fr-FR",
             "description": "French multimedia model for broadband audio (16kHz or more)",
             "supported_features": {
             "custom_acoustic_model": false,
             "custom_language_model": true,
             "low_latency": true,
             "speaker_labels": true
             },
             "url": "http://localhost:1080/speech-to-text/api/v1/models/fr-FR_Multimedia"
           }
        ]
    }


次に音源をそのサービスに渡すと音源の中に入っているメッセージがテキスト化されているところを示します。
以下の例では、"sample_dataset"にある英語・仏語音声ファイルをSTTサービスに渡して、音源内のメッセージがテキスト化されていることを示しております。

【英語】

    curl "http://localhost:1080/speech-to-text/api/v1/recognize" \
      --header "Content-Type: audio/wav" \
      --data-binary @sample_dataset/en-quote-1.wav

【仏語】

    curl "http://localhost:1080/speech-to-text/api/v1/recognize?model=fr-FR_Multimedia" \
      --header "Content-Type: audio/wav" \
      --data-binary @sample_dataset/fr-quote-1.wav


## 参考
※1
[Run a Single-Container Speech-to-Text Service on Docker
](https://github.com/ibm-build-lab/Watson-Speech/blob/main/single-container-stt/README.md)

※2
[PowerShell で Curl コマンドを実行する](https://www.delftstack.com/ja/howto/powershell/run-curl-command-via-powershell/)