※仮想環境について

仮想環境について

Raspberry PiにはOSを準備すると、デフォルトで2つのバージョンのPython(version2.7とversion3台)がインストールされています。よって、私たちが改めてインストールする必要はありません。ただし、開発する場合には、開発するプログラムによっていろいろなライブラリーを組み込んで開発する必要があります。このライブラリーの組み込み(インストール)で、ライブラリー同士が干渉しあってトラブルが発生して開発でつまずくことが多いことから、インストールしているライブラリを管理しやすいように、プログラム毎に個別の環境を用意し、各環境に必要なライブラリだけをインストールして開発を行うことによりライブラリの導入によるトラブルを減らすことが可能です。

この個別の環境として、仮想環境というものを開発プログラム毎に用意して、上記の個別の環境を実現することが可能です。

ただし、今回の開発ではRaspberry pi のGPIO制御を行うにあたってsudoでの実行が必須となっている箇所があります。よって、今回の開発では、プログラム管理用のフォルダは作成して管理するものの、ライブラリの管理はドキュメント上で管理することとし、仮想環境を利用しない方針とします。

しかし、仮想環境そのものは開発上有効なものであることから、仮想環境の構築の仕方について以下に説明します。

2)仮想環境作成の手順

①仮想環境を作成するためのツールはPython3.3以降標準で入っているvenvを利用します。(※インストールは不要です。)

➁プロジェクト管理用のフォルダーを作成

基本的にはどのようなフォルダー名でも構いませんが、今回は「home/pi」の直下に「Python3Venv」名前のフォルダーを作成します。「home/pi」直下とはpiというファルダの事です。

フォルダの作成はターミナルから行います。Terminalを起動しましょう。Terminalを起動すると下記の画面が立ち上がります。             Terminalで操作したいフォルダを指定する時はcdというコマンドを使ってファルダを移動する必要があります。ですが、Terminalは起動するとデフォルトでhome/pi直下にディレクトリ(ファイル)がありますので今回は移動する必要はありません。フォルダの作成はTerminalに下記を記述し作成する事ができます。

mkdir Python3Venv

➂個別プロジェクト用の仮想環境の作成

上記で作成したフォルダーに移動して下記のコマンドを実行して、個別プロジェクト用の仮想環境を作成します。今回はPython3(pythonのバージョンv3台)で開発開発します。「py3test」という環境を作成します。

cd Python3Venv                               ←フォルダー移動

python3 -m venv py3test           ←環境作成

※赤字の部分はpython3の環境を作成することを指しています。Python2の場合にはpython2と記載して作成します。

※少し実行に時間がかかります。

 

④作成した仮想環境の起動

作成した仮想環境を起動するには、作成した仮想環境のフォルダ「py3test」以下のコマンドを実行します。

cd py3test      ←フォルダー移動

source bin/activate ←仮想環境の起動

実行すると上記のような画面となります。

 

⑤簡単なPythonプログラムの実行

Pythonを起動します。

python ←Pythonの起動

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

print(‘test’)

※Python v3.5.3が起動します。

※問題なく実行できます。

⑥仮想環境を終了する。

仮想環境を終了させるためには、Pythonを終了させて、下記のコマンドを実行します。Pythonの終了はCtrl+Zで終了します。

deactivate

※もとのフォルダーの状態に戻ります。

 

⑦仮想環境の効果

PCに新たなソフトをインストールする時、手順通りに行っているのにうまくいかない事はありませんか?その多くの原因は別のソフトとの相性が悪く衝突が起こることにあります。1度インストールしたソフトはPCに全体に影響を与える為、衝突の原因になっているソフトをアンインストールしないとうまくインストールできないのです。しかし、どのソフトと衝突しているのかを調べるのはとても難しく、インストールを諦めてしまう方もいるのではないでしょうか。

仮想環境は、例えばライブラリをインストールした場合には、その環境にのみ適用され、他の環境には影響を及ぼしません。

例えば、仮想環境でインストールの必要なライブラリをimportします。

