顔の認識

一昨日、環境クイズに使ったQiChatスクリプトの挨拶部分に、顔認識を組み込むことにした。要するに、顔を名前とともに、覚えさせ、顔を見せるとその名前を呼び起こして、答えるというものである。
choregrapheboxis
図の、(1)が、挨拶に関わるDialogのボックスである。(2)は、覚えた顔をすべて忘れるという機能のボックス、(3)は、顔を覚えるための機能を持ったボックス、(4)は、顔をデータベースの中からひろって、認識するボックスである。ボックスは、常に左が入力で、右が出力なのだが、この場合、出力のすべてをDialogボックスに戻している。
以上に関わる、QiChatスクリプトは次のようなものだ。
--------------------------
concept:(hello) [こんにちわ はじめまして]
concept:(humans) [わしだ さかうえ はやし のなか ふじもと]
concept:(forgetFaces) [顔を全部忘れなさい 顔を忘れなさい]
concept:(rememberMe) [私を覚えていますか 私のことを覚えていますか 僕を覚えていますか 僕のことを覚えていますか]
# 顔を覚えているかどうかを確かめる
u:(~rememberMe) ちょっと待ってください。^activate(recognizedAnswer) $faceRecog = 1
# 記憶している顔データをすべて削除する
u:(~forgetFaces) わかりました。 $forgetAllFaces = 1
u:(~hello) ~hello 、お会いできてうれしいです。、僕の名前はわっしー、君の名前は? 名前は、なになにです、ってこたえてね。
u:(名前は _~humans です) $1 さんですね。よろしく、お願いします。$name = $1 顔を覚えますので、5秒間、私をみてください。 $learnFace = $name
# 入力のrecognizedFace変数が変化すると、eventが発生して、これを言うことになるはずだが
u:(e:recognizedFace) %recognizedAnswer $recognizedFace さんですね。ちゃんと、覚えていますよ。^deactivate(recognizedAnswer)
# 顔は認識できたが、8秒以上かけても、データベースの顔に一致しない。
u:(e:detectedNotRecog) 申し訳ありません、あなたの顔を覚えていません。
# 顔記憶に関する処理
u:(e:successToLearn) 覚えることができました。
u:(e:failToLearn) 覚えることができませんでした。
u:(e:successToDelete) すべて忘れました。
u:(e:failToDelete) 忘れることができませんでした。
---------------------------------
ポイントは、Dialogボックスの外でしゃべらせないことだ。もう一度戻して、Dialogボックスの中で、しゃべらせる。そうしないと、外でしゃべった自分の言葉を、人の言葉と錯覚して、聞き取れないときの応答としているeventを発生させてしまうからだ。
スクリプトは、ちゃんと、予想通りの動きをしているのだが、顔の認識が悪いようで、別な人物の名前を答えてしまう。はて、困った。

お知らせ

ヒューマノイド(人型)ロボットに関する内覧会
人形ロボットが社会的に注目されています。当研究室では、NAOというフランスAldebaran社製のロボットを購入し、人とのコミュニケーションをとおした教育(特に環境教育)や福祉、会社業務などに利用できないかと研究をしております。
このようなことに関心を持っている学生のみなさんに、ロボットの実際の動きや会話、プログラミングの方法などについてご覧いただく機会を以下に提供します。本学の学生であるならば、自由に参加できます。
日時:8月8日(金)13時~15時
場所:2号館15階1522会議室
主催:上智大学ロボット研究会
http://robo.genv.sophia.ac.jp/wp_robot/
希望者は、事前に toyo@genv.sophia.ac.jp (鷲田)までメールください。

わっしーに、立ち振る舞いを教える

わっしーに座る立つを教える。

見ればわかるように、わっしーは床が滑ることを前提に動作する。私たちの研究室とそのフロアは全て絨毯なので、やむをえず、テーブルを分解して天板を床においてそのうえで動作させた。前後左右への動きも教えているのだが、部屋が狭いために、すぐに諦めてしまう。場所を違えばちゃんと反応するはずなので、当面保留。対話の柔軟性を実現することに集中したい。

QiChatコンパイルエラーの原因

エラーの原因が少し分かってきた。QiChatファイルは、実行時にコンパイル(翻訳)されるが、それは、NAO本体の/home/nao/.local/share/dialogフォルダの、
BNFhomenaolocalsharePackageManagerappslastUploadedChoregrapheBehaviorbehavior_1Japanese.bnf
BNFhomenaolocalsharePackageManagerappslastUploadedChoregrapheBehaviorbehavior_1Japanese.lcf
の二つの長たらしいファイルに記録される。コンパイルしているうちに、これが消えたり、壊れたり、違うものになったりするためのようだ。さてどうするかはまだわからない・・・・。

ALDialogボックスのエラー

変なエラーが唐突に出るようになった。たとえば、Dialogボックスで、
--------------------
topic: ~test01()
language: jpj
concept:(hello) こんにちわ
u:(~hello) ~hello
--------------------
こんな会話を指せようとしたとする。日本語環境であること示すために、setlanguageで日本語を指定して、dialog boxの言語でも日本語を設定し、もちろん、ロボットの基本言語も日本語だ。
しかし、実行させようとすると、
------------------------
[ERROR] behavior.box :__onLoad__:0 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11108346568__root__testDialog_1: Error in call of ALDialog::compileAll: CompileAll::ALDialog
ALSpeechRecognition::compile
AsrHybridNuance::xCompile
NuanceVoconEngine::compile()
NuanceGrammarCompiler::compile()
Failed to compile the following file "/home/nao/.local/share/dialog/BNFhomenaolocalsharePackageManagerappslastUploadedChoregrapheBehaviorbehavior_1Japanese.bnf". Incorrect character in the following line : "". Check the documentation for more details about unauthorized characters in dialog
[ERROR] behavior.box :xApplySpecialIONatureAction:0 _Behavior__lastUploadedChoregrapheBehaviorbehavior_11108346568__root__testDialog_1: Error in call of ALDialog::activateTopic: loadTopic::ALDialog
ALSpeechRecognition::compile
AsrHybridNuance::xCompile
NuanceVoconEngine::compile()
NuanceGrammarCompiler::compile()
Failed to compile the following file "/home/nao/.local/share/dialog/BNFhomenaolocalsharePackageManagerappslastUploadedChoregrapheBehaviorbehavior_1Japanese.bnf". Incorrect character in the following line : "". Check the documentation for more details about unauthorized characters in dialog
--------------------------
という感じだ。さっぱりわからない。コレグラフを再起動してもだめだ。いったん変更して、再ロードするとこうなるようだ。わっしーを再起動しないと正常化しない。
一昨日のバージョンに戻したら、上の症状は起きなくなった。家でロボットなしでやった操作の何かがまずかったのだろう。ひとつひとつ確認していかなければならない。