【Bluemix】Node-REDのWatsonを使って音声をテキストに変換してみる

スポンサーリンク

Bluemixを使って開発環境(.php)を構築してみるの続き。

Bluemixで提供されているNode-REDを使って音声をテキストに変換してみます。変換にはWatsonと呼ばれるシステムを使用します。
BluemixNode-REDを使うと、「視覚的」に分かりやすく「直感的」に組むことができて感動しました。

Watsonとは?

兎にも角にもWatsonとは??

ワトソン(英語: Watson)は、IBMが開発した質問応答システム・意思決定支援システムである。
『人工知能』と紹介されることもあるが、IBMはワトソンを、自然言語を理解・学習し人間の意思決定を支援する『コグニティブ・コンピューティング・システム(Cognitive Computing System)』と定義している。
(wikipediaより)

今まで私は、Watsonを人工知能だと思っていたのですが違うみたいです。正確には、コグニティブ・コンピューティング・システム(Cognitive Computing System)と呼ぶみたいです。時代もここまで進んだんだなぁ〜と変な話思いました。

Node-REDをBluemix上に作成

Node-REDを使えるように設定します。
まずBluemixの管理コンソールへログインして「カタログ」をクリックします。
スクリーンショット_2016-01-27_1_20_34

「カタログ」ページ内にある「ボイラープレート」カテゴリーの「Node-RED Starter」をクリックします。
スクリーンショット_2016-01-27_1_26_51

「Node-RED Starter」にて「Node-RED」の詳細設定をします。
詳細設定では「Node-RED」の名前とホストを入力します。ホストは名前に連動して入力されます。入力が終わったら「作成」ボタンをクリックします。
スクリーンショット_2016-01-27_1_31_25

Node-REDの作成が開始されます。
スクリーンショット 2016-01-27 1.31.51

アプリは稼働しています。」と表示されたら完了です。これで作成が完了しました。
スクリーンショット 2016-01-27 1.36.02

Twilioを使って音声録音し、Node-REDに送信

音声はTwilioという「電話を操作できるAPI」を使って生成します。
ん?Twilio?という方は、第1回 Twilioとは をご参考ください。

Twilioの機能を使うためには会員登録が必要です。
会員登録については、第2回 Twilioのアカウント登録方法 をご参考ください。

音声の生成はTwilio APIにある「Record」という機能を使います。
興味のある方は、 第6回 Twilioで発信者の音声を録音してみる をご参考ください。

Twilioを使った音声録音プログラムの作成

Twilioを使って音声を録音するプログラムをPHPで書きます。ここではrecord.phpというファイル名にしましたが好きな名前で大丈夫です。

record.php

