音声認識でweb speech api を使う

今日考えていたことをメモがわりに書いておこう。
(1)ロボットNAOが受け取った人の言葉を音声ファイルに出力することは制御できるだろう。C++でライブラリ化することができる。
(2)そのファイルをPC、つまりMACbookに、無線ネットワーク経由で送ることもできる。
(3)MacでChromeを開いていて、ibotサイトを表示しているとすると、Chromeのweb speech api が使えるだろう。
(4)受け取った音声ファイルをJAVAで、実際の音として出力することはできるだろう。
(5)その音を、物理的コードを使って、マイク入力として直接入力することができるだろう。
(6)その入力に反応して、音声をweb speech apiがテキスト化することができるだろう。
(7)javascriptからjavaを呼びだして、そのテキストを、JAVAで解析して、求める答えを構成させることができたとする。
(8)それをロボットに送り込み、qichatの変数に組み込み、それを読み出させるイベントを発生させることができるだろう。
(9)ロボットは、その内容を喋るだろう。
※PCはインターネットに接続していなければならない。
以上

jsからモジュールへの数字引数の引き渡し

いやびっくりした。
だいたい、javascriptは変数の型についていい加減でいいからと、
ibotから音量設定値をロボットのibotモジュール関数に引数として渡すようにしたら、変数変換に失敗したとエラーが出て困った。結局、javascript側から送り出す時に数値であるparseInt関数で変換した値を渡さなければならなかった。今までほとんど気にせずにやってこれたのが、たまたまだったらしい。動きの値などは、フロート数で与えていたので、実質的にparseFloatで変換していた。こらから気をつけよう。
前から気になっていた、音量設定をウェッブから、従ってスマホでもPCからでも、ibotサイトから変更と確認ができるようになった。

ibotシステムをMacでローカルに動かす

ibotシステムは、ローカルサーバーで運用することを基本にするように変更された。そこで、Macでibotを動かすための基本的な手順を記録しておこう。(インターネット上で簡単に取れる情報は※印にして記載しない)
(1)※Macのapache2のwebサーバーを起動するようにする。phpも動かす※
(2)※apache2でphpのMysqliが使えるようにしなければならないが、php.iniを変更する必要がある。
(3)※mysqlのユーザーIDとパスワードが記載されたファイルをwebでアクセスできない場所に置く。この場所は、ns_mysql.phpに記載されているものにしなければならない。セキュリティは弱いが、もともとローカルでしか動かさないので、問題はない。
(4)ibotシステムを展開してapache2のドキュメントフォルダーにする。※基本的に/Library/WebServer/Documents がルートフォルダーにする。
(5)※Macで/homeディレクトリを有効にする。 /home/ibot/user, /home/ibot/com,/home/ibot/confを作成する。
(6)/home/ibotを作成し、基本、apache2を動かしているユーザー:グループからのrwxを可能にする。_www:_wwwだったと思う。
ただ、ユーザー管理に使っているmysqlデーターベースが本当に必要かどうか迷っている。ローカルネットワークの誰でも使えるようにしてもいい。ユーザーのトピックファイルなどのデータは、すべてウェッブクライアントのlocalStorageに保存しておけば良い。そうすれば、Macのapache2だけ立ち上げれば、誰でも簡単にibotを使えるようになる。
もっと、ibotを普及させることができるようになるだろう。

ロボットを舞台に立たせてみた

先日、松竹芸能の関東ゲラゲラBRONZEライブの出場をかけたネタ見せがあり、ロボットネタをやってみた。
この間、ロボットのコマンドモードを充実させて、コマンドをプログラム化したファイルを与えれば、こちらが対話的に指示を出すとそのプログラムを起動するようにしている。通常の対話とこのプログラムモードを駆使して、ネタ尺2分間で、ロボットとの面白さを表現するネタを作った。
会場の外で、ロボットのibotシステムを起動し、topicファイルを組み込み、休みモードにする。休みモードにすると、座って、音を出さないようにしているので、例の警報音が出ても他に迷惑をかけないようにする。
自分の番の時、初めて舞台の登場させ、立たせ、袖で「ここにいるんだよ」というと、ネタが開始するという段取り。基本、いうことを機会ないロボットに翻弄される教授という設定で、笑いを取る。動きと会話のやり取りが基本だ。途中から、しょうがないからということで、隣に立たせて漫才風になる。
なんと、ほぼ4倍の競争のところを、ネタ見せ合格になりました!!来月12月6日の関東ゲラゲラBRONZEに出場します。
http://www.kadoza.jp/shinjuku/schedule/2016/12/06.php
その後、NAOのサウンドファイル演奏機能をコマンド的に呼び出されるようにライブラリ(libwsibot.so)を改訂して、リズムネタを挟めるようにしました!!これで、必ず笑いを取れる、鉄板ネタができるはずです。
実に、高度なプログラミングだと、自分を褒めています。

