5.4.5.3.RaspberryPiから中継サーバーを利用し翻訳できるようにする

今回、作成した中継サーバーをデプロイし、第三者がインターネットから中継サーバー利用できるようにするためにHerokuというサービスを利用します。

Herokuとは、Paas(Platform as a Service)と呼ばれるサービスで、アプリケーションを実行するためのプラットフォーム(動かすための土台となる環境)です。まずは、Herokuにデプロイする為の準備を行います。

 

【デプロイ用のHeroku関連の環境準備】

1)Herokuを利用できるようにするために、Herokuへアカウントの作成します。(Heroku側作業)

①下記のURLへアクセスし、無料で新規登録ボタンをクリックします。

https://www.heroku.com/

②情報を入力し、無料アカウント作成ボタンをクリックします。

③登録したアドレス宛にConfirm your account on Herokuという登録のメールが届くので、リンクをクリックし、パスワードを設定します。

 

2)次に、Herokuへ作成/開発したアプリケーションをデプロイするためのクライアントの環境を整えます。(クライアントPC側作業)

ツール関連のインストールをおこないます。

Heroku Toolbeltのダウンロード/インストール

①下記のURLへアクセスします。

https://toolbelt.heroku.com/

②PC環境に合ったものをダウンロードします。

③ダウンロードしたHeroku Toolbeltをインストールします。

 

Gitのインストール

①下記のURLからGitをダウンロードし、インストールします。

https://git-for-windows.github.io/

ここまでで、デプロイするためのHeroku側作業及び作業用のクライアントPC側の環境が整いました。

 

【作成/開発した中継サーバーのデプロイ作業を行います。】

Herokuにアプリケーションの作成(Heroku側作業)

①Heroku(https://www.heroku.com/)にアクセスし、「Create New App」をクリックします。画面が切り替わったら、「App name」にアルファベットで好きな名前を入力してください。(大文字は使用できません。)入力した名前の下に緑色の文字で「available」と表示されていたら使用できる文字列なので、「create app」をクリックします。

 

次に、クライアントPCから中継サーバーのアプリケーションを、Heroku側に作成したアプリケーションに対してデプロイします。(クライアント側作業)

クライアントPC上の中継サーバーのアプリケーションファイル群を以下の手順でデプロイします。

①デスクトップ上にHerokuで作成したアプリケーション名と同じ名前のフォルダを作成します。

②Google_APIに入っている中継サーバーのアプリケーションファイル群をすべて①で作成したフォルダに移動します。

➂コマンドプロンプトを起動し、以下の手順に沿って最後までコマンドを実行すると、デプロイが完了します。

heroku login

cd アプリケーション名

git init

heroku git:remote -a アプリケーション名

git add .

git commit -am “コメント”

git push heroku master

まで終了したらデプロイの完了です。

※Herokuのアプリケーションを作成したサイトに下記のような手順が記載されています。参考にしてください。

 

【デプロイした中継サーバーの稼働確認】

デプロイが正常に出来ているかを稼働確認を行います。

①デプロイされた中継サーバーのURLを確認/取得します。

Herokuに作成したフォルダ内のsettingsタブに移動し、「Domains and certificates」のDomainに表示されています。

②5.4.7.で作成した「Translate_GoogleviaN.py」を中継サーバーにアクセスするMyurlのURL部分を①取得したURLに変更します。

※中継サーバー(翻訳機能)の取得したURL+「/translate」となります。ローカル環境で確認設定した際と同様の手続きです。

③Raspberry Pi Zero上で、修正したTranslate_GoogleviaN.pyを実行します。

Helloと返ってきたら中継サーバーのデプロイの成功です。Translate_GoogleviaN.pyは関数としての利用も可能です。

 

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

 

 

5.4.5.2.中継サーバーの開発

Windows上でのNode.jsの環境設定ができたので、実際にNode.jsでJavaScriptを使ってプログラムを作成し、ローカル環境で動くか試してみましょう。

1)中継サーバーの作成

