Help us understand the problem. What is going on with this article?

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

More than 3 years have 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/

Haruka-Ogawa
注意 このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした