SDカードのバックアップ
・付属のSDカードにはべゼリーのプログラムだけでなく、音声認識システム、音声合成システム、日本語変換プログラムなどが入っています。あやまってこれらのファイルを壊してしまうかもしれないので、SDカードのまるごとバックアップをしておくことをお勧めします。
・SDカードをバックアップする最も簡単な方法は、8GB以上のmicro SDカードとUSB接続のSDカードリーダライターを使う方法です。
・エレコムカードリーダー(amazon)
・ラズパイにSDカードリーダライターを接続して電源を入れ、スロットにmicroSDカードを挿入たら、デスクトップ画面からラズベリーアイコンをクリックし、「アクセサリ」→「SD Card Copier」を選びます。
・コピー元とコピー先を指定し「Start」を押すだけで、現在ラズパイに入っているmicro SDカードをまるごとコピーすることができます。
・8GBのSDカードを入れたのにも関わらず「容量不足でコピーできない」と言われることがありますが、これはスペック上同じ容量のSDカードであっても、メーカーや種類によって記憶可能な領域が異なるためです。その場合は別のカードを試すか、1段階大きな容量のカードを使ってください。
・SDカードをコピーする方法として、パソコンのディスクにバックアップをとるという方法もあります。パソコンに「DiskImager」などディスクイメージを作成するアプリをインストールしなければなりませんが、この方法ならバックアップ用のSDカードを用意する必要がありませんし、パソコンにSDカードライターがついていれば、何も買う必要がありません。
ラズパイのアップデート
・ラズパイの教本などをみると「sudo apt-get update, sudo apt-get upgrade, sudo rpi-updateでこまめにアップデートしましょう」などと書いてあるかもしれませんが、ラズパイをアップデートすることによってべゼリーのプログラムが動かなくなってしまう可能性がありますのでご注意ください。
システム構成
・以下はべゼリーの主なファイルの関係図になります。
~/bezelie/ディレクトリ
chatIntent.csv
・ユーザーからの質問の意図のリストです。chatDialog.csvとchatEntity.csvを結びつけているキーワードのリストです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
common,名前を聞く common,調子を聞く common,時間を聞く common,天気を聞く common,朝の挨拶 common,昼の挨拶 common,夜の挨拶 common,寝る挨拶 common,話しかける common,ねぎらう common,うらやむ common,お願いする common,同意する common,拒否する common,感謝する common,褒める common,突っ込む common,愚痴る common,テスト common,その他 common,帰宅の挨拶 common,出発の挨拶 common,ボケ common,うらない common,顔認識 |
chatEntity.***
・chatEntityファイルは拡張子違いで3つあります。ユーザーからの質問の同意語のリストです。実際にjuliusが使うのはdicファイルなのですが、dicファイルはtsvファイルから生成されるため、server_chat.jsの中でまずcsvファイルとして作成したあと、tsvに変換し、さらにdicに変換しています。
chatEntity.csv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
名前を聞く,なまえは 名前を聞く,おなまえわ 名前を聞く,あなたのなまえは 名前を聞く,きみはだれ 調子を聞く,ぐあいはどう 調子を聞く,げんきですか 調子を聞く,おげんきですか 時間を聞く,いまなんじ 時間を聞く,なんじ 天気を聞く,きょうのてんき 朝の挨拶,おはよう 朝の挨拶,おっは 朝の挨拶,おはようございます 朝の挨拶,もーにんぐ 夜の挨拶,こんばんわ 寝る挨拶,おやすみ 寝る挨拶,おやすみなさい |
chatEntity.tsv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
名前を聞く なまえは 名前を聞く おなまえわ 名前を聞く あなたのなまえは 名前を聞く きみはだれ 調子を聞く ぐあいはどう 調子を聞く げんきですか 調子を聞く おげんきですか 時間を聞く いまなんじ 時間を聞く なんじ 天気を聞く きょうのてんき 朝の挨拶 おはよう 朝の挨拶 おっは 朝の挨拶 おはようございます 朝の挨拶 もーにんぐ 夜の挨拶 こんばんわ 寝る挨拶 おやすみ 寝る挨拶 おやすみなさい |
chatEntity.dic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
����ʹ�� n a m a e h a ����ʹ�� o n a m a e w a ����ʹ�� a n a t a n o n a m a e h a ����ʹ�� k i m i h a d a r e Ĵ�Ҥ�ʹ�� g u a i h a d o u Ĵ�Ҥ�ʹ�� g e N k i d e s u k a Ĵ�Ҥ�ʹ�� o g e N k i d e s u k a ���֤�ʹ�� i m a n a N j i ���֤�ʹ�� n a N j i ŷ����ʹ�� ky o u n o t e N k i ī�ΰ��� o h a y o u ī�ΰ��� o q h a ī�ΰ��� o h a y o u g o z a i m a s u ī�ΰ��� m o: n i N g u ̏ 돱�ΰ��� k o N b a N w a ���밧�� o y a s u m i ���밧�� o y a s u m i n a s a i |
chatDialog.csv
・ユーザーの意図に対する、ベゼリーの返答のリストです。CSV形式です。
・同じ意図に対して複数の返答を記述することができます。どの返答が選ばれるかはランダムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
名前を聞く,べゼリーです 名前を聞く,ロボットです 調子を聞く,まったく問題なしです 調子を聞く,絶好調です 調子を聞く,おかげさまで 調子を聞く,元気ですよ 調子を聞く,今日も元気です 時間を聞く,えーと何時かな 時間を聞く,そーねだいたいねー 天気を聞く,今日の天気はどうかな 天気を聞く,晴れるといいですね 朝の挨拶,おはようございます 朝の挨拶,おはようです 朝の挨拶,ぐっもーにん 朝の挨拶,どうもどうも 朝の挨拶,おっはー 夜の挨拶,こんばんはです 夜の挨拶,こんばんわ 寝る挨拶,おやすみなさい 寝る挨拶,おやすみです 寝る挨拶,おやすみー |
~/bezelie/edgarディレクトリ
・このディレクトリはgitリポジトリです。リモートリポジトリが変更された場合、git pullで最新の状態にすることができます。逆に言うと、このディレクトリのファイルを自分なりに書き換えた場合、git pullすると上書きされてしまいますので、自分なりにファイルを書き換えるときはファイル名を変えることをお勧めします。
メインプログラム
demo_chat1.py
・python(パイソン)で記述された音声対話プログラムです。
・juliusが音声認識したテキストをソケット通信で受け取りますので、juliusが起動完了したあとに起動しないとエラーになります。
・対話リスト「chatDialog.csv」、設定ファイル「data_chat.json」を参照しています。
・非活動時間(ブラウザから設定します)には、発話しません。
・アラーム時間になると、mild設定では「朝ですよ」、hard設定では「朝だよ早く起きてー」と喋ります。
demo_face1.py
・pythonで記述された顔認識プログラムです。
・非活動時間(ブラウザから設定します)には、動作しません。
bezelie.py
・pythonで書かれたベゼリー専用ライブラリです。サーボドライバーボード(PCA9685)を通じて3つのサーボを動かすための関数が入っています。
server_Chat.js
・node jsで書かれたサーバーサイドプログラムです。PCやスマホのブラウザからアクセスすることで、ベゼリーの時間設定や対話データなどを編集することができます。
・起動するとlocalhostのポート3000でリクエストを待ち受けます。
・簡単にhtmlを描画するためnode js用のテンプレートエンジン「ejs」を利用しています。
・複数のブラウザから同時にアクセスし、同じファイルを編集しようとすると競合が発生しますのでご注意ください。
systemd設定ファイル
・ラズパイ起動時に各種のプログラムを自動的に起動するためのsystemd用設定ファイルです。
autoStart_julius.service
・起動時にboot_julius.shを自動起動するための設定ファイル。
autoStart_python.service
・起動時にboot_chatMode.shあるいはboot_faceModeを自動起動するための設定ファイル。
autoStart_dhcp.service
・起動時にboot_dhcp.shを自動起動するための設定ファイル。
autoStart_node.service
・起動時にboot_node.shを自動起動するための設定ファイル。
・これらの設定ファイルはsetting_chatMode.shあるいはsetting_faceModeを実行することで/etc/systemd/system/にコピーされ、さらにシンボルリンクファイルがmultiuser.targetディレクトリにコピーされることで自動実行が有効になります。
・逆にsetting_disableServer.shを実行することで、これらの自動実行は無効になります。
起動用シェルスクリプト
・autoStart_***.serviceによって起動時に自動実行されるシェルスクリプトです。
・setting_chatDemo.shあるいはsetting_faceDemoが実行されると、これらのファイルはopt/bezelie/binにコピーされます。
boot_chatMode.sh
・音声認識モードのpythonスクリプト「demo_chat1.py」を起動するためのシェルスクリプト。
boot_faceMode.sh
・顔認識モードのpythonスクリプト「face_chat1.py」を起動するためのシェルスクリプト。
boot_dhcp.sh
・dhcpサーバーを起動するためのシェルスクリプト。
boot_node.sh
・node JSプログラム「server_chat.js」を起動するためのシェルスクリプト。
boot_julius.sh
・音声認識エンジンJuliusをキーワード認識モードで起動するためのシェルスクリプトです。
・「./boot_julius.sh」で実行できます。起動時に認識単語ファイル「chatEntity.dic」と設定ファイル「julius.jconf」を読み込みます。
・「モジュールモード」で起動するようになっているので、起動するとlocalhostの10500ポートでソケット通信を待ち受ける状態になります。
・起動中に動作チェックしたい場合は以下のプログラムをご利用ください。
1 |
$ jcontrol localhost |
boot_juliusNL.sh
・音声認識エンジンJuliusを自然言語認識モードで起動するためのシェルスクリプトです。
・起動時に設定ファイル「juliusNL.jconf」を読み込みます。
・「モジュールモード」で起動するようになっているので、起動するとlocalhostの10500ポートでソケット通信を待ち受ける状態になります。
設定ファイル
data_chat.json
・スピーカー音量、時間設定、サーボのセンター位置などべゼリーの設定ファイルです。JSON形式で記述されています。
・server_chat.jsによってブラウザから編集することができますが、エディターで直接書き換えることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "data0": [{ "name":"べゼリー", "user":"マスター", "vol":"80" }], "data1": [{ "nowYear":"2018-02-18", "nowTime":"17:16:29", "alarmOn":"false", "alarmTime":"08:00", "alarmKind":"mild", "awake1Start":"00:00", "awake1End":"11:59", "awake2Start":"12:00", "awake2End":"23:59" }], "data2": [{ "head":"0", "back":"0", "stage":"-3" }] } |
julius.jconf
・音声認識プログラム「julius」の音声キーワード認識用の設定ファイルです。boot_julius.sh実行時に同時に読み込まれます。
・単語辞書、音響モデル、音声認識条件などを設定しています。
・設定を変えたい場合はjulius設定マニュアルをご覧ください。
juliusNL.jconf
・音声認識プログラム「julius」の自然言語認識用の設定ファイルです。boot_juliusNL.sh実行時に同時に読み込まれます。
ツール
exec_camera.sh
・カメラの動作をチェックするためのシェルスクリプトです。
exec_openJTalk.sh
・音声合成プログラム「openJTalk」を実行するスクリプトです。
・コマンドラインから「sh openJTalk.sh “喋らせたい文字”」で喋らせることができます。
・パラメータを調整することで、声を変えることもできます。
・音声種はMMDAgent「mei_happy」を使用しています。Copyright 2009-2013 Nagoya Institute of Technology (MMDAgent Accessory “NIT Menu”)
setting_disableServer.sh
・ラズパイがサーバーモードで動作している時に実行すると、サーバーを無効化することができます。再起動後、クライアントとして立ち上がります。
setting_chatMode.sh
・ラズパイがクライアントモードで動作している時に実行すると、サーバーを有効化することができます。その後、再起動するとサーバーとして立ち上がります。
setting_faceMode.sh
・ラズパイがクライアントモードで動作している時に実行すると、サーバーを有効化することができます。その後、再起動するとサーバーとして立ち上がります。
check_runnings.sh
・server_chat.js, パイソンスクリプト, juliusが起動しているかどうかをチェックしたいときに使うツールです。
・実行中だった場合、プロセス番号が表示されるので、下記のようにすることでプロセスを停止することができます。
1 |
$ sudo kill プロセス番号 |
tool_killApps.sh
・server_chat.js、パイソンスクリプト、juliusを停止させます。
restart_app.sh
・パイソンスクリプトとjuliusをいったん終了してから、また起動します。server_chat.jsの中で「プログラムの再起動」として使っています。
tool_juliusDic.sh
・chatEntity.cvsをchatEntity.dicに変換します。server_chat.jsを使わず、手動でentityデータを編集するときに使います。
サンプルpythonスクリプト
sample_print1.py
sample_talk1.py
sample_servo1.py
sample_servo2.py
sample_servo3.py
sample_julius1.py
sample_juliusNL1.py
sample_output1.py
sample_led1.py
sample_camera1.py
sample_face1.py
sample_vision1.py
sample_record1.py
sample_input1.py
・プログラムを学ぶためのサンプルです。分かりやすくするため、機能をしぼりこんでシンプルに書かれています。別ページで詳しく説明しています。
そのほか
Front_Center.wav
・サンプル音声ファイルです。スピーカーから音がでるかどうかをチェックしたいとき、下記を実行してスピーカーから「フロントセンター」と声がしたら正常です。
1 |
$ aplay Front_Center.wav |
README.md
・gitHub用の説明ページです。markDownで書かれています。
.git
・通常は表示されない隠しファイルです。「ls -a」で見ることができます。
~/bezelie/edgar/ejsディレクトリ
・node JSでhtmlページを簡単に生成するためのテンプレートエンジン「ejs」のテンプレートファイルが入っています。
~/bezelie/edgar/configディレクトリ
・ラズパイをアクセスポイント化するための、書き換えるファイルと、書き換える前のファイルが保存されています。
tips
べゼリーのgitリポジトリ
・べゼリーに付属しているSDカードの~/bezelie/edgar/ディレクトリに入っているファイル群はgitHubでも公開しており、ブラウザから閲覧することもできます。https://github.com/bezelie/edgar.git
・またインターネットにつながったリナックスであれば、下記のコマンドでローカルにコピーすることもできます。
1 |
sudo git clone https://github.com/bezelie/edgar.git |