①プログラムを記述します。プログラムは、Google_APIのフォルダ内にあるroutesに「Translate.js」というファイル名で保存してください。

*プロジェクトIDにはGoogle Cloud PlatformのプロジェクトIDを記述します。

*サービスキーにはGoogle Cloud Platformで作成したサービスキーのファイル名を記述します。

[Translate.js]

③Google_API直下にあるapp.jsの修正を行います。Translate.jsのプログラムを呼び出す処理を記述します。

下記の図の「追加」部分を2か所、記述してください。

これで、中継サーバーの作成が完了です。(翻訳用)

 

2)Pythonを使ってローカル環境での中継サーバーの稼働確認

確認用のPythonのプログラムを作成します。

プログラム内でアクセスするurlは今回開発した中継サーバーのurlを指定します。

[Translate_GoogleviaN.py]

確認用プログラムが作成できたら、稼働確認を行います。

 

中継サーバーを起動します。

npm start

 

Pythonのプログラムを実行します。

Pythonプログラムの実行は、Python IDLEでプログラムを開き、実行するか、新しくPython実行用にコマンドプロンプトを起動し、コマンドで実行してください。

「Hello」と結果が返ってくれば成功です。

IDLEからの実行

 

中継サーバーのコマンドプロンプトの画面でも同様に実行結果を確認することができます。

 

これで、中継サーバーの作成/開発は終了です。

 

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

5.4.5.4.翻訳機能をBrainActionへ組み込む

翻訳機能「Translate_googleviaN.py」をBrainAction.pyへ組み込みを行います。

組み込み処理は下記のプログラムを修正します。修正を行う前にバックアップをデスクトップに保存しておいてください。

1.NagoRobo_Main.py

2.BrainAction.py

【NagoRobo_Main.pyの修正】

中継サーバーのURLを入力する変数を用意し、中継サーバーのurlをセットします。「Herokuで取得したurl+/Tlanslate」を赤線部分に入力します。

[NagoRobo_Main.py]

【BrainAction.pyの修正】

BrainAction.pyへ組み込み処理を行います。

インポートを追加します。下記の「ここから–ここまで」の部分を追記します。NagoRobo_Main.pyからurlを受け取る処理です。

[BrainAction.py]

Action_2ndの「ここから–ここまで」の処理を修正します。Translate_Google.pyとTranslate_GoogleviaN.pyのプログラムは関数名が同じですのでTranslate_Google.pyはコメントアウトしてます。また、Translate_GoogleviaN.pyの関数には引数としてGoogle_urlをセットするようにします。

これでプログラムの修正は完了しました。

【Dailogflowに翻訳のIntentsを作成する】

DailogflowのIntentsの設定まで完了したらプログラムを実行し、確認してみましょう。

①NagoRobo_Main.pyを実行します。

②Raspberry Piに「翻訳」と話しかけます。

③「翻訳します。」と返ってきたら、翻訳したい言葉を伝えます。

④英訳されて返ってくればOKです。

 

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

5.4.4.雑談機能の充実②(docomo API 雑談機能)

[docomo API 雑談機能をBrainAction.pyへの組み込む]

今回はより雑談のバリエーションを増やす為にdocomo APIの雑談機能をBrainAction.pyへ組み込んで行きます。Dailogflowに設定がない時にdocomo API の雑談機能を使って返答が返ってくるようにしましょう。

①BrainAction.pyのプログラムにGConversation_docomo.pyのプログラムを組み込みます。BrainAction.pyを開いてください。

※BrainAction.pyを開く前にバックアップとして、コピーをラズベリーパイのデスクトップ上に保存しておきましょう。

[BrainAction.py]

②インポートの追加。赤線部分の記述を追加してください。

③docomo API で返答後にflgを初期化する処理「ここから—ここまで」の記述を追加

④マッチングスコアのチェックを行うプログラムを修正する(「ここから—-ここまで」の部分が修正後の内容です。)

マッチングスコアが0.8未満だとdocomo APIの雑談プログラムを呼び出すようにしました。また、呼び出し後に処理を抜け③にてflgの初期化を行います。