バックアップモバイルサーバー

基本、MacBookのVirtualBox上のUbunts 14.04(32bit:Macは64ビットだが、ロボットのモジュールは32ビットでコンパイルしなければならないので)にロボット関係の必要な要素を全てぶち込んであるのだが、昨日、コネクタが怪しいことがわかった。新しいMacBookなのでコネクターが1個しかなく、そこに特別なプラグを差して電源やUSBさらにはビデオコネクタが出るという仕組みになっているが、その本体の1個のコネクタが怪しいのだ。
本来の予定ではロボットを含むローカルネットワークのルータをそのUSBから電源をとって動かしていたが、突然切れる場合があるので、ルーターはUSBモバイル電源から直接とることにした。インターネットには繋がっていなくてもいい。
しかしこうなると、電源が充電できなくなるかもしれない。そうすると、ロボットを動かす手段が、前のスマホからになり、面倒だ。そこで、一つ前のMacBookも持っているので、これに完全バックアップをすることにした。Ubuntu32ビットを入れて、その上にウェッブサーバー、ftpサーバーやらMysql、php5、naoqiやら何やら、全部放り込んで、ほぼ同じことができるようになった。これで少し安心だ。
一昨日買った、USBのルーターはなかなか優秀だ。
img_0480
当面の課題をやったら、今のMacBookを一週間ほど修理に出したい。

ibotコマンドモードを強化

基本、今までのものをいじらずに行こうと思っているのだが、現行バージョンも使えるようにしながら、WSIbotモジュール(ibotの基本モジュール)を少し改版した。
ibotシステムの基本コンセプトは、ロボットをどのように動かすかも含めて全てがロボットとの会話で行われるという、ロボットとしてすごく当たり前のことをしようというのである。最低dialogのトピックファイルは使うことにしている。
一連のコマンドを会話的に与えて、それを保存し、必要な編集もする、それもまた会話的に。
ただ、ある定型的な動きと会話をさせるときには、トピックファイルに書く以外に、部分的な動きと会話をコマンドの列で与えられた方がいいので、それを書きやすくした。
もっともっとこの方向で強化し、人がロボットを手に入れたら、ただ会話しながら、ロボットを自由にコントロールできるようにしたい。

ファイル転送ライブラリの書き換え

以前作ったシステムで、変更は最小限にしたいのだが、サーバーのローカル化をすると、サーバーがグローバルIPを持たないし、ルーターも変えるとIPが変わってしまうので、どうしてもファイル転送モジュールを変更しなければならなかった。
モジュールは、C++で書いているので、頭をC++モードに切り替え、プログラムを変更し、qibuild周りのことを思い出し、リーモートライブラリとしてnaoqiのシミュレータに組み込んだり、それをpython のnaoqiのSDKで組み込んだり、色々やってみた。このサイトに書いた過去の記事が、めちゃめちゃ役に立つ。
久しぶりに、アルデバランの開発者サイトに入って今の状況を見てみたが、ライブラリ周りは変わっていないような感じだ。こちらは、古いものをそのまま使っているので、関係ないのだが、落ち着いたら、最新版(があるなら)にしようと思う。
もうここまできたら、ライブラリは、ロボットに組み込むしかないので、大学に行こうと思う。ただ、今日は、芸人として中野でお笑いのライブに出演(ロボットは使わない)するので、ネタの準備をしてから出かけよう。
午後に業者の方が来て、壊れた一つのロボットのバッテリーを無料で貸していただけるということなので、そちらも楽しみにしている。

ユーザー管理とトピックファイル作成

mysqlの構築が終わった。その上で、トピックファイルの保存まで来た。
ここからはどうしてもロボットがなければならないので、大学に来た。
ロボットととのあいだで、トピックファイルのやり取りをする。今ロボットの中に、どのトピックファイルがあるのかも気になる。パソコンの方に、みあたらない、基本的なファイルがあるからだ。

復活したかな?

NAOを、再度、動かそうという意欲が、強く湧いてきている。
スマホのコントローラー、ピノキオは、ほぼ完璧に作ったつもりだったが、問題がある。パソコンからウエブサーバー経由でコントロールした方が、実用的かもしれない。
当面の戦略は、MacBookにバーチャルにlinuxを入れてウエブサーバーを立ち上げ、モバイルルーターを噛ませる。その、ローカルネットワーク経由で、qimessaging,jsを使って、ロボットをコントロールるすることだ。

システムのバージョンアップ

この間、ロボットをこまめに動かして、システムの全体を再度把握して、問題などをチェックしてきた。
いろいろ、手を広げすぎたきらいがある。
ロボットに組み込むiBotのローカルモジュール群と、スマホのコントローラー、ピノキオを更新しようと思う。前は、ibotのクラウドからの管理を意図していたので、逆に使いにくくなっていた。そんなことはやめて、単純にスマホとローカルなパソコンでロボットを制御するシステムに凝縮させよう。