5.2.7.1.会話の処理イメージを整理する

1)会話の処理イメージの整理

今までに部品として会話に必要な処理を整理してきました。ここでは、その部品をどのようにつなげることで会話的な処理になるのかを整理します。また、単純な雑談的な会話を実現することは少し難しいので、具体的に依頼した処理を実現するような機能も含めて整理します。

2)会話の処理のフロー

会話の処理のイメージは以下のような感じで進めます。

①~④、⑨、⑩についてはこれまでに作成してきた部品をもとにして対応します。⑥~⑧については新しい機能として処理を作成します。

※青の処理はローカルの処理。オレンジの処理はサーバー等にリクエストして処理を行っているものになります。

では、まず、⑥~⑧の機能を作成します。

 

前の投稿/次の投稿/メニューページへ戻る

3.2.7.表示モードの切替

PowerPointは表示形式を切り替える事ができます。

1.表示の切替

①表示タブをクリック

②プレゼンテーションの表示から表示形式を選択してください

・ノートでの表示はテキスト入力欄があります。ここにこのページに対してのメモを入力する事が出来ます。

・また、ノートとして印刷する事もできます。

 ①ファイルから印刷

 ②【フルページサイズのスライド】から

  【ノート】に変更します。

 ③印刷

これで、テキスト部分を含めた印刷が可能になります。

・閲覧表示はその名の通り閲覧用です。スライドショー

 のようにクリックで次のスライドへ移動する事ができ

 ます。

・閲覧表示から切り替えるにはEscキーで戻る事ができます。

前の投稿/次の投稿/メニューページへ戻る

5.2.6.1.OpenJTalk(日本語/クライアントライブラリ)

1)文字データを声に変える

最近はパソコンやスマートフォンでもすでに文字データを読み上げるよう機能が備わってきています。このような機能を音声合成とか、TextToSpeech等と言っています。今回は、私たちもAIが返事をした内容を発声させます。

今回利用するライブラリーはOpenJTalkです。ローカル環境で稼働する機能となります。

2)ライブラリをインストールします。

[ライブラリー]

sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001

3)下記を順番に入力し音声データをインストールします。

[音声データ]

wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip/download -O MMDAgent_Example-1.6.zip

