Node.js
Bluemix
Watson
SpeechToText

Speech To Text で音声認識してみた

More than 1 year has passed since last update.

1. はじめに

Speech To TextはIBM Bluemixから提供されている音声認識APIです。
このAPIを使用することで、音声から文字を書き起こすことができます。

今回は、Speech To TextとNode.jsを使用して、簡単な音声認識システムの開発を行います。

2. 準備

開発の前に、以下のものを準備してください。

  • Bluemixのアカウント

Speech To Textを利用するには、Bluemixのアカウントが必要になります。
アカウント作成は、以下のリンク先で行います。

Bluemix ログインページ
https://console.bluemix.net/

  • Node.js開発環境

公式サイトからNode.jsをダウンロード・インストールしてください。

Node.js 公式サイト
https://nodejs.org/en/

  • 音声ファイル

音声認識に使用する音声ファイルを準備してください。
今回は、wav形式の音声ファイルを使用します。

3. 開発

3-1. Speech To Textサービス追加

Speech To Textサービス利用するため、Bluemix上でサービスを追加します。
また、後ほど"username"と"password"の資格情報が必要になりますので、それらの情報を確認します。

手順は以下の通りです。

① カタログでSpeech To Textを検索し、サービスを作成する

Qiita2.png

② ダッシュボードのサービス欄にて、Speech To Textをクリックし、サービスの詳細画面を開く

Qiita3.png

③ サービス資格情報を開き、"username"と"password"を確認する

Qiita1.png

3-2. Node.jsによるコーディング

Speech To Textを使用して、簡単な音声認識ツールを作成します。
このツールでは、音声ファイルを読み込み、認識結果をコンソールに表示するようにします。

・開発用ディレクトリの作成

開発用のディレクトリを作成します。
以下の作業は、主にこのディレクトリ配下で行います。

・npmパッケージ導入

必要なnpmパッケージをインストールします。
今回は、以下の2つのパッケージを使用します。

パッケージ 説明
watson-developer-cloud Watson Developer Cloudサービスが使用できる
fs ファイルの読み書きや操作ができる

以下のコマンドでパッケージをインストールします。

> npm install パッケージ

インストールしたモジュールを使用するには、require()でモジュールを読み込みます。

var fs = require('fs');
const watson = require('watson-developer-cloud');

・認証

Speech To Textを使用するには、サービス資格情報に提供されているユーザー名とパスワードを入力して認証を行います。
ここでは、先程サービスの作成にて確認した、ユーザー名とパスワードを指定します。
※Bluemixアカウントのユーザー名とパスワードとは異なります。

var SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
var speech_to_text = new SpeechToTextV1({
    username: 'ユーザー名',
    password: 'パスワード'
});

・パラメータ設定

パラメーターを設定します。
今回は、以下の3つの項目を設定します。

設定パラメータ 説明
model 音声認識に使用されるモデル

英語(US)のブロード・バンドモデル(en-US_BroadbandModel)がデフォルト.
日本語のモデルは、ja-JP_BroadbandModel と ja-JP_NarrowbandModelが使用可能.

【使用可能な言語】
英語 (US)、英語 (UK)、日本語、アラビア語 (MSA、ブロードバンド・モデルのみ)、北京語、ポルトガル語 (ブラジル)、スペイン語、フランス語 (ブロードバンド・モデルのみ)
audio 音声ファイル
content_type 音声データのMIMEタイプ

以下のタイプが使用可能.
・audio/flac 
・audio/mp3 
・audio/mpeg
・audio/l16 
・audio/wav 
・audio/ogg 
・audio/ogg;codecs=opus 
・audio/ogg;codecs=vorbis 
・audio/webm 
・audio/webm;codecs=opus 
・audio/webm;codecs=vorbis 
・audio/mulawv
・audio/basic

上記以外にも、パラメータが存在します。
パラメータについて、詳細はSpeech To TextのAPIリファレンスをご参照ください。

Speech To Text APIリファレンス
https://www.ibm.com/watson/developercloud/speech-to-text/api/v1/

ソースコード上では 以下のようにしてパラメータの設定をします。

var params = {
    model: '音声認識モデル',
    audio: fs.createReadStream('音声ファイル名'),
    content_type: '音声ファイルのタイプ',
};

・音声認識

設定したパラメータを用いて、音声認識を実行します。
今回、音声認識結果は、コンソール上に表示されるようにしています。

speech_to_text.recognize(params, function (error, transcript) {
    if (error)
        console.log('Error:', error);
    else
        console.log(JSON.stringify(transcript, null, 2));
});

ソースコード例

作成したコード(test.js)が以下の通りになります。

test.js
var fs = require('fs');
const watson = require('watson-developer-cloud');

var SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
var speech_to_text = new SpeechToTextV1({
    username: 'ユーザー名',
    password: 'パスワード'
});

var params = {
    model: 'ja-JP_BroadbandModel', // 日本語-ブロードバンドを使用
    audio: fs.createReadStream('./wav/sample.wav'), // 音声ファイル./wav/sample.wavを音声認識する
    content_type: 'audio/wav' //wavファイルを使用
};

speech_to_text.recognize(params, function (error, transcript) {
    if (error)
        console.log('Error:', error);
    else
        console.log(JSON.stringify(transcript, null, 2));
});

4. 実行

コンソール画面から、test.jsを実行します。
test.jsのあるディレクトリに移動し、以下のコマンドを実行してください。

> node test.js

しばらく待つと、コンソール画面に音声認識結果が表示されます。

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.461,
          “transcript”: “こんにちは 今日 は 良い天気 です ね "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0
}

"transcript"に読み込ませた音声から書き起こしたスクリプトが表示されます。
また、"confidence"には"transcript"の信頼度が0~1の間の数値で示されます。

参考

Speech to Text Demo
https://speech-to-text-demo.mybluemix.net/

Speech To Text APIリファレンス
https://www.ibm.com/watson/developercloud/speech-to-text/api/v1/