import pyttsx3

インストールしていないのでエラーとなります。

一旦Pythonを終了させて、ライブラリをインストールします。

pip install pyttsx3

その後、再度Pythonを起動してimport します。

今度はインストールしてもエラーとなりません。

では、一旦仮想環境を終了させて通常の環境で同様にimportしてみます。

エラーとなります。これで、他の環境に影響を及ぼしていないことがわかります。

仮想環境の作成は以上です。

※仮想環境で、pythonを起動する場合には今回はpythonバージョン3台の環境作成しているので、コマンドとしては「python」のみでバージョンを意識する必要はありません。

通常の環境では、バージョン3のpythonを起動する場合には「python3」と実行する必要があります。

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

5.3.3.口をつくる

ロボットにお話しをさせるための口を作ります。

※お話をするプログラムはすでに「ロボットの頭脳を作る」で作成済みです。

口と言ってもロボットにとっての口はスピーカーになるのですが、市販のスピーカー程高機能である必要もなく、また、小さいものが使い勝手がいいことから、Raspberry Piで利用できるスピーカーを自作します。

ただし、本方式はpwm制御を行うサーボモータと制御がバッティングを起こすことから同時に利用することができません。よって、今回用意するものは今後利用するための準備として作成します。(今回のロボットのプロトタイプではUSB接続タイプのスピーカーを用意して利用することとします。)

1)用意するもの

・スピーカー  ダイナミックスピーカー 8Ω0.3W66mmΦ NA202C

アンプ TPA2006使用 超小型D級アンプキット

ジャンパー線(オス/メス5本、オス/オス2本)

ブレッドボード

2)作成手順

[配線]

①スピーカに電線とジャンパー線のオス/オスを半田付けします。

 

➁アンプにPinを半田付けします。また、下記のように背面の➂の部分を半田付けします。

➂アンプをブレッドボードに差し、配線図通りにジャンパー線を利用して配線します。

 

3)Raspberry Piの設定

①下記コマンドでGPIOのmodeを変更します。

sudo gpio -g mode 13 pwm

sudo gpio -g mode 18 pwm

また、「gpio readall」のコマンドで、設定状態を確認します。

Modeの部分がそれぞれ、ALT0,ALT5となっていれば設定完了です。

➁音がなることを確認します。

音声ファイル等で音が鳴るか確認してください。

➂起動時にGPIOのmodeが自動的に変更されるように設定します。下記のコマンドにて、設定ファイルを変更して、起動時に自動的に上記の設定変更が行われるようにします。

sudo nano /etc/rc.local

④Raspberry piを再起動し、GPIOの設定を確認(gpio readall)。音がなることが確認できれば完了です。

※USBスピーカーへ戻した時、カード番号とデバイス番号が変わっている事があります。デバイスを戻した時は、aplay -lで確認し、下記のプログラムで設定しているカード番号、デバイス番号を修正してください。

・TextToSpeech_Jtalk.py

・TextTospeech_eSpeak.py

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

5.3.1.1.写真を撮る機能の作成

[写真を撮るプログラムの開発]

写真を撮るプログラム「takeapicture.py」の作成はRaspberry Piで行います。また、USBタイプのWebカメラを準備してください。WebカメラをRaspberry Piに接続し、写真を撮ります。(webカメラにマイクが内蔵されている場合には、個別に取り付けているマイクデバイスは不要となります。)

①openCVをRaspberry Piにインストールします。仮想環境にて下記のコマンドを実行してください。

sudo pip3 install opencv-python

sudo apt-get install libatlas-base-dev

sudo apt-get install libjasper-dev

sudo apt-get install libqtgui4

sudo apt install libqt4-test

②takeapicture.pyの作成

[takeapicture.py]

③仮想環境にてtakeapicture.pyの実行確認

sudo python3 takeapicture.py

py3testのフォルダにphoto.jpgという写真ファイルが保存されますので、写真が撮れているか確認してください。写真が撮れていればプログラムの完成です。

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