<?php
    // your_application_name:bluemixで作成したアプリケーション名を入力してください。
    $app2url = "http://your_application_name.mybluemix.net/record";
    
    // +81xxxxxxxxxxには、「あなたの携帯番号」を入力してください。
    // your nameには、「あなたのお名前」を入力してください。
    $people = array(
                    "+81xxxxxxxxxx"=>"your name"
                    );
    
    header("content-type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>

<Response>
<?php if(!$name = $people[$_REQUEST['From']]) { ?>
    <Say language="ja-jp" voice="woman">お電話ありがとうございます。こちらはトゥイリオシステムです。発信音の後にご用件をお話しいただき、しばしそのままでお待ち下さい。</Say>
    <Record action="<?php echo $app2url ?>" method="POST" maxLength="60" />
    <Say language="ja-jp" voice="woman">申し訳ありません。もう一度お掛け直しください</Say>
<?php } else { ?>
    <Say language="ja-jp" voice="woman"><?php echo $name ?>さんこんにちは。どうなさいましたか。</Say>
    <Record action="<?php echo $app2url ?>" method="POST" maxLength="60" />
    <Say language="ja-jp" voice="woman"><?php echo $name ?>さん申し訳ありません。もう一度お掛け直しください</Say>
<?php } ?>
</Response>

内容はTwiMLというTwilioの独自言語を使って音声を録音するようにしています。TwiMLに関する説明も 第1回 Twilioとは に載せていますのでご興味の有る方は是非。

3行目にある $app2url に送信先のNode-REDのURLを入力します。正しいURLを入力しないと動かないのでご注意ください。

7行目にある配列は、発信者の名前と電話番号を結びつけています。これにより、電話がかかってきた時に発信者の名前を再生することが可能になります。実際に再生させている箇所は21行目と23行目です。

11行目からTwiMLの記述を開始します。TwiMLはxmlで書く制約があります。なので、headerを使ってrecord.phpをxmlとして吐き出すように設定しています。あとはSayRecordという命令を使ってガイダンスの再生・音声の録音を行います。

record.php(TwiML)とTwilio番号にひも付け

電話をかけたらrecord.phpを実行させるように番号とプログラムのひも付けを行います。ひも付けを行う前にアカウントの登録をしてTwilio番号を発行しておく必要があります。
ひも付けはTwilioの管理コンソールから可能です。

詳しくは 第3回 Twilioで電話アナウンスを作成 をご参考ください。
上記のURLでは、電話がかかってきた時のリクエスト先URLが

http://example.com/hoge.xml

ですが、私の場合は、、、

http://example.com/record.php

になります。
※example.comやrecord.phpまでのパスは皆さんの環境にあわせる必要があります。

これで取得したTwilio番号にダイヤルをするとrecord.phpが実行されるようになりました。

Node-REDのコンソール画面にアクセス

作成されたNode-REDのコンソール画面にアクセスします。作成完了画面に表示されているNode-REDのURLをクリックします。
スクリーンショット_2016-01-27_1_36_02

下記、Node-REDの専用ページへ遷移します。
スクリーンショット_2016-01-27_1_50_12

下記がNode-REDのページです。右の白のキャンバスに必要なNodeを左から選択してつなげていきます。
スクリーンショット 2016-01-28 14.20.22

Watsonを使って音声をテキストに変換

それでは、Node-REDでTwilioから送信された録音データを取得してテキストに変換してみましょう。

Node-REDでTwilioから送信された録音データを取得

Twilioの録音データを受け取るために「httpノード」を選択して右のキャンバスに配置します。
スクリーンショット_2016-01-28_14_25_42

設置した「httpノード」をダブルクリックして値を入力していきます。
スクリーンショット_2016-01-28_14_30_20

さらに録音データが正常に送信されてきているか「debugノード」を使用して結果を見ていきます。
スクリーンショット_2016-01-28_14_49_05

後は、設置したノードとノードを繋げます。これで処理がつながります。
スクリーンショット_2016-01-28_14_50_49

最後に設定を反映するために画面右上の「Deploy」をクリックします。
スクリーンショット_2016-01-28_14_50_49

DeployしたらTwilio番号に電話をかけてみましょう。かけたら、Node-REDのdebug結果を見てみましょう。

すると、、、
スクリーンショット_2016-01-28_16_29_18
バッチリ「debug」メニューの中にPOST情報の結果が出力されました。

Watsonを使って録音データをテキスト出力

取得したPOST結果から録音データを抽出します。
実際の録音データはdebugから分かるように「”RecordingUrl”:”https://api.twilio.com/2010-04-01/Accounts/◯●◯●◯●◯●◯●◯●◯●◯●◯●◯●”」の部分に当たります。この部分を「Functionノード」を使って抽出します。
スクリーンショット_2016-01-28_16_50_51

「Functionノード」をダブルクリックして詳細設定をします。functionには下記のように入力します。ノード間のやり取りはmsgというキーの値としてやりとりされており、msg.payload配下にPOSTパラメータは設置されるようです。
今回の場合「RecordingUrl」が欲しいので、「msg.payload.RecordingUrl」というように書きます。取り出した内容をmsg.payloadに代入し、msgを返します。
スクリーンショット 2016-01-28 16.55.19

「recordノード」と「getRecordingUrlノード」をつなげてPOST情報を「getRecordingUrlノード」に渡します。
スクリーンショット_2016-01-28_17_02_35

ここでも「getRecordingUrlノード」でRecordingUrlを正常に取得出来ているかどうか「debugノード」を使って確認します。
スクリーンショット_2016-01-28_17_26_01

「debugノード」と繋げた後は先程と同じように「Deploy」します。
「Deploy」した後、もう一度Twilio番号に電話をかけてみましょう。

すると、、、
スクリーンショット_2016-01-28_18_56_09
debugでRecordingUrlの取得が確認できました。

これで音声データの取得までができました。いよいよWatsonを使って音声をテキストに変換してみます。「speech to textサービス」をNode-REDに追加します。「Node-RED」のアプリケーション名をクリックして詳細設定画面へ遷移します。
スクリーンショット_2016-01-28_20_01_30

遷移した先にある「+サービスまたは API の追加」をクリックします。
スクリーンショット_2016-01-28_19_59_03

カタログから、Watsonの「Speech To Text」を選択します。
スクリーンショット_2016-01-28_20_05_13

「作成」ボタンをクリックします。
スクリーンショット 2016-01-28 20.07.54

作成後、Node-REDの再ステージングがはじまるので待ちます。

再ステージングが終わったら、Node-REDに戻って「speech to textノード」を右のキャンバスに配置します。
スクリーンショット_2016-01-28_19_02_16

「getRecordingUrlノード」と「speech to textノード」を繋げます。
スクリーンショット_2016-01-28_19_06_27

音声がテキストに変換されているか「debugノード」を繋げます。
スクリーンショット 2016-01-28 19.10.44

「speech to textノード」と「debugノード」の詳細設定をします。

「speech to textノード」では下記のように入力します。
Languageを「Japanese」にQualityを「Narrowband(>=8Khz)」に設定します。
スクリーンショット 2016-01-28 20.13.08

「debugノード」では下記のように入力します。注意する箇所は、「msg.transcription」の部分です。今までは、「msg.payload」のデータを扱っていましたがWatsonの場合は取り出すデータ構造が違います。
スクリーンショット 2016-01-28 20.16.04

これで完了です。再度、Twilio番号に電話をかけてみましょう。
Twilioに対して「こんにちは。岩崎です。」と話しかけました。

結果は、、、
スクリーンショット_2016-01-28_20_25_48
バッチリ話しかけたことがテキストに起こされました。素晴らしい。

少し長くなりましたがバッチリ音声をテキスト変換することができました。IBMさんの技術には脱帽です。。。音声をテキストに起こすことを応用すると様々なサービスシーンで使えそうですね。

参考文献

ワトソン
【Twilio勉強会 with Bluemix in 福岡】 電話のボタン応答無しで!?音声認識による自動回答サービスを作ろう!

スポンサーリンク
スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク

コメント

  1. 江藤政親 より:

    はじめまして、江藤と申します。
    弊社もwatsonを活用しビジネス展開を考えたいと思っているのですが、何が出来て何ができないのかさっぱりわからず、技術講習やコンサルなどをお願いできないかと思い連絡させていただきました。
    ご検討よろしくお願いします。
    eto1@etocomi.com

      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
      ■株式会社ECコンサルカンパニー 代表取締役 
       一般社団法人日本Eコマースコンサルタント協会 専務理事
        江藤 政親(えとう まさちか)
      〒105-0013 東京都港区浜松町2-2-3 磯山ビル3F
      (TEL) 03-5776-4900 (FAX) 03-5776-4901
      (URL) http://www.eccc.co.jp
     ———————————————————-

    • iwahei0813 より:

      江藤さま

      はじめまして。コメントありがとうございます。
      実は私も江藤さまと同じで「watson」を使って何かできないか模索中でして、様々な文献やインターネットの情報を漁っては勘案するような身です。
      せっかくお誘い頂いたのですが、まだまだ勉強不足のためご期待に添えることが難しそうです。大変申し訳ございません。

      別件で大変恐縮ですが、東京では「watson」などBluemixを使ったハンズオンなどのイベントが定期的に開催されているようです。
      【Bluemix User Group Facebookページ】 https://www.facebook.com/groups/bmxug/
      こちらのBluemix User GroupのFacebookページに参加されると、様々な最新情報を受け取ることができます。
      ためになるトレンドな情報が満載ですのでよければ是非登録してみてください。