unzip MMDAgent_Example-1.6.zip MMDAgent_Example-1.6/Voice/*

sudo cp -r MMDAgent_Example-1.6/Voice/mei/ /usr/share/hts-voice

4)プログラムを作成します。[TextToSpeech_Jtalk.py]

5)デバイス番号を確認しプログラムのデバイス番号の指定が同じになっているか確認します。デバイス番号を確認する方法は下記の通りです。

aplay -l

USBスピーカーのカード番号を確認します。カード番号が0番になっている事がわかります。

プログラムのマーカー部分が1番になっているのでこの部分を0番に書き替えしないとエラーになってしまいます。上記の方法で確認したカード番号に書き換えてください。

6)プログラムを実行します。

sudo python3 TextToSpeech_Jtalk.py

・こんにちはと女性の声で聞こえたら完成です。

※先ほど説明しましたが、再生時にスピーカーのカード番号/デバイス番号の指定を間違えないようにしましょう。間違えると再生がエラーとなります。

 

前の投稿/次の投稿/メニューページへ戻る

5.2.5.2.問いかけに返事をもらうプログラムの作成

1)必要なライブラリをインストールします。

sudo pip3 install apiai

2)DialogflowのAgentの画面のAgent名の横の設定マークをクリックし、Generalタブを選択します。その下段の方にある「API KEYS(V1)」の「Client access token」を控えておきます。このキーをプログラムで利用してアクセスします。

3)プログラムを作成します。[Reply_DialogF.py]

「あなたは誰ですか?」という問いかけに対して、実行すると以下のような返答が返ってきます。Dialogflowに設定した内容が取得できます。

※取得できたところで今回は終了です。

 

前の投稿/次の投稿/メニューページへ戻る

 

 

5.2.5.1.Dialogflowの設定

1)Dialogflowとは

 会話のための言語解析機能や応答機能を提供するサービスです。今回はこの機能を利用して、話しかけたことに返答する機能を構築します。

2)Dialogflowの簡単な設定

①Googleのアカウントで下記にログインします。

https://console.dialogflow.com/api-client/#/login

いくつかの許可と同意画面を求められる画面が起動しますので許可/Acceptで進みます。「Please review your account setting」の画面では、画像の赤枠の部分の項目にチェックを入れてください。

・Dialogflowの初期画面が表示されます。

➁Agentの作成

「CREATE AGENT」をクリックして、Agentを作成します。Agentは今回の返答を行う相手だと考えてください。

DEFAULT LANGUAGEにはJapanese-ja、GOOGLE PROJECTではCloud Speech APIの設定をした際のプロジェクトを設定してください(今回はrobotnago)。入力したら「CREATE」ボタンをクリックします。

➂Intentの作成

Intentは会話のパターンだと考えてください。今回はとりあえず、2つのIntentを作成をします。下記の内容をイメージに従って入力。終了したらSAVEボタンをクリックしてください。2つ目を作成するには、再度左の項目のIntentsをクリックします。

①[Intent] Hello

[Training Phrases] 「こんにちは」「やあ」「お疲れ様」「元気?」

[Response]「こんにちは」「元気です」「お疲れ様です」

➁[Intent] WHO?

[Training Phrases] 「あなたは誰?」「名前は」「なんて呼べばいい?」

[Response]「私はナゴロボです。」「ナゴロボ」「ナゴロボって呼んでください。」

・保存できたらテストを行います。 

3)会話テスト

Intentに設定した内容が機能するのかを簡単に確認することができます。右側の「Try it now」のところに「Training Phrases」に入力したものと同じもしくは類似したフレーズを入力してください。Responseに入力した答えが返ってくれば問題なく機能していることになります。

入力するフレーズは必ずしも完全に一致したフレーズでなくても、Dialogflow側で解析/判断して返答を返してくれます。

 

※問題がなければDialogflow側の設定は一旦終了となります。この機能を今度はPythonのプログラム側から利用してみます。

※Dialogflowでは、いろいろな機能が用意されていますが、一旦は機能が利用できることの確認までを今回は行い、今後機能を充実させていく過程で各種設定を整理していくことにします。

 

前の投稿/次の投稿/メニューページへ戻る

5.2.4.4.声を文字変換するプログラムの作成(Google API)

1)Googleのライブラリー(Google Cloud Speech API)を利用して、録音した音声を文字データに変換するプログラムを作成します。

①必要なライブラリをインストールします。

 Googleのライブラリー
sudo pip3 install –upgrade google-cloud-speech   

※upgradeの前のハイフンは2つです。

音声データを取り扱うライブラリー
sudo apt-get install alsa-utils sox libsox-fmt-all 

➂Googleの環境準備で作成したキーをPython3のフォルダーにコピーします。録音した音声データ「voice.wav」も合わせて用意します(前章で何か録音したデータをそのまま利用します。)。

④プログラムを記述します。[VoiceToText_Google.py]

⑤前章で取得したサービスキー名(json形式のファイル名)を入力し、プログラムを実行します。

sudo python3 VoiceToText_Google.py

※文字化したデータとその確度が表示されたらOKです。

 

前の投稿/次の投稿/メニューページへ戻る

5.2.4.3.Googleのライブラリ(Cloud Speech)の利用準備

1)Googleのライブラリーを利用できるようにする

Googleから様々なライブラリーが提供されています。その中に機械学習に関するライブラリが提供されており、簡単に利用することができます。ただし、このライブラリーを利用するにはそのための準備がいくつか必要なためその手順を説明します。

2)利用のための手順

今回の手順はGoogleのアカウント(Gmail)を保有していることを前提として説明します。

手順としては以下の3のステップで行います。

①Google Cloud Platformの無料トライアルの手続きを行う

➁プロジェクトを作成する

➂利用するライブラリー(Cloud Speech API)を有効にする

④ライブラリーをプログラムから利用するためのキーを取得する

では、順番に設定していきます。

 

①Google Cloud Platformの無料トライアルの手続きを行う

・「Google Cloud Console」にアクセスします。(必要に応じてログインします。)

https://console.cloud.google.com

・メニューから「お支払い」をクリックし、「お支払い」画面を起動します。

次に、「請求先アカウント追加」をクリックします。

・「Google Cloud Platformの無料トライアル」の画面が起動しますので、利用規約に同意するに「はい」を選択して「同意して続行する」をクリックします。

・お客様情報を入力します(クレジットカード情報の入力が必要となります。ただし、請求は無料トライアルの範囲では請求されません。また、請求される場合やトライアル終了時には必ず手続きが必要となるので勝手に請求されることはありません。)。入力後、「無料」トライアルを開始」をクリックします。

・無料トライアルが開始されます。「OK」および上部のGoogle Cloud Consoleをクリックすると、もとのConsole画面が起動します。Console画面が起動すれば、無料トライアルの手続きは完了です。

 

➁プロジェクトを作成する

・Google Cloud Consoleを起動する。

https://console.cloud.google.com

・プロジェクトを作成するために、左上の「Google Cloud Console」の文字の横のリストボックスをクリック、プロジェクト選択/作成画面を起動します。

起動後、右上の「+」をクリックするプロジェクトの作成画面が起動します。プロジェクト名を適当に入力して「作成」ボタンをクリックします。

・元のConsole画面に戻るので、左上のリストボックスをクリックすると、作成したプロジェクトがプロジェクト選択画面に表示されるので、選択してください。

 

➂利用するライブラリー(Cloud Speech API)を有効にする

作成したプロジェクトのConsole画面から、真ん中くらいにある「APIの概要に移動」をクリックして、「APIとサービス」の画面を起動します。

・今回利用するライブラリを有効化するために、上部の「APIとサービスの有効化」をクリックして、APIライブラリの画面を起動します。

・左側から「機械学習」を選択し、機械学習に関するライブラリが表示されるので、「Cloud Speech API」をクリックして、「Cloud Speech API」の画面を起動します。

・「Cloud Speech API」の画面が表示されるので、「有効にする」をクリックします。元の画面に戻りますので、Cloud Speech APIが表示されていることを確認して下さい。

 

④ライブラリーをプログラムから利用するためのキーを取得する

APIの画面のメニュー「認証情報」をクリックします。

・「認証情報を作成」「サービスアカウントキー」を順番にクリックします。 サービスアカウントキーの作成画面で新たしいサービスアカウントをクリックします。適当にサービスアカウント名を入力。キーのタイプはJSONを選択して作成ボタンをクリックします。そうするとJSON形式のキーがPCにダウンロードされます(例えば、RobotNago-xxxxxx.jsonのような形式です。)。このキーをプログラムでは利用します。

 

※Google側での設定は以上です。

※新しいAPIを利用する場合には➂のAPIの有効化の操作を都度実施していくことになります。

 

前の投稿/次の投稿/メニューページへ戻る

 

5.2.3.声を録音する

1)目的

ロボットとのコミュニケーションをとるために、まずは人が話したことを聞き取る必要があります。そのための音声の録音機能を用意します。

録音した音声データはwav形式の音声データとして保存します。

 

2)用意するもの

マイク

スピーカー

※ともに、USB接続のもので安価なものを用意します。

 

3)開発手順

①準備

マイク、スピーカーをRaspberry Piに接続します。

 

➁マイクの優先度の確認と設定

terminalを起動し、下記のコマンドで接続したマイクの優先度を確認します。

cat /proc/asound/modules ←マイクの優先度を確認するコマンド

   

snd_usb_audioがUSB接続となることから、USB接続の優先度を上げる設定を行います。上記の図では現在優先度が1なので0に優先度を上げます。0から順にマイクの優先順位が決まります。

下記のコマンドで設定ファイルを編集します。存在しない場合は新規に作成します。設定ファイルを作成する場合にも下記のコマンドで作成/編集する事ができます。

sudo nano /etc/modprobe.d/alsa-base.conf 

下記の設定を記述します。(存在しない場合は同じ内容を入力してください。)

options snd slots=snd_usb_audio,snd_bcm2835

options snd_usb_audio index=0

options snd_bcm2835 index=1

保存したら、記述が反映されているか確認します。

 sudo cat /etc/modprobe.d/alsa-base.conf

確認出来たら、Raspberry Piを再起動します。

再起動後、再度マイクの優先度を確認します。

cat /proc/asound/modules

snd_usb_audioの優先度が上がっていることを確認します。

 

➂ライブラリとしては以下のコマンドでインストールします

sudo apt-get install portaudio19-dev             ←今回利用するライブラリ関連

sudo pip3 install pyaudio                                 ←今回利用するライブラリ

 

④録音用のシンプルなプログラムを記述して、実行します。

[ファイル名]Rec_Voice.py

[プログラム]

⑤プログラムの実行

プログラムの実行は下記のコマンドで実行してください。

sudo python3 Rec_Voice.py

 

プログラムを実行しマイクに話しかけてください。

プログラム終了後、Python3のフォルダーに下記の音声ファイルが保存できていれば、成功です。

うまく録音できると、フォルダプログラムを実行したフォルダ内にvoice.wavというファイルができるので下記のコマンドで再生してみましょう。録音ができていれば完成です。

aplay voice.wav ←音声を再生するコマンド aplay 音声ファイル

上記のコマンドで再生できない場合、スピーカーのカード番号を確認してください。

aplay -l ←スピーカーのカード番号を確認するコマンド

USB Speakerのカード番号を確認します。下記の図を見るとカード番号が2番になっています。音声を再生するコマンドに今度はカード番号を指定して再生してみてください。

aplay -D plughw:2 voice.wav ←カード番号を指定し再生するコマンド

aplay -D plughw:[カード番号]  [音声ファイル]でカード番号を指定し、再生する事ができます。

録音は以上です。

※録音にあたってのパラメータは設定が難しいので、細かく理解するというよりはとりあえず、録音できればOKとして先に進みましょう。

※マイクの感度が悪い場合には以下のコマンドでマイクの確認を行い、感度を調整しましょう。

下記のコマンドで、マイクデバイスのカード番号を確認しましょう。

arecord -l

カード番号が0番ということが確認できます。

次に0番のマイクの設定状況を以下のコマンドで確認します。

amixer sget Mic -c 0

音量が0-62の範囲で、最大の62であることがわかります。この数値を6~7割くらいに設定しておきましょう。

下記のコマンドで45/62で設定をします。

amixer sset Mic 45 -c 0

前の投稿/次の投稿/メニューページへ戻る

2.3.2.ユーザー関数(2)

関数を作成する際に、プログラムで利用できるさまざまな関数が用意されています。

また、Excel上で利用できる関数もプログラムの中で利用することができます。

下記と同じプログラムを記載し、関数名を少し変えて動くかどうかを確認してみましょう。

・「Len(文字データ)」は文字データの文字数を返す関数です。

・「Vlookup」はExcelのワークシート関数。利用する場合には、Application.関数名として利用可能(利用できない関数もあり)です。利用の際には引数に入れるデータについて考慮が必要な場合があります。

・今回の引数はRangeデータ形式です。Excelシートのセル(もしくは複数セル)を引数としています。Rangeというデータ形式はExcel独特のデータ形式です。

【IF関数の処理】

Excelの関数でもプログラム的な動きをするものがあります。

左記のIF関数は条件が真(True)の場合、偽(False)の場合で処理を変更することが可能です。ただし、複雑なものを記述しようとすると複雑になり、何の処理をしているのかが混乱し、わかりにくくなってしまいます。

ユーザー関数やマクロ等ではこれと同じようなことをプログラムを記述して実現します。ただし、より複雑な処理をわかりやすく記載することができます。

【複雑なユーザー関数(条件分岐処理)】

より複雑なユーザー関数を作成するためには少しプログラム的な記述を行う必要があります。

その際の基本となるのは、

 条件分岐処理(特定の条件毎に違う処理を行う)

 反復処理(複数回、反復して処理を行う)

になります。

まず、条件分岐処理ですが、例えば、ある数字が奇数であれば、奇数、偶数であれば偶数という文字を返す関数を作成します。

If 「条件」 then

    「処理を記載」

Else

 「処理を記載」

End IF

【複雑なユーザー関数(反復処理)】

反復処理(For Each x in y)

例えば、引数としてある範囲のデータを与えて、各データを2乗して、すべて足した答えを返します。

処理順序として

aがセル”E3”の場合

  kotae=0

  0+28の2乗=784

aがセル”E4”の場合

  kotae=784

  784+58の2乗=4,148

aがセル”E14”の場合

  kotae=22,847

  22,847+38の2乗=24,291

ここまで反復して、処理が終了します。

前の投稿/次の投稿/メニューページへ戻る

2.3.2.ユーザー関数(1)

Excelでは、さまざま関数が提供されています。関数は処理を単純化するのに役立つとともに、Excelの表計算を見やすくすることができます。

このような関数をユーザーが自由に開発することができる機能が提供されています。

まず、簡単なユーザー関数を作成しましょう。

ユーザー関数を記述するための画面を起動します。

 

【ユーザー関数を使うための準備】

①ユーザタブから開発を選択し、Visual Basicを選択。Microsoft Visual Basic for Applicationsの画面を起動します。

②プロジェクトのエリアを選択して、右クリックし、メニューから挿入/標準モジュールを選択します。

③右側のグレーなエリアにModule1という画面が表示されると、関数を作成する準備ができたことになります。

【ユーザー関数を作成する】

①まずは、単純にコードの記述を写して記述してみてください。

②次に標準モジュールの名前をプロパティのオブジェクト名をUserKansuと修正して、名称を変更し、保存します。これで、Excel上で他の関数と同様に利用することができます。

③これで、Excel上で他の関数と同様に利用することができます。

④保存する場合には、拡張子はxlsmで保存する必要があります。xlsxのまま保存すると、プログラム部分は保存されません。

前の投稿/次の投稿/メニューページへ戻る