5.3.1.3.AnalysisImageToSpeech_Google.pyをBrainAction.pyへ組み込む

前章で作成したAnalysisImageToSpeech_Google.pyをBrainAction.pyへ組み込んでいきます。組み込む前にDialogflowへ新たなIntentsを作成します。

[Dailogflow:Intentsを作成する]

上記の表の通りにIntentsを作成してください。

※作成方法については、5.4.3の章にて説明しておりますので、省略します。

[BrainAction.pyへAnalysisImageToSpeech_Pyを組み込む]

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

[BrainAction.py]

①AnalysisImageToSpeech_Google.pyをBrainAction.pyへ、インポートする処理を追記してください。

②「ここから–ここまで」の部分をプログラムに追記してください。

以上でBrainAction.pyの修正が完了しました。

プログラムの実行確認を行います。「NagoRobo_Main.py」を実行。webカメラ接続したうえで、そのカメラに対象を写るように向けて「これは、何。」と話しかけてみてください。

下記のようにWebカメラで撮影した写真から何らかの情報を取得し、音声で読み上げればプログラムの組み込みの成功です。

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

5.4.6.ランダムに話しかけてくるプログラムの作成と組み込み

現在のプログラムは、こちらから話しかけないと何もアクションしない仕組みとなっています。よって、話しかけられない限り何もアクションしないのはつまらないので、一定時間、話しかけない場合に、ロボットが話しかけてくるプログラムを作成します。

 

1)発声するフレーズのリストを取得

ロボットに発声させるフレーズのリストを作成します。json形式で作成します。

[phraselist.json]

2)ランダムに話しかけてくるプログラムの作成

ランダムにリストのフレーズもしくはニュースを発話するプログラムを作成します。

[news_rp _speak.py]

3)NagoRobo_Main.pyを修正する

NagoRobo_Main.pyのプログラムを修正し、2)で作成したプログラムを組み込みます。発話するタイミングは、最後にロボットが発話してからの経過時間を計測。同時に最後に発話したタイミングで、ロボットが自動的に発話するランダムな経過時間を都度設定。経過時間と設定された経過時間に応じて2)で作成したプログラムを起動するように組み込みします。

下記の赤枠の部分をプログラムに追記します。修正を行う前にバックアップをデスクトップに保存しておいて下さい。

[NagoRobo_Main.py]

NagoRobo_Main.pyを実行すると、実行した直後、ロボットの発声直後に数字が出力されます。(下記の画像では60が出力されています。)出力された数字(秒)が経過し、フレーズが発声されたらOKです。

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

 

5.3.1.目を作る

ロボットの目となる、基本的な機能を作成します。

※この章は5.4.1の章から5.4.5.4の章まで完了してから進めてください。

今回は、Google Cloud Visionを使って写真画像を認識し発声する「Webカメラに写った物を何か教えてくれる」プログラムを作成します。

画像認識のプログラムには、下記のプログラムを作成します。

1.写真を撮る機能の開発(takeapicture.py)

2.写真を撮ってその情報を発話するプログラム(VisionToText_Google.pyの作成/Translate_Google.pyの修正/AnalysisImageToSpeech_Google.pyの作成)

3.AnalysisImageToSpeech_Google.pyをBrainAction.pyへ組み込む

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

5.2.2.4.Sambaを導入する

sambaとは、RaspberryPiとWindowsの間でネットワーク機能を実現するソフトウェアです。Sambaを導入すると、RaspberryPiとWindows間のファイル等の共有が簡単に行うことができます。

①Sambaをインストールします

sudo apt-get install samba

容量確認があるので[Y]を入力して実行します。

※仮想環境には入らずそのまま実行します。

②Raspberry piとWindowsの間で共有するフォルダを用意します

RaspberryPiのhome/piに「nagorobo」というフォルダを作成します。

自分以外のユーザーも使えるようにしたいので、フォルダのアクセス権を設定します。作成した「nagorobo」のフォルダを右クリックして、ファイルのプロパティを選択します。「パーミッション」タブをクリックし、画像の赤枠の「内容の閲覧」「内容の変更」「内容へのアクセス」の項目を3つとも「すべて」に変更します。