⑤修正が完了したらプログラムを実行して確認してみましょう。

sudo python3 NagoRobo_Main.py

Dialogflowで未設定のフレーズで問いかけてみてください。

 

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

5.4.3.雑談機能の充実①(DialogflowのIntent追加)

今回は、Dialogflowを使って雑談機能を充実させます。。5.4.1でdocomo のAPIを使って雑談するプログラムを作成しましたが、最終的にはDialogflowとdcomo APIのプログラムを使ってより多くの雑談ができるようにしていきます。

[Dialogflowの設定]

下記の表は新たに追加する雑談用のIntentsです。

※下記はPROMPTS、PARAMETER NAME、ENTITIESの設定がないので省いています。

 

[Intentの追加]

Intentの追加をFeeling_Angerを例に作成していきます。

①Training phrasesに怒りを表すフレーズを設定します。

②Responsesには怒りのフレーズに対する返答を入力します。

③Try it nowにて怒りのフレーズに設定したResponsesが返ってくるかテストしてみてください。返ってくれば設定完了です。

同じ要領で残りのIntentsも設定していきます。

※IntentsのAction_Timeを作成する前にTimeというEntitiyを追加してください。

TimeのEntitiyの追加を行ったらAction_Timeのを作成していきます。の部分にアクションを判断するワードと、にPARAMETER NAMEを設定します。

Responsesは下記の通りに設定してください。

③Dialogflowの設定が終了したら、NagoRobo_Main.pyを実行し、新たに追加したIntentsの内容に沿って返答が返ってくるか確認してみましょう。

 

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

5.4.2.自然対話:知識検索の追加(docom API)

前章(5.4.1)にて自然対話:雑談機能のAPIの追加と雑談プログラムを作成しました。今回は新にdocomo Developer supportから自然対話:知識検索のAPI機能を追加し、質問すると回答が返ってくるプログラムを作成します。

①自然対話:知識検索

API機能の追加方法は前章(5.4.1)と同じですので、今回は省きます。前章を確認しながら行ってみてください。

[知識検索を利用したプログラムの作成]

①仮想環境を起動します。

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

③プログラムに前章で取得したappIdとAPIキーを入力してください。

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

sudo python3 QA_docomo.py

⑤プログラム上で「大化の改心はいつ?」という質問しています。プログラムを実行すると問いに対する答えが返ってきます。

[BrainAction.pyへの組み込み]

今回は作成したプログラムを「ロボットの頭脳を作る」で作成した「BrainAction.py」のプログラムに組み込む所まで行ってみましょう。

①まずは、Dialogflowの設定を行います。下記の図のようにIntents名「Action_Question」を作成します。

赤丸部分の3点を同じように入力して作成してください。今回はEntitiesの作成は必要ありません。

・Training phrases 「質問します。」

・Action and parameters 「question」

・Responses 「質問してください。」

②次にBrainAction.pyのプログラムにQA_docomo.pyのプログラムを組み込みます。

※プログラムを修正する前にBrainAction.pyのバックアップをラズベリーパイのデスクトップにコピーし貼り付けしておいてください。

[BrainAction.py]

③まずは、BrainAction.pyのプログラムにQA_docomo.pyのプログラムをインポートする処理を記述します。 

④次に「ここから–ここまで」の目印の部分を追記します。ここではDailogflowからactionが受け取れているかチェックを行います。

⑤Action_2ndの「ここから–ここまで」の部分にQA_docomo.pyの関数を呼び出し、音声を発声させる処理を追記します。

⑥NagoRobo_Main.pyのプログラムを実行します。

※「質問します。」に「質問してください。」と返答があれば「大化の改心はいつ」と質問してみてください。返答が返ってこれば完成です。

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

5.4.1.自然対話:雑談機能の追加(docomo API)

5.2.4.1の章にて音声認識のAPIの申請を行いました。今回は新たな機能のAPI申請を行います。

①自然対話:雑談対話

  1. docomo Developer supportのマイページへログインしてください。https://dev.smt.docomo.ne.jp/                          
  2. 登録アプリケーションAPI一覧へをクリック                                                                                                                                                               
  3. API利用申請:管理のページへ遷移しますので、アプリケーション名をクリックしてください。                                                                                                                                                                                            
  4. 申請状況のページへ遷移しますので、API機能を追加申請するをクリックします。                                                 
  5. API機能を追加申請するをクリックするとAPI利用申請:追加利用申請の画面へ遷移します。次にAPI機能選択へをクリックしてくだい。                                                            
  6. 必要な機能にチェックを入れ、利用するAPIの利用規約に同意して、次へをクリックします。確認画面が表示されますので申請を行います。                                                     
  7. 申請が完了するマイページの詳しくはこちらから確認する事ができます。      

以上で、APIキーの追加利用申請は完了しました。実際にAPIキーを利用してラズベリーパイ上で雑談機能のプログラムが動くか確認してみましょう。

①仮想環境を起動します。

②自然対話は利用するためのユーザー情報を登録するためのエンドポイントが必要です。下記のプログラムを実行し、appIdを取得してください。

[GetMyappId.py]

プログラムを実行するとappIdが返ってきます。赤い下線部に記載されてますのでappIdを保管するようにお願いします。

③appIdを取得したら、自然対話:雑談対話のプログラムを作成します。

[GConversation_docomo.py]

④プログラムに取得したappIdと申請したAPIキーを入力してください。

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

sudo python3 GConversation_docomo.py

返答が返ってくることを確認しましょう。

 

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

5.2.7.8.プログラムの作成(BrainAction)

音をモニタリングする大枠のプログラム(NagoRobo_Main.py)の実際の機能部分のクラス(BrainAction.py)を作成します。

[BrainAction.py]

1)今までに作成した機能をImportします。また、利用するうえでの初期処理/終了処理及びAPIを利用するうえでのキー情報を格納するプロパティを定義します。

※RaspberryPi Zeroは、Googleのライブラリが使用できないのでコメントアウトしてあります。

2)最初のアクションを行う機能を作成します。

3)継続アクションを行う機能を作成します。

※作成できたら、NagoRobo_Main.pyを起動/実行して実際に動かしてみましょう。例えば、「青森県の天気は?」と聞いて、天気が返ってきたらOKです。

※あとは、いろいろな会話のシナリオを充実させたり、できる機能を増やすことで自然で高機能な頭脳になっていくことになります。今後、機能を充実させていく対応は別セッションにて実施します。

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

5.2.7.7.プログラムの作成(Main)

①フローに基づいてプログラムを作成します。

[フロー図]

まずは、プログラムの大枠となるプログラム(NagRobo_Main.py)を作成します。具体的な機能の処理部分についてはクラス(BrainAction.py)を作成し、大枠となるプログラムから呼び出す形で作成します。

1)基本的なパラメータの設定

2)音のモニタリング

3)ある一定以上の音量の音が発生したら録音する。

4)録音したファイルを元に処理を行う。

 →ただし、最初のアクションなのか、継続アクションなのかを判断して処理する。

1)~3)までが①の処理となり、この処理を継続的に行いながら、録音が発生した場合に②以降の処理を行うようにプログラムを作成します。

➁プログラムの作成[NagoRobo_Main.py]

 

※このプログラムだけでは動かないので、テストする場合にはBrainActionのクラスの部分をコメントアウトして、音声ファイルが作成させるのかを確認しましょう。

 

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

5.2.7.6.プログラムの処理フローの見直し

①各機能とDialogflowを整備したうえでの見直し

各機能を作成し、その機能を呼び出すためのDialogflowの設定が完了したので、その対応内容に応じで処理フローの見直しを行います。

ポイントとしては以下の通りです。

①処理が1回で完結するものと、完結しないものが存在するのでフローを分離

➁ロボットとしての動作として音声ではなく、動作につながるフローの追加

➂定型の問い合わせでないものは、一旦Dialogflowのレスポンスをそのまま返して特に処理としては何もしないように分岐を修正

 

 

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