③smb.confという設定ファイルを編集します

編集前に下記のコマンドで、念のためにバックアップを取っておきましょう。

sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.org

左に表示されているetcのフォルダの中のsambaのフォルダの中に、smb.conf.orgというバックアップファイルが出来たことを確認します。

次に、下記のコマンドでsmb.confを編集します。

sudo nano /etc/samba/smb.conf

ターミナル上に上記の様なsmb.confの設定ファイルが開くので、カーソルを一番下まで移動し、下記の赤枠部分を追記します。

作成したフォルダを共有する情報となります。

Ctrl+O、Enterで上書き保存してください。

終了は、Ctrl+Xで終了します。

④Sambaの起動し、共有フォルダの共有アクセスの確認

下記のコマンドをターミナルに入力すると、Sambaが起動します。

sudo /etc/init.d/samba restart

次に、同じネットワーク上にあるWindowsのPCから共有確認をしてみます。

エクスプローラーを開き、ネットワークを選択します。

ネットワークの中に「RASPBERRYPI」が表示されていることを確認します。(表示されていない場合には「¥¥raspberrypi」と入力して直接アクセスしてみてください。)

nagoroboのフォルダにファイルを保存すると、smba.confを編集した際に設定したallを通してWindowsとファイルの共有ができます。

⑤Sambaのシャットダウン方法

Sambaのシャットダウンは、下記のコマンドで行うことが出来ます。

sudo /etc/init.d/samba stop

これでSambaの設定は以上です。

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

5.2.2.3.Raspberry Piのバックアップとバックアップファイルの書き込み

Raspberry Piのすべてのデータは1枚のmicroSDカードに格納されています。よって、この中microSDカード自身や中のデータが破損してしまった場合には、今まで準備してきたものが失われてしまうことになります。よって、その際のためにバックアップファイルを作成し、何かあった場合には作成したバックアップファイルから復旧できるように準備しておきましょう。

[Win32DiskImagerのダウンロード]

Win32DiskImagerはバックアップファイルを作成する為のソフトウエアです。下記のURLからWindowsのPCへダウンロードしてください。バックアップファイルをWindowsPC内に作成します。

https://ja.osdn.net/projects/sfnet_win32diskimager/

①「ダウンロードファイル一覧」をクリックします。

②一覧の中から「Win32DiskImager-0.9.5-install.zip」を探し、ダウンロードしてください。

③ダウンロードした「Win32DiskImager-0.9.5-install.zip」を選択し、右クリックでメニューからすべて展開をクリックして展開します。

④展開したファイルの中に「Win32DiskImager.exe」がある事を確認してください。

[バックアップファイルの作成]

WindowsにWin32DiskImagerのダウンロードができたら、実際にバックアップファイルを作成してみます。

①バックアップを作成するRaspberry PiからmicroSDを取りだし、PCに接続します。PCにmicroSDカードを直接接続できない場合にはアダプターを利用してください。

②ダウンロードした「Win32DiskImager.exe」を起動してください。

③赤枠のアイコンをクリックしするとエクスプローラーが起動しますので、ファイルの種類を「Disk Images(*.img*.IMG)」から「*.*」に変更してください。

④次に、デスクトップに移動し、右クリックでテキストドキュメントを作成します。

⑤ドキュメントを作成する際に、ファイル名を任意のものを、拡張子を「.img」に変更して作成してください。ファイル名を今回は「NagoRobo.img」としました。下記のようなファイルができたら開くをクリックします。

⑥Image Fileの指定が作成したNagoRobo.imgになっていることを確認し、Deviceをバックアップ対象のmicroSDに指定します。

⑦Readボタンをクリックすると書き込みが始まります。「Are you sure you want to overwrite the specified file?」という警告表示されますが、Yesをクリックしてください。

⑧「Read Successful」と表示されるとバックアップファイルの完成となります。

[バックアップファイルの書き込み]

①バックアップ用のmicroSDカードを用意し、PCに接続します。バックアッフの用のファイルはバックアップ対象のmicroSDカードと同じ容量のものを用意してください。

Windows上にダウンロードしたWin32DiskImager.exeを起動します。をクリックし、作成したバックアップファイルを選択してます。

②Deviceに接続したバックアップ用のmicroSDを選択します。

③Writeをクリックすると書き込みが開始されます。

④Confirm overwriteという書き込みの確認が表示されますのでYESで進めます。

⑤Write Successfulが表示されたらバックアップ用のmicroSDカードへのバックアッフデータの書き込み終了です。

⑥正常にバックアップが機能するか、Raspberry Piに作成したmicroSDカードを接続して起動し、確認します。バックアップ元のmicroSDのようにRaspberry Piが起動し、保存していたプログラム等の起動が確認できたら書き込み成功です。

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

5.4.5.APIサービスのカスタマイズ

今までは、各ベンダー等から提供されているAPI等を直接利用していましたが、それらのAPIをカスタマイズし独自のサービスとして用意、利用する方法を整理します。

現在、Google Cloud PlatformのサービスはRaspberry Piから直接Googleのサーバーへリクエストを送りGoogleのサーバーからレスポンスをもらいます。

今回は、RaspberryPiとGoogle Cloud Platform間に中継サーバーを置き、中継サーバーを利用し、Googleの機能(音声のテキスト化機能、翻訳機能)を使えるようにしていきます。

中継サーバーはNode.jsでつくりましょう。中継サーバーの開発作業はWindowsのPCを使って行います。作成した中継サーバーはローカル環境にてテストした後、最終的にHerokuへデプロイし、外部から利用できるようにします。

では、作業していきましょう。

 

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

5.4.5.1.Node.jsの環境準備

まず、中継サーバーを開発するためのNode.jsの環境設定について説明します。下記のURLからNode.jsをダウンロードし、WindowのPCにインストールを行ってください。

※中継サーバーの開発はWindowsのPCで行います。

https://nodejs.org/en/

【Node.jsの利用の為の準備】

①「コマンドプロンプト」を起動してください。スタートメニューから検索で探すことができます。

②開発に必要なライブラリをインストールしていきます。

「express-generator」をインストールします。下記のコマンドを入力してください。

npm install -g express-generator

 

【中継サーバーの作成】

①今回開発する中継サーバー用のフォルダを作ります。デスクトップにGoogle_APIというフォルダを作成してください。(フォルダ名は本来なんでも構いません。)

②Google Cloud Platformで取得したサービスキーを配置します。デスクトップに作成したGoogle_APIフォルダを開き、

③デスクトップのフォルダに移動してください。

cd Desktop

④先ほど作成したフォルダGoogle_APIに、Webアプリケーション(express)の生成を行います。下記のコマンドを入力してください。

express Google_API

cd Google_API && npm install

⑤クライアントから送られてきた音声ファイルをサーバーへアップロードする為のモジュールもインストールします。(音声のテキスト化をするプログラムでは、音声ファイルを中継サーバーへアップロードする必要があります。)

npm install multer

⑥Googleの機能を利用するための環境を整えます。

下記のGoogle Cloud Platformのライブラリを2つインストールします。

・Google Cloud Speech

・Google Cloud Translation

npm install –save @google-cloud/speech

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

npm install –save @google-cloud/translate

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

ライブラリを利用する際に認証に利用する、キーファイルをフォルダGoogle_API内にKeysというフォルダを作成して、コピーして保存してください。

 

これでNode.jsの環境準備ができました。

Webサーバー/アプリケーションが起動できるか、フォルダGoogle_APIから下記コマンドを実行し、ブラウザで確認してください。

サーバー起動

npm start

 

ブラウザでの稼働確認

上記の図のように結果が表示されたら下記にアクセスしてください。

http://localhost:3000

下記のページが表示されれば中継サーバーの起動の成功です。

 

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