<第1実施例>
図1を参照して、実施例の中央制御装置10は、たとえば学校の教室などの空間(環境)で利用される。空間内には、複数の人(生徒)がおり、授業時間では人はグループ学習などを受講し、休み時間では人は空間の中を自由に行動する。
空間の天井には、人の位置およびその身体の向きを検出するための複数の距離画像センサ12(12a,12b,12c,…)が設けられている。また、空間の天井には、人を識別するためのRGBカメラ14(14a,14b,…)が設けられている。複数の距離画像センサ12および複数のRGBカメラ14は、後述する中央制御装置10(図4参照)にそれぞれ接続される。詳細な説明は後述するが、中央制御装置10では、識別結果と検出結果とに基づいて、空間内の人位置情報が生成される。そして、空間内の人位置情報を利用して、各人の個性が推定される。
図2を参照して、空間の前方には教卓が配置されており、その教卓から奥側に向けて、左側に4卓および右側に4卓で、合計8卓の机が配置されている。また、各机は4人で利用される。なお、人が利用する机、つまり着席する場所は予め決められている。
また、左側の列に4つ、中央の列に4つおよび右側の列に4つで、合計12個の距離画像センサ12が天井に設けられている。また、各距離画像センサ12は、空間内の人の位置などを検出できるように、取り付け角度が調節されている。このように12台の距離画像センサ12を設けることで、空間内の人の位置などを検出することが出来る。
本実施例の距離画像センサ12の検出範囲は水平方向において57度および垂直方向において43度である。そのため、たとえば距離画像センサ12が地面から2750mmの高さに取り付けられた場合、4m×3mの範囲の奥行情報を検出することが可能である。
また、左側に3台および右側に3台で、合計6台のRGBカメラ14が天井に設けられている。また、左側の3台のRGBカメラ14は、左列と中央列との距離画像センサ12の間に設けられており、右側の3台のRGBカメラ14は中央列と右列との距離画像センサ12の間に設けられている。また、6台のRGBカメラ14のうち、1行目のRGBカメラ14a,14b以外、つまり2行目と3行目との4台のRGBカメラ14は、1行目と2行目との机の上に設けられている。そして、各RGBカメラ14は、レンズが空間の後ろを向き、かつ人の顔が撮影できるように、取り付け位置および取り付け角度が調整されている。このように6台のRGBカメラ14を設けることで、空間内の人の顔を撮影することが可能になる。
また、図1からも分かるように、RGBカメラ14は、教卓側に近づくにつれて、取り付けの位置が高くなるように設けられている。これは、教卓側の壁に黒板が設けられており、人が黒板を見るときにRGBカメラ14が邪魔をしないように考慮したためである。
本実施例のRGBカメラ14は、Logicool(登録商標)社製のウェブカメラ(型番C920t)が用いられている。また、このカメラの視野角は水平方向において70.5度および垂直方向において43.6度である。
なお、空間に配置される複数の距離画像センサ12および複数のRGBカメラ14の位置および数は一例であり、他の実施例では、本実施例とは異なる数の距離画像センサ12およびRGBカメラ14が、本実施例とは異なる位置に設けられてもよい。
図3を参照して、中央制御装置10には、複数の距離画像センサ12が接続される。中央制御装置10は、一定時間毎に距離画像センサ12によって検出された奥行情報を取得する。中央制御装置10は、取得した各距離画像から、人の位置などを検出する。また、中央制御装置10は、一定時間毎にRGBカメラ14が撮影した画像データを取得する。中央制御装置10は、取得した画像に対して顔認識処理を施したのち、認識された顔が空間内のどの人物であるかを識別する。
また、距離画像センサ12およびRGBカメラ14には、識別用のセンサIDおよびカメラIDが割り振られており、各IDには設置位置の座標および取り付け角度などが関連付けられている。
なお、本実施例では、中央制御装置10によって人の個性が推定されるため、中央制御装置10は「個性推定装置」と言われることもある。また、本実施例では、人の顔を認識するソフトとして、オムロン(登録商標)社製の「OKAO Vision(登録商標)」が用いられている。
図4は距離画像センサ12の電気的な構成を示すブロック図である。図4を参照して、距離画像センサ12は制御IC30などを含む。制御IC30には、バス32を介して、A/D変換器34、カメラ38、深度センサ40、深度カメラ42およびI/O44などが接続される。
制御IC30は、キャッシュメモリなどを有し、距離画像センサ12の動作を制御する。たとえば、制御IC30は、中央制御装置10からの命令に従って動作し、検出した結果を中央制御装置10に送信する。
A/D変換器34にはマイク36が接続され、マイク36からの音声信号はA/D変換器34でディジタル音声情報に変換され、制御IC30に入力される。
カメラ38は、距離画像センサ12が設置された空間のRGB情報、つまりカラー画像を撮影するためのカメラである。また、カメラ38は、後述する深度カメラ42が撮影している空間と略同じ空間を撮影することが可能なように、距離画像センサ12に設けられている。
深度センサ40は、たとえば赤外線プロジェクタであり、深度カメラ42は、たとえば赤外線カメラである。深度センサ40は、たとえば赤外線によるレーザ光を距離画像センサ12の正面に照射する。空間には照射されたレーザ光によって特殊なパターンが描画され、深度カメラ42は描画されたパターンを撮影する。そして、撮影された画像は制御IC30に入力され、制御IC30はその画像を解析することで、レーザ光が照射された空間の奥行(depth)情報を計測する。
I/O44は、入力/出力の制御が可能なディジタルポートであり、出力ポートからは音声情報、RGB情報および奥行情報などを含むセンサ情報が出力され、中央制御装置10に与えられる。一方、中央制御装置10からは制御信号が出力され、入力ポートに与えられる。
なお、距離画像センサ12は、RGB情報および奥行情報を出力することからRGB−Dセンサと呼ばれることもある。
また、本実施例の距離画像センサ12には、Microsoft(登録商標)社製のKinect(登録商標)が採用されている。ただし、他の実施例では、ASUS(登録商標)社製のXtion、パナソニック(登録商標)社製の3次元距離画像センサであるD−IMager(登録商標)などが距離画像センサ12として採用されてもよい。
図5は中央制御装置10の電気的な構成を示すブロック図である。図5を参照して、中央制御装置10は、プロセッサ60などを含む。プロセッサ60は、マイクロコンピュータ或いはCPUと呼ばれることもある。プロセッサ60には、バス62を介して、複数の距離画像センサ12、複数のRGBカメラ14、メモリ64、出力装置66、入力装置68および顔識別データベース(以下、顔識別DBと言う。)70などが接続される。
距離画像センサ12は、上述したように奥行情報などを出力する。この奥行情報には、空間にいる人の形状および人までの距離が含まれている。たとえば、人が天井に設けられた距離画像センサ12によってセンシングされると、人を上から見た状態の頭部および両肩の形状と、頭部および両肩までの距離が奥行情報として得られる。
また、上述したように空間の天井には12個の距離画像センサ12が所定の位置(既知)に設置されており、プロセッサ60は、各々から奥行情報を取得して、空間(ワールド座標系)における人の位置(たとえば、頭部および両肩の位置座標(x,y,z))および人の姿勢(たとえば、頭部の向き(θH)および両肩の向き(θB))を計算(予測)することが出来る。
なお、他の実施例では、距離画像センサ12ではなく、3次元のLRFを利用して、人の位置および姿勢が検出されてもよい。
RGBカメラ14は、上述したように、空間内の画像を撮影する。この画像には、人の顔が写っており、その顔が認識され、認識された顔が識別される。
プロセッサ60は中央制御装置10の動作を制御し、日時情報を出力するRTC60aを含む。メモリ64は、ROM,HDDおよびRAMを含む。ROMおよびHDDには、中央制御装置10の動作を制御するための制御プログラムなどが予め記憶される。また、RAMは、プロセッサ60のワークメモリおよびバッファメモリとして用いられる。
出力装置66は、たとえばディスプレイなどであり、入力装置68はたとえばマウスおよびキーボードを含む。そして、たとえば教師は、この中央制御装置10によって推定された結果を、出力装置66および入力装置68を利用して確認および利用することが出来る。
顔識別用DB70は、RGBカメラ14によって撮影された画像において認識された顔(人)を識別するためのデータベースである。たとえば、顔識別用DB70には、1つ(1人)の人IDに対して、様々な角度から撮影された顔の画像および各顔の画像から抽出された特徴量が対応付けられている。これにより、顔を精度よく識別することが可能となる。
続いて、中央制御装置10では、人の識別結果と人の位置の検出結果とを関連付けて(統合して)、どの人物がどの位置に存在しているかを示す人位置情報が生成される。まず、識別に利用した画像において、識別した顔の第1顔位置が推定される。そして、推定された人の第1顔位置のうち、他人の第1顔位置が所定範囲に含まれるものが省かれる。
次に、各人の頭部および両肩の位置から顔の位置を算出し、第1顔位置が推定された画像を撮影したRGBカメラ14の位置および取り付け角度を読み出す。そして、第1顔位置が推定された画像の撮影時刻と、撮影したRGBカメラ14の位置および取り付け角度とを利用して、算出された顔の位置から、人の識別に利用した画像内の第2顔位置を推定する。
そして、他人の第1顔位置が所定範囲に含まれていない第1顔位置と、第2顔位置とから、2つの顔位置の距離が第1閾値MTHよりも小さい組み合わせを特定する。つまり、同一人物の第1顔位置と第2顔位置との組み合わせを特定する。そして、組み合わせが特定された場合は、その組み合わせが示す識別結果と検出結果とから、人位置情報が生成される。
生成された人位置情報は人位置情報テーブル352(図9参照)に記憶される。図6を参照して、人位置情報テーブル352には、人ID、座標および時刻の列が含まれる。人IDの列には、空間内の人に割り当てられた人IDが記憶されている。そして、人IDに対応して、各時刻(t0,t1,t2,…)における人の座標(x,y,z)が記憶される。
このように、顔の識別結果と位置の検出結果とを用いて人位置情報を生成することで、人位置情報の精度を高めることが出来る。また、推定された人の第1顔位置のうち、他人の第1顔位置が所定範囲に含まれるものを省いたうえで、2つの顔位置の距離が第1閾値MTHよりも小さい組み合わせを特定することで、識別結果と検出結果とが誤って関連付けられないようにすることが出来る。
続いて、このようにして生成された人位置情報を利用して、授業時間または休み時間などの所定時間のうち、人が孤立していた時間の割合(以下、孤立時間割合または第1割合と言う。)と、所定時間において自身に割り当てられた机(場所)から離れて移動した移動量の平均(以下、単に机外平均移動量と言う。)と、所定時間における人の周囲に集まった他人の数(以下、単に周囲人数と言う。)とが算出される。なお、所定時間は、人の位置が観測(検出)された時間とも言えるため、観測時間と言われることもある。
まず、所定時間に対する孤立時間割合を数1および数2に示す数式を利用して計算する。数1においてiは人IDを示す変数である。tは所定時間内の時刻を示す変数であり、特にt0は所定時間のうちの最初の時刻を示し、tnは所定時間のうち最後の時刻を示す。Δtは人を検出する処理の処理時間(たとえば、33.3ミリ秒)である。isAloneは人iが時刻tにおいて孤立している状態であるかを判断する関数である。所定時間(i)は人iの位置を検出した所定時間を示し、たとえば人iが受講した授業の時間と一致する。そして、孤立時間割合(i)は、所定時間(i)のうち人iの孤立時間の割合を示す。
また、数2において、jは他人の人IDを示す変数である。posは人i(または他人j)の時刻tにおける2次元位置(平面座標)を読み出す関数である。distは時刻tにおける人iおよび他人jのユークリッド距離(以下、単に距離と言う。)を算出する関数である。D
THは人iと他人などとの距離の状態を判断するために用いる第2閾値である。そして、「for all j(j≠i)」は、空間内の全ての人のうち、人i以外の他人jの全てを示す。なお、第2閾値D
THは他の数式でも利用される。
[数1]
数2に着目して、関数isAloneは、時刻tにおける人iに対して全ての他人との距離を関数distによって求め、距離が第2閾値DTHより大きい場合は「1」を返し、小さい場合は「0」を返す。つまり、関数isAloneは、人iが時刻tにおいて孤立していれば「1」を返し、孤立していなければ「0」を返す。また、数1の数式では、関数isAloneによって人iが時刻tにおいて孤立していると判断され「1」が返されると、時刻tにおける人iの孤立時間がΔt(=「1」×Δt)秒とされる。一方、関数isAloneによって時刻tにおいて人iが孤立していないと判断され「0」が返されると、時刻tにおける人iの孤立時間が0(=「0」×Δt)秒とされる。このようにして求められた時間の総和は、所定時間(i)のうち人iが孤立していた時間(孤立時間)である。そして、人iの孤立時間を所定時間(i)で割ることで、人iの孤立時間割合(i)が求められる。このようにして求めた孤立時間割合(i)は、メモリ64のバッファに記憶される。
次に、所定時間内の机外平均移動量を数3および数4に示す数式を利用して計算する。数3において、Δsは人の位置を検出するときのノイズを軽減するために用いる一定時間であり、本実施例ではΔsは「1秒」とされる。isOutsideは人iが時刻tにおいて机から離れているかを判断する関数である。そして、机外平均移動量(i)は、所定時間(i)内の人iの平均移動量を示す。数4において、R
THは人iが割り当てられている机iから離れているかを判断するために用いる第3閾値である。deskは人iに割り当てられている机の位置を返す関数であり、dist
mは、人iと机iとのマンハッタン距離を求める関数である。なお、数3および数4において変数i、変数t(t
0,t
n)、関数dist、関数posおよび所定時間(i)は数1および数2と同じであるため、詳細な説明は省略する。
[数3]
数4に着目して、関数isOutsideは、時刻tおける人iの位置と人iに割り当てられている机iとのマンハッタン距離を関数distmによって求め、そのマンハッタン距離が第3閾値RTHよりも大きければ「1」を返し、小さければ「0」を返す。つまり、関数isOutsideは、人iが時刻tにおいて机iから離れていれば「1」を返し、机iから離れていなければ「0」を返す。また、数3の数式では、関数isOutsideによって時刻tにおいて人iが机iから離れていると判断され「1」が返されると、時刻tの人iの位置と時刻tからΔs秒後の人iの位置との距離、つまり机外移動量が算出される。
一方、関数isOutsideによって時刻tにおいて人iが机iから離れていないと判断され「0」が返されると、そのときの机外移動量が「0」とされる。このようにして関数isOutsideを用いて求めた机外移動量の総和は、所定時間(i)において人iが机から離れて移動した距離(以下、机外総移動量と言う。)となる。そして、算出した机外総移動量を所定時間(i)で割ることで、人iの机外平均移動量(i)が求められる。このようにして求めた机外平均移動量(i)は、メモリ64のバッファに記憶される。
次に、所定時間内の周囲人数を数5に示す数式を利用して計算する。数5において、周囲人数(i)は、所定時間(i)の人iの周囲人数を示す。また、変数i、変数t(t
0,t
n)、関数dist、関数posおよび所定時間(i)は数1および数2と同じであるため、詳細な説明は省略する。また、数2の数式で利用した第2閾値D
THは、人iの周囲に他人jがいたかを判断するために用いられる。
[数5]
数5では、時刻tにおいて、人iと他人jとの距離が第2閾値DTHより短いかが判断され、距離が第2閾値DTHより短い人の総和が算出される。つまり、時刻tにおける人iの周囲にいた他人jの数が求められる。さらに、時刻tにおける人iの周囲にいた他人の数の所定時間分の総和(以下、積算周囲人数)が算出され、積算周囲人数を所定時間(i)で割ることで、所定時間(i)における人iの周囲にいた他人の数、つまり周囲人数(i)が求められる。このようにして求めた周囲人数(i)はメモリ64のバッファに記憶される。
なお、このようにして算出された孤立時間割合、机外平均移動量および周囲人数は、まとめて人の行動に関するパラメータと言われることもある。
続いて、人の行動に関するパラメータを利用して、人の個性を推定する。第1実施例では、人の個性として「社会的地位(Social Status)」が推定される。第1実施例では、社会的地位を推定するために、空間(教室)内の全ての人(生徒)に対して最大で5人の友達を挙げてもらうアンケートを実施した。そして、そのアンケートの結果から、数6に示す数式を用いて求めた値を、社会的地位を示す値とした。数6において、N
nominatedは他人から友達として挙げられた数を示し、N
pは空間内の全ての人の数(以下、最大人数と言う。)を示し、N
mutualは相互に友達として挙げられた数を示し、N
maxは友達として挙げることが可能な最大数(ここでは、5)を示す。そして、数6の数式によって求められた値は0.0−1.0の値となり、「1」に近いほど社会的地位が高いことを示す。なお、このアンケートは、後述する教師データを作成するために行うものであるため、空間内の全ての人に受けさせる必要はない。
[数6]
次に、数6の数式を用いずに人の社会的地位を推定する手法について説明する。社会的地位の値には、上述した人の行動に関するパラメータ、つまり人の孤立時間割合、机外平均移動量および周囲人数が関連していると考えられる。
たとえば、社会的地位が低い(人気が低い)人は空間内では独りで過ごす時間、つまり孤立時間が長くなると考えられる。また、社会的地位が高い(友達が多い)人は、グループワークなどで友達と会話したり、共同作業を行ったりするため、机から離れて移動する量(机外移動量)が多くなると考えられる。さらに、社会的地位が高い(友達が多い)人の周りには、多くの友達が人の周りに集まるため、周囲人数が多くなると考えられる。
そこで、第1実施例では、人の行動に関するパラメータを利用して、社会的地位が「高い」または「低い」を判別する第1判別モデルを作成する。ここでは、人の孤立時間割合、人の机外平均移動量および人の周囲人数を要素とする複数の特徴量ベクトルを作成する。つまり、上述した人の行動に関するパラメータから特徴量が作成される。
数6の数式によって算出された社会的地位の値を用いて、複数の特徴量ベクトルに対して社会的地位が「高い」または「低い」のラベル付けをして教師データとする。そして、それらの教師データを、SVM(Support vector machine)などの機械学習手法によって学習する。その結果、社会的地位が「高い」または「低い」を判別する第1判別モデルが作成される。この第1判別モデルに対して人の未知の特徴量ベクトルを入力すると、人の社会的地位が「高い」または「低い」の判別結果、つまり社会的地位の高さの推定結果が出力される。このように、空間内で任意に行動する人の社会的地位の高さを、容易に推定することが出来る。
図7は、推定された社会的地位が記憶される推定結果テーブル354(図9参照)の一例を示す図解図である。図7を参照して、推定結果テーブル354は、人IDおよびSocial Status(社会的地位)の列を含む。人IDの列には、空間内の人の人IDが記憶されており、人IDに対応して社会的地位の高さの推定結果、つまり第1判別モデルによる判別結果が記憶されている。たとえば、図7の推定結果テーブル354には、人IDが「0001」および「0002」に対応して「high(高い)」が記憶されている。これは、人IDが「0001」および「0002」の人は社会的地位が高いことを示している。一方、人IDが「0003」に対応して「low(低い)」が記憶されている。これは、人IDが「0003」の人は社会的地位が低いことを示している。
以上のことから、本実施例では、空間内の全ての人に対してアンケートを受けさせたりするような負担を負わせることなく、空間内で任意に行動する人の個性を容易に推定することが出来る。
上述では第1実施例の特徴を概説した。以下では、図8、図9に示す中央制御装置10のメモリ64のメモリマップおよび図10−図16に示すフロー図を用いて第1実施例について詳細に説明する。
図8は中央制御装置10のメモリ64のメモリマップの一例を示す図解図である。図8に示すように、メモリ64はプログラム記憶領域302およびデータ記憶領域304を含む。プログラム記憶領域302には、中央制御装置10を動作させるためのプログラムとして、RGBカメラ14によって撮影された画像から顔を認識するための顔認識プログラム310、認識された顔を識別する顔識別プログラム312、人の位置を検出するための位置検出プログラム314、人(顔)の識別結果と人の位置の検出結果とから人位置情報を生成(推定)するための人位置情報生成プログラム316、人の個性を推定するための個性推定プログラム318、人の孤立時間割合を計算するための孤立時間割合計算プログラム320、人の机外平均移動量を計算するための机外平均移動量計算プログラム322および人の周囲人数を計算するための周囲人数計算プログラム324などが記憶されている。なお、図示は省略するが、中央制御装置10を動作させるためのプログラムには、平面図データ346(図9参照)を編集するためのプログラムなども含まれる。
図9を参照して、データ記憶領域304には、画像バッファ330、識別結果バッファ332、深度バッファ334、位置バッファ336、孤立時間割合バッファ338、机外平均移動量バッファ340、周囲人数バッファ342および特徴量バッファ344などが設けられる。また、データ記憶領域304には、平面図データ346、センサIDテーブル348、カメラIDテーブル350、人位置情報テーブル352および推定結果テーブル354などが記憶される。
画像バッファ330には、RGBカメラ14による撮影によって得られた画像データが一時的に記憶される。識別結果バッファ332には、人(顔)の識別結果が一時的に記憶される。深度バッファ334には、距離画像センサ12から取得した深度情報が一時的に記憶される。位置バッファ336には、深度情報から検出された人の位置が一時的に記憶される。
孤立時間割合バッファ338には、計算によって求められた孤立時間割合が一時的に記憶される。机外平均移動量バッファ340には、計算によって求められた机外平均移動量が一時的に記憶される。周囲人数バッファ342には、計算によって求められた周囲人数が一時的に記憶される。特徴量バッファ344には、人の行動に関するパラメータから作成された特徴量ベクトルが一時的に記憶される。
平面図データ346は、たとえば図2に示す平面図を示すデータである。この平面図データ346には、教卓、机、距離画像センサ12およびRGBカメラ14などが設けられている位置などを示す情報が含まれている。
センサIDテーブル348には、各距離画像センサ12に付与されたセンサIDに、距離画像センサ12が設けられている位置および取り付け角度などを対応付けたセンサ情報が含まれる。カメラIDテーブル350には、各RGBカメラ14に付与されたカメラIDに、RGBカメラ14が設けられている位置および取り付け加角度などを対応付けたカメラ情報が含まれる。
人位置情報テーブル352は、たとえば図6に示す構成のテーブルであり、生成された人位置情報が記憶される。推定結果テーブル354は、たとえば図7に示す構成のテーブルであり、判別モデルによる判別結果が推定結果として記憶される。たとえば、第1実施例の推定結果テーブル354には、第1判別モデルによって判別された人の個性、つまり社会的地位の高さが記憶される。
なお、図示は省略するが、データ記憶領域304には、様々な計算の結果を一時的に格納するバッファおよび/または中央制御装置10の動作に必要な他のカウンタおよび/またはフラグなども設けられる。
中央制御装置10のプロセッサ60は、Linux(登録商標)ベースのOSまたはその他のOSの制御下で、図10に示す顔識別処理、図11に示す位置検出処理、図12に示す人位置情報生成処理、図13に示す個性推定処理、図14に示す孤立時間割合計算処理、図15に示す机外平均移動量計算処理および図16に示す周囲人数計算処理などを含む、複数のタスクを処理する。
図10は顔識別処理のフロー図である。たとえば、中央制御装置10の電源がオンにされて顔識別処理の実行命令が発行されると、顔識別処理が実行される。なお、顔識別処理の実行命令は一定周期毎に出される。
顔識別処理が実行されると、プロセッサ60はステップS1で、画像データを読み出す。つまり、RGBカメラ14による撮影によって得られた画像データが画像バッファ330から読み出される。続いて、ステップS3でプロセッサ60は、人の顔を認識する。つまり、読み出した画像データから人の顔を認識するために、顔認識処理が実行される。また、ステップS3の処理では、複数のRGBカメラ14によって撮影された全ての画像から顔が認識される。続いて、ステップS5でプロセッサ60は、認識された顔を識別する。たとえば、認識された顔から識別用特徴量が抽出され、その識別用特徴量と類似する可能性が最も高い特徴量が顔識別DB70から特定される。そして、特定された特徴量に対応する人IDが、人の識別結果とされる。続いて、ステップS7でプロセッサ60は、識別結果を記憶する。たとえば、識別結果である人IDに対して、識別するために利用した顔の画像データ、画像が撮影されたときの時刻および画像を撮影したRGBカメラ14のカメラIDを対応付けて、識別結果バッファ332に記憶する。ただし、同一人物が異なるRGBカメラ14によって撮影されている場合は、同一人物の識別結果が複数存在することになる。この場合は、1つの識別結果に絞り込み、絞り込まれた識別結果が識別結果バッファ332に記憶される。
そして、ステップS7の処理が終了すると、プロセッサ60は顔識別処理を終了する。なお、ステップS5の処理を実行するプロセッサ60は識別手段として機能する。
図11は位置検出処理のフロー図である。たとえば、中央制御装置10の電源がオンにされて位置検出処理の実行命令が発行されると、位置検出処理が実行される。なお、位置検出処理の実行命令は、顔識別処理と同様、一定周期毎に出される。
位置検出処理が実行されると、ステップS21でプロセッサ60は、深度情報を読み出す。つまり、距離画像センサ12から取得された深度情報が深度バッファ334から読み出される。続いて、ステップS23でプロセッサ60は、人の位置を検出する。つまり、読み出した深度情報から、空間内の全ての人の位置が算出される。続いて、ステップS25でプロセッサ60は、検出結果を記憶する。つまり、プロセッサ60は、ステップS23で検出された全ての人の位置に、検出したときの時刻を対応付けて、検出結果を位置バッファ336に記憶する。そして、ステップS25の処理が終了すると、プロセッサ60は位置検出処理を終了する。なお、ステップS23の処理を実行するプロセッサ60は検出手段として機能する。
図12は人位置情報生成処理のフロー図である。たとえば人が識別され、かつ人の位置が検出されて、人位置情報生成処理の実行命令が発行されると、人位置情報生成処理が実行される。なお、本実施例では、人位置情報生成処理の実行命令は、人が識別され、かつ人の位置が検出される度に発行される。
人位置情報生成処理が実行されると、プロセッサ60はステップS41で、変数iを初期化する。つまり、変数iに対して、最初の人IDを示す値が設定される。
続いて、ステップS43でプロセッサ60は、所定時刻において識別された全ての人の第1顔位置を推定する。たとえば、プロセッサ60は、所定時間において、人の顔の識別に利用した画像において、識別された顔の第1顔位置を推定する。
続いて、ステップS45でプロセッサ60は、人iの第1顔位置に基づく所定範囲に他人の第1顔位置が含まれているか否かを判断する。つまり、人iの人位置情報を誤って生成する可能性があるかが判断される。ステップS45で“YES”であれば、つまり人iの第1顔位置の所定範囲に他人の第1顔位置が含まれている場合、プロセッサ60はステップS55の処理に進む。
一方、ステップS45で“NO”であれば、つまり人iの第1顔位置の所定範囲に他人の第1顔位置が含まれていなければ、ステップS47でプロセッサ60は、所定時刻において検出された全ての人の第2顔位置を推定する。たとえば、プロセッサ60は、所定時間において検出された人の位置から顔の位置を算出し、第1顔位置を推定した画像を撮影したRGBカメラ14の位置および取り付け角度を読み出し、算出された顔の位置から、人の識別に利用した画像内の第2顔位置を推定する。ただし、ステップS47では、人の識別に利用した画像に顔画像が含まれていない人の第2顔位置は推定されない。
続いて、ステップS49でプロセッサ60は、同一人物の第1顔位置および第2顔位置の組み合わせがあるか否かを判断する。つまり、人iの第1顔位置と第2顔位置との距離が第1閾値MTHよりも短い組み合わせがあるかが判断される。また、具体的には、人iの顔位置と、各第2顔位置との距離が算出され、第1閾値MTHよりも短い距離が算出されたかが判断される。ステップS49で“NO”であれば、たとえば人iの第1顔位置と第2顔位置との距離が第1閾値MTHよりも短い組み合わせが無ければ、プロセッサ60はステップS55の処理に進む。また、人iの第1顔位置と第2顔位置との距離が第1閾値MTHよりも短い組み合わせが2つ以上ある場合も、プロセッサ60はステップS49で“NO”と判断してステップS55の処理に進む。
一方、ステップS49で“YES”であれば、たとえば人iの第1顔位置と第2顔位置との距離が第1閾値MTHよりも短い組み合わせがあれば、ステップS51でプロセッサ60は、人iの位置情報を生成する。つまり、識別結果の人IDに対して、第2顔位置と対応する人の位置および所定時刻を対応付けた人位置情報が生成される。続いて、ステップS53でプロセッサ60は、人位置情報を記憶する。つまり、生成された人iの人位置情報が人位置情報テーブル352に記憶される。なお、ステップS51の処理を実行するプロセッサ60は生成手段として機能する。
続いて、ステップS55でプロセッサ60は、変数iをインクリメントする。つまり、次の人IDを示すために、変数iの値に「1」が加えられる。続いて、ステップS57でプロセッサ60は、変数iが最大人数Npと一致したか否かを判断する。つまり、全ての人に対して人位置情報を生成する処理が実行されたかが判断される。ステップS57で“NO”であれば、つまり全ての人に対して人位置情報を生成する処理が実行されていなければ、プロセッサ60はステップS45の処理に戻る。一方、ステップS57で“YES”であれば、つまり全ての人に対して人位置情報を生成する処理が実行されると、プロセッサ60は人位置情報生成処理を終了する。
なお、ステップ41およびステップS55の処理は、図14に示す孤立時間割合計算処理、図15に示す机外平均移動量計算処理および図16に示す周囲人数計算処理と、後述する第2実施例における図20に示す着席時間割合計算処理と、後述する第3実施例における図26に示す滞在時間割合計算処理とでも、略同等の処理が実行される。そのため、これらの処理ではステップ41およびステップS55と同等の処理については、詳細な説明は省略する。
図13は個性推定処理のフロー図である。たとえば、中央制御装置10の管理人または教師が人の個性を推定する操作を行うと、個性推定処理が実行される。なお、他の実施例では、個性推定処理が一定周期(たとえば、1日)毎に実行されるよう、個性推定処理の実行命令が自動的に発行されてもよい。
個性推定処理が実行されると、プロセッサ60はステップS71で、人位置情報を読み出す。人位置情報テーブル352から所定時間分の各人の人位置情報が読み出される。
続いて、プロセッサ60は、ステップS73で孤立時間割合計算処理を実行し、ステップS75で机外平均移動量計算処理を実行し、ステップS77で周囲人数計算処理を実行する。つまり、所定時間分の各人の人位置情報から、各人の孤立時間割合、各人の机外平均移動量および各人の周囲人数が求められる。また、孤立時間割合計算処理、机外平均移動量計算処理および周囲人数計算処理については、図14、図15および図16に示すフロー図を用いて説明するため、ここでの詳細な説明は省略する。なお、ステップS73−S77の処理を実行するプロセッサ60は取得手段として機能する。
続いて、ステップS79でプロセッサ60は、孤立時間割合、机外平均移動量および周囲人数から各人の特徴量ベクトルを作成する。つまり、孤立時間割合、机外平均移動量および周囲人数が各バッファから読み出され、それぞれを要素とする各人の特徴量ベクトルが作成される。また、作成された特徴量ベクトルは、特徴量バッファ344に記憶される。続いて、ステップS81でプロセッサ60は、特徴量ベクトルに基づいて各人の個性を推定する。つまり、第1判別モデルに対して各人の特徴量ベクトルを入力し、各人の社会的地位の高さ示す判別結果(推定結果)を得る。続いて、ステップS83でプロセッサ60は、推定結果を記憶する。つまり、判別結果に基づいて各人の社会的地位の高さを、推定結果テーブル354に記憶する。そして、ステップS83の処理が終了すると、プロセッサ60は個性推定処理を終了する。
なお、ステップS79の処理を実行するプロセッサ60は作成手段または第1作成手段として機能する。また、ステップS81の処理を実行するプロセッサ60は推定手段として機能する。
図14は孤立時間割合計算処理のフロー図である。図13の個性推定処理でステップS73の処理が実行されると、プロセッサ60は孤立時間割合計算処理を実行する。
ステップS101でプロセッサ60は、変数iを初期化する。続いて、ステップS103でプロセッサ60は、変数t、変数tmを初期化する。つまり変数tが初期化されるとともに、孤立時間割合計算処理において孤立時間が代入される変数tmが初期化される。
続いて、ステップS105でプロセッサ60は、時刻tにおいて人iの周囲に他人がいたか否かを判断する。つまり、数2の数式における関数isAloneを使用して、人iが時刻tにおいて孤立していたかが判断される。ステップS105で“NO”であれば、たとえば人iが孤立しておらず、関数isAloneが「0」を返した場合、プロセッサ60はステップS109の処理に進む。
一方、ステップS105で“YES”であれば、たとえば人iが孤立しており、関数isAloneが「1」を返した場合、ステップS107でプロセッサ60は、孤立時間tmに処理時間Δtを加算する。つまり、時刻tにおいて人iが孤立していたため、孤立時間tmに処理時間Δtが加算される。
続いて、ステップS109でプロセッサ60は、変数tを更新する。たとえば、次の時刻を示すために、変数tに対して処理時間Δtが加算される。続いて、ステップS111でプロセッサ60は、変数tが所定時間(i)より大きいか否かを判断する。たとえば、人iが授業を受け、授業中に生成された人位置情報から個性が推定される場合、授業時間が所定時間(i)とされる。そして、プロセッサ60は、授業時間の中で人iが孤立していた時間の計算が終了したかを判断する。ステップS111で“NO”であれば、つまり人iの孤立時間の計算が終了していなければ、プロセッサ60はステップS105の処理に戻る。
一方、ステップS111で“YES”であれば、つまり人iの孤立時間の計算が終了すると、ステップS113でプロセッサ60は、孤立時間tmに基づいて人iの孤立時間割合(i)を算出する。たとえば、授業を受けた人iが授業時間のうち孤立していた時間の割合が算出される。なお、ステップS113で算出される値は、数1の数式を利用して求められる孤立時間割合(i)と同じ値となる。また、ステップS113の処理を実行するプロセッサ60は第1取得手段として機能する。
続いて、ステップS115でプロセッサ60は、孤立時間割合(i)を記憶する。つまり、ステップS113で算出された人iの孤立時間割合(i)が、孤立時間割合バッファ338に記憶される。
続いて、プロセッサ60は、ステップS117で変数iをインクリメントし、ステップS119で変数iが最大人数Npと一致するか否かを判断する。つまり、ステップS119では、全ての人の孤立時間割合が算出されたかが判断される。ステップS119で“NO”であれば、つまり全ての人の孤立時間割合が算出されていなければ、プロセッサ60はステップS103の処理に戻る。
一方、ステップS119で“YES”であれば、つまり全ての人の孤立時間割合が算出されると、プロセッサ60は孤立時間割合計算処理を終了して、個性推定処理に戻る。
図15は机外平均移動量計算処理のフロー図である。図13の個性推定処理でステップS75の処理が実行されると、プロセッサ60は机外平均移動量計算処理を実行する。
ステップS131でプロセッサ60は、変数iを初期化する。続いて、ステップS133でプロセッサ60は、変数t、変数tmを初期化する。つまり変数tが初期化されるとともに、机外平均移動量計算処理において机外総移動量が代入される変数tmが初期化される。
ステップS135でプロセッサ60は、時刻tにおいて人iが机から離れていたか否かを判断する。つまり、時刻tにおいて人iが自身に割り当てられている机iから離れて移動していたかが判断される。また、具体的には、数4に示す関数isOutsideを使用して、人iが時刻tにおいて机iから離れていたかが判断される。ステップS135で“NO”であれば、つまり人iが机iから離れていなければ、プロセッサ60はステップS141の処理に進む。
一方、ステップS135で“YES”であれば、つまり人iが机iから離れて移動していれば、ステップS137でプロセッサ60は、机外移動量を算出する。たとえば、机外移動量として、時刻tの人iの位置と時刻t+Δsの人iの位置との距離(差)が算出される。続いて、ステップS139でプロセッサ60は、机外総移動量tmを更新する。つまり、ステップS137で算出された机外移動量が机外総移動量tmに加算される。
続いて、ステップS141でプロセッサ60は、変数tに一定時間Δsを加算する。つまり、次の時刻tを示すために変数tに一定時間Δsが換算される。続いて、ステップS143でプロセッサ60は、変数tが所定時間よりも大きいかが判断される。つまり、人iの机外総移動量の計算が終了したが判断される。ステップS143で“NO”であれば、つまり人iの机外総移動量の計算が終了していなければ、プロセッサ60はステップS135の処理に戻る。
一方、ステップS143で“YES”であれば、つまり人iの机外総移動量の計算が終了すると、ステップS145でプロセッサ60は、机外総移動量tmに基づいて人iの机外平均移動量(i)を算出する。つまり、所定時間において人iが机を離れて移動した移動量の平均が算出される。なお、ステップS145で算出される値は、数3を利用して求められる机外平均移動量(i)と同じ値となる。また、ステップS145の処理を実行するプロセッサ60は第2取得手段として機能する。
続いて、ステップS147でプロセッサ60は、机外平均移動量(i)を記憶する。つまり、ステップS145で算出された人iの机外平均移動量(i)が、机外平均移動量バッファ340に記憶される。
続いて、ステップS60は、ステップS149で変数iをインクリメントし、ステップS151で変数iが最大人数Npと一致するか否かを判断する。つまり、ステップS151では、全ての人の机外平均移動量が算出されたかが判断される。ステップS151で“NO”であれば、つまり全ての人の机外平均移動量が算出されていなければ、プロセッサ60はステップS133の処理に戻る。一方、ステップS151で“YES”であれば、つまり全ての人の机外平均移動量が算出されると、プロセッサ60は机外平均移動量計算処理を終了して、個性推定処理に戻る。
図16は周囲人数計算処理のフロー図である。図13の個性推定処理でステップS77の処理が実行されると、プロセッサ60は周囲人数計算処理を実行する。
ステップS171でプロセッサ60は、変数iを初期化する。続いて、ステップS173でプロセッサ60は、変数t、変数tmを初期化する。つまり変数tが初期化されるとともに、積算周囲人数が代入される変数tmが初期化される。
続いて、ステップS175でプロセッサ60は、時刻tにおける人iの周囲の他人の数を算出する。つまり、時刻tにおいて、人iと他人jとの距離が第2閾値DTHより短いかが判断され、距離が第2閾値DTHより人の総和が算出される。続いて、ステップS177でプロセッサ60は、積算周囲人数tmを更新する。つまり、時刻tにおいて人iの周囲にいた他人の数が、積算周囲人数tmに加算される。
続いて、ステップS179でプロセッサ60は、変数tを更新する。たとえば、次の時刻を示すために、変数tに対して処理時間Δtが加算される。続いて、ステップS181でプロセッサ60は、変数tが所定時間より大きいか否かを判断する。つまり、積算周囲人数tmの計算が終了したかが判断される。ステップS181で“NO”であれば、つまり積算周囲人数tmの計算が終了していなければ、プロセッサ60はステップS175の処理に戻る。
一方、ステップS181で“YES”であれば、つまり積算周囲人数tmの計算が終了すると、ステップS183でプロセッサ60は、積算周囲人数tmに基づいて人iの周囲人数(i)を算出する。所定時間内における人iの周囲にいた他人の数が算出される。なお、ステップS183で算出された値は、数5を利用して求められる周囲人数(i)と同じ値となる。また、ステップS183の処理を実行するプロセッサ60は第3取得手段として機能する。
続いて、ステップS185でプロセッサ60は、周囲人数(i)を記憶する。つまりステップS183で算出された人iの周囲人数(i)が、周囲人数バッファ342に記憶される。
続いて、ステップS60は、ステップS187で変数iをインクリメントし、ステップS189で変数iが最大人数Npと一致するか否かを判断する。つまり、ステップS189では、全ての人の周囲人数が算出されたかが判断される。ステップS189で“NO”であれば、つまり全ての人の周囲人数が算出されていなければ、プロセッサ60はステップS173の処理に戻る。
一方、ステップS189で“YES”であれば、つまり全ての人の周囲人数が算出されると、プロセッサ60は周囲人数計算処理を終了して、個性推定処理に戻る。
<第2実施例>
第2実施例では、人の個性として「Performance Goal」を推定する。「Performance Goal」とは、他人から良い評価をえることによって有能感を得ようとする目標への関心、または他者から良い評価を得たり、悪い評価を避けたりすることへの関心のことであり、「人の遂行近接目標達成への関心」と言われることもある。特に、空間が小学校の教室であり、人が学生である場合は、「人の遂行近接目標達成への関心」のことを、「他の生徒よりも良い成績でありたい気持ち」または「学習へのモチベーション」と言うことがある。
なお、第2実施例では、空間、人、中央制御装置10、距離画像センサ12およびRGBカメラ14などは、第1実施例と略同じであるため、これらの詳細な説明は省略する。
まず、第2実施例では、第1実施例で生成された人位置情報を利用して、授業時間または休み時間などの所定時間のうち人が着席していた時間の割合(以下、着席時間割合または第2割合と言う。)をさらに算出する。なお、着席時間割合は座り時間割合と言われることもある。
人の着席時間割合は数7および数8に示す数式を利用して計算する。数7において着席時間割合(i)は、所定時間(i)における人iの着席時間割合を示す。isSittingは、人iが時刻tにおいて着席していた(座っていた)かを判断する関数である。数8において、HeadHeightは、時刻tにおいて人iの頭の高さ(位置)を返す関数であり、H
THは人iが着席していたかを判断するために用いる第4閾値である。なお、数7および数8において変数i、変数t(t
0,t
n)および所定時間(i)は数1および数2と同じであるため、詳細な説明は省略する。
[数7]
数8に着目して、関数isSittingは、時刻tにおける人iの頭の高さ(位置)関数HeadHeightによって取得し、頭の高さが第4閾値HTHよりも低ければ「1」を返し、高ければ「0」を返す。つまり、関数isSittingは人iが時刻tにおいて着席していれば「1」を返し、着席していなければ「0」を返す。また、数7の数式では、関数isSittingによって時刻tにおいて人iが着席していたと判断され「1」が返されると、時刻tにおける人iの着席時間がΔt(=「1」×Δt)秒とされる。一方、関数isSittingによって時刻tにおいて人iが着席していないと判断され「0」が返されると、時刻tにおける人iの着席時間が0(=「0」×Δt)とされる。このようにして求められた時刻tにおける着席時間の総和は、所定時間(i)のうち人iが着席していた時間となる。そして、時刻tにおける着席時間の総和を所定時間(i)で割ることで、人iの着席時間割合(i)が求められる。このようにして求めた着席時間割合(i)は、メモリ64のバッファに記憶される。なお、着席時間割合も、人の行動に関するパラメータに含まれる。
続いて、人の行動に関するパラメータを利用して、第2実施例では人の個性として「Performance Goal」を推定する。第2実施例の「Performance Goal」は、第1実施例の社会的地位の影響を受ける。そのため、第1実施例の孤立時間割合、机外平均移動量および周囲人数は、「Performance Goal」の推定にも利用される。そして、「Performance Goal」が強く、たとえば学習へのモチベーションが高い人は、授業中などは着席して勉強に取り組むため着席時間が長くなると考えられる。
そこで、第2実施例では、これらの人の行動に関するパラメータを利用して、「Performance Goal」が「強い」または「弱い」を判別する第2判別モデルを作成する。
ここでは、まず人の孤立時間割合、机外平均移動量、周囲人数および着席時間割合を要素とする複数の特徴量ベクトルを作成する。
次に、人へのアンケートによって各人の「Performance Goal」の強さについて事前に調査を行う。その調査結果に基づいて、複数の特徴ベクトルに対して「Performance Goal」が「強い」または「弱い」のラベル付けをした教師データを作成する。そして、それらの教師データを、SVMなどの機械学習手法によって学習する。その結果、「Performance Goal」が「強い」または「弱い」を判別する第2判別モデルが作成される。この第2判別モデルに対して人の未知の特徴量ベクトルを入力すると、人の「Performance Goal」が「強い」または「弱い」を示す判別結果、つまり「Performance Goal」の強さを示す推定結果が出力される。このように、第2実施例では、空間内で任意に行動する人の「Performance Goal(人の遂行近接目標達成への関心)」の強さを、容易に推定することが出来る。
なお、上記のアンケートは、教師データを作成するために行うものであるため、空間内の全ての人に受けさせる必要はない。
図17は、推定された「Performance Goal」が記憶される第2実施例の推定結果テーブル354の一例を示す図解図である。図17を参照して、第2実施例の推定結果テーブル354には、人IDおよび「Performance Goal」の列が含まれる。そして、第2判別モデルによる判別結果、つまり「Performance Goal」の推定結果は人IDに対応して記憶されている。たとえば、人ID「0001」および「0003」に対応して「high(強い)」が記憶されており、人ID「0002」に対応して「low(弱い)」が記憶されている。つまり、人IDが「0001」および「0003」の人は、「Performance Goal」が強いことが示されている。一方、人IDが「0002」の人は「Performance Goal」が弱いことが示されている。
上述では第2実施例の特徴を概説した。以下では、図18に示す中央制御装置10のメモリ64のメモリマップおよび図19、図20に示すフロー図を用いて第2実施例について詳細に説明する。
図18は中央制御装置10のメモリ64のメモリマップの一部の一例を示す図解図である。プログラム記憶領域302には、第1実施例のプログラムに加えて、着席時間割合を計算するための着席時間割合計算プログラム326がさらに記憶されている。
また、データ記憶領域304には、第1実施例のバッファに加えて、着席時間割合が一時的に記憶される着席時間割合バッファ356がさらに設けられている。
第2実施例の中央制御装置10のプロセッサ60は、Linux(登録商標)ベースのOSまたはその他のOSの制御下で、第1実施例の顔識別処理、位置検出処理、人位置情報生成処理、机外平均移動量計算処理および周囲人数計算処理に加えて、図19に示す個性推定処理および図20に示す着席時間割合計算処理などを含む、複数のタスクを処理する。
図19は第2実施例の個性推定処理のフロー図である。個性推定処理が実行されると、プロセッサ60は、ステップS71で人位置情報を読み出し、ステップS73で孤立時間割合計算処理を実行し、ステップS75で机外平均移動量計算処理を実行し、ステップS77で周囲人数計算処理を実行する。なお、これらの処理は、第1実施例と略同じであるため、ここでの詳細な説明は省略する。
続いて、ステップS201でプロセッサ60は、着席時間割合計算処理を実行する。所定時間分の各人の人位置情報から、各人の着席時間割合が求められる。なお、着席時間割合計算処理については、図20に示すフロー図を用いて説明するため、ここでの詳細な説明は省略する。
続いて、ステップS203でプロセッサ60は、孤立時間割合、机外平均移動量、周囲人数および着席時間割合から各人の特徴量ベクトルを作成する。つまり、孤立時間割合、机外平均移動量、周囲人数および着席時間割合が各バッファから読み出され、それぞれを要素とする各人の特徴量ベクトルが作成される。続いて、ステップS81でプロセッサ60は、特徴量ベクトルに基づいて各人の個性を推定する。つまり、第2実施例では第2判別モデルに対して各人の特徴量ベクトルを入力し、各人の「Performance Goal」の強さを示す判別結果(推定結果)を得る。続いて、ステップS83でプロセッサ60は、推定結果を記憶する。つまり、判別結果に基づいて各人の「Performance Goal」の強さを、推定結果テーブル354に記憶する。そして、ステップS83の処理が終了すると、プロセッサ60は第2実施例の個性推定処理を終了する。
なお、ステップS201の処理を実行するプロセッサ60は取得手段として機能し、ステップS203の処理を実行するプロセッサ60は作成手段または第2作成手段として機能する。
図20は着席時間割合計算処理のフロー図である。図19の個性推定処理でステップS201の処理が実行されると、プロセッサ60は着席時間割合計算処理を実行する。
プロセッサ60は、ステップS221で変数iを初期化し、ステップS223で変数t、変数tmを初期化する。つまり、変数iおよび変数tが初期化されると共に、着席時間割合計算処理において着席時間が代入される変数tmが初期化される。
続いて、ステップS225でプロセッサ60は、時刻tにおいて人iの頭の位置が第4閾値HTHより低いか否かを判断する。つまり、時刻tにおいて人iが着席していたかが判断される。また、具体的には、数8の数式における関数isSittingを利用して、時刻tにおいて人iが着席していたかが判断される。ステップS225で“NO”であれば、つまり時刻tにいて人iが着席していなければ、プロセッサ60はステップS229の処理に進む。
一方、ステップS225で“YES”であれば、つまり時刻tにおいて人iが着席していた場合、ステップS227でプロセッサ60は、着席時間tmに処理時間Δtを加算する。つまり、時刻tにおいて人iが着席していたため、着席時間tmに処理時間Δtが加算される。
続いて、ステップS229でプロセッサ60は、変数tを更新する。たとえば、次の時刻を示すために、変数tに対して処理時間Δtが加算される。続いて、ステップS231でプロセッサ60は、変数tが所定時間(i)より大きいか否かを判断する。つまり、所定時間(i)における人iの着席時間tmが算出されたかが判断される。ステップS231で“NO”であれば、つまり所定時間(i)における人iの着席時間tmが算出されていなければ、プロセッサ60はステップS225の処理に戻る。
一方、ステップS231で“YES”であれば、つまり所定時間(i)における人iの着席時間tmが算出されていれば、ステップS233でプロセッサ60は、着席時間tmに基づいて人iの着席時間割合(i)を算出する。つまり、所定時間(i)における人iの着席時間割合(i)が算出される。なお、ステップS233で算出された値は、数7を利用して求められる着席時間割合(i)と同じ値となる。また、ステップS233の処理を実行するプロセッサ60は第4取得手段として機能する。
続いて、ステップS235でプロセッサ60は、着席時間割合(i)を記憶する。つまり、人iの着席時間割合(i)が着席時間割合バッファ356に記憶される。
続いて、プロセッサ60は、ステップS237で変数iをインクリメントし、ステップS239で変数iが最大人数Npと一致したか否かを判断する。つまり、ステップS239では、全ての人の着席時間割合が算出されたかが判断される。ステップS239で“NO”であれば、つまり全ての人の着席時間割合が算出されていなければ、プロセッサ60はステップS223の処理に戻る。一方、ステップS239で“YES”であれば、つまり全ての人の着席時間割合が算出されると、プロセッサ60は着席時間割合計算処理を終了して、図19に示す個性推定処理に戻る。
<第3実施例>
第3実施例では、人の個性として「Self−effecacy」を推定する。「Self−effecacy」とは、自身には目標を達成するための能力があるという感覚のことであり、自己効力感とも言わる。特に、空間が小学校の教室であり、人が学生である場合は、「Self−effecacy」のことを「学習能力」と言うこともある。
なお、第3実施例では、空間、人、距離画像センサ12およびRGBカメラ14などは、第1実施例と略同じであるため、これらの詳細な説明は省略する。
図21を参照して、第3実施例では、空間にはロボット16がさらに配置されており、中央制御装置10には、ロボット16がネットワーク1000を介して接続されている。
ロボット16は、相互作用指向のロボット(コミュニケーションロボット)でもあり、人のようなコミュニケーションの対象との間で、音声を含むコミュニケーション行動を実行する機能を備えている。また、ロボット16はコミュニケーションの一環として、人に対して授業などに関するクイズを出題するサービスを行う。ロボット16は、サービスを行う上で必要であれば、空間内を自律的に移動したり、中央制御装置10が付与する行動命令に基づいて動作したりする。
図22はロボット16の電気的な構成を示すブロック図である。図22を参照して、ロボット16は、プロセッサ90などを含む。プロセッサ90は、マイクロコンピュータ或いはCPUとも呼ばれ、バス92を介して、メモリ94、マイク96、スピーカ98、動作部100、眼カメラ102および通信部104などが接続される。
プロセッサ90はロボット16の動作を制御する。メモリ94はROMおよびRAMを含む。ROMには、ロボット16の動作を制御するための制御プログラムが予め記憶される。たとえば、外部コンピュータ(中央制御装置10)との間で必要なデータおよびコマンドを送受信するための通信プログラムなどが記憶される。また、RAMは、プロセッサ90のワークメモリおよびバッファメモリとして用いられる。
マイク96およびスピーカ98は、たとえばDSPで構成された音声入力/出力ボードを介してバス92に接続されている。そのため、プロセッサ90から与えられる音声合成データに従った音声または声がスピーカ74から出力される。また、マイク76からの音声入力がプロセッサ90に与えられる。
動作部100は、ロボット16を動作させるための各種モータと、各種モータを制御するための制御ボードとを含む。たとえば、プロセッサ90は、ロボット16の位置を変更する場合は、制御ボードに対して制御データを出力し、車輪などを回転させるモータを駆動させる。
眼カメラ102は、たとえばDSPで構成された入力/出力ボードを介してバス92と接続されている。入力/出力ボードは、眼カメラ102からの映像信号を取り込んで、プロセッサ90に与えている。
通信部104は、通信LANボードおよび無線通信装置を含む。DSPで構成された通信LANボードは、プロセッサ90から与えられた送信データを無線通信装置に与え、無線通信装置は送信データを、ネットワーク1000を介して外部コンピュータ(中央制御装置10)に送信する。また、通信LANボードは、無線通信装置を介してデータを受信し、受信したデータをプロセッサ90に与える。たとえば、送信データとしては、マイク96によって集音された周囲の音声データおよび眼カメラ102によって撮影された周囲の映像データなどである。
たとえば、ロボット16は、眼カメラ102から得られた画像を元にコミュニケーション相手の方に姿勢を向け、スピーカ98からクイズの内容を伝える音声を出力する。また、相手がクイズに対して回答したときの音声をマイク96によって取り込む。そして、取り込まれた音声に対して音声認識処理を施すことで回答の正誤を判断して、その判断結果に対応して、ロボット16は所定の音声を出力すると共に、所定の動作を行う。
続いて、第3実施例では、第1実施例で生成された人位置情報を利用して、授業時間または休み時間などの所定時間のうち人がロボット16の周囲に滞在していた時間の割合(以下、滞在時間割合または第3割合と言う。)をさらに算出する。
人の滞在時間割合は数9に示す数式を利用して計算される。数9において滞在時間割合(i)は、所定時間(i)における人iの滞在時間割合を示す。robotはロボット16を示す変数である。第3実施例では、ロボット16は1台であるため、robotに代入される値は常に同じである。だたし、複数のロボット16が空間に配置される場合は、robotには各ロボット16を識別するIDが代入される。なお、数9において変数i、変数t(t
0,t
n)、処理時間Δt、関数dist、関数pos、所定時間(i)は数1および数2と同じであるため、詳細な説明は省略する。また、数2の数式で利用した第2閾値D
THは、人iがロボット16の周囲に滞在したかを判断するために用いられる。
[数9]
数9の数式では、関数distによって、時刻tにおける人iとロボット16との距離が算出される。算出された距離が第2閾値DTHよりも短い場合、つまり人iがロボット16の周囲に滞在していた場合は、時刻tにおける人iの滞在時間がΔt秒とされる。一方、人iがロボット16の周囲に滞在していない場合は、時刻tにおける人iの滞在時間が0秒とされる。このようにして求めた時刻tにおける滞在時間の総和は、所定時間(i)のうち人iがロボット16の周囲に滞在した時間となる。そして、時刻tにおける滞在時間の総和を所定時間(i)で割ることで、人iの滞在時間割合(i)が求められる。このようにして求めた滞在時間割合(i)はメモリ64のバッファに記憶される。なお、滞在時間割合も、人の行動に関するパラメータに含まれる。
続いて、第3実施例では、人の行動に関するパラメータを利用して、人の個性として「自己効力感(Self−effecacy)」を推定する。人の自己効力感は、第2実施例の「Performance Goal」と同様、第1実施例の社会的地位の影響を受ける。そのため、第1実施例の孤立時間割合、机外平均移動量、周囲人数は、自己効力感の推定にも利用されると共に、第2実施例の着席時間割合も利用される。
たとえば、自己効力感が高く、たとえば自身に学業の能力があると考えている人は、授業中などは着席して勉強に取り組むため着席時間が長くなり、ロボット16が出題するクイズに答えるためにロボット16の周囲に滞在するため滞在時間も長くなると考えらえる。
そこで、第3実施例でも、人の行動に関するパラメータを利用して、自己効力感が「高い」または「低い」を判別する第3判別モデルを作成する。
ここでは、まず孤立時間割合、机外平均移動量、周囲人数、着席時間および滞在時間を要素とする複数の特徴量ベクトルを作成する。
次に、第3実施例でも、人へのアンケートによって各人の自己効力感の高さについて事前に調査を行う。その調査結果に基づいて、複数の特徴ベクトルに対して自己効力感が「高い」または「低い」のラベル付けをした教師データを作成する。そして、それらの教師データを、SVMなどの機械学習手法によって学習する。その結果、自己効力感が「高い」または「低い」を判別する第3判別モデルが作成される。この第3判別モデルに対して未知の特徴量ベクトルを入力すると、自己効力感が「高い」または「低い」を示す判別結果、つまり自己効力感の高さを示す推定結果が出力される。このように、第3実施例では、空間内で任意に行動する人の自己効力感の高さを、容易に推定することが出来る。
なお、上記のアンケートは、教師データを作成するために行うものであるため、空間内の全ての人に受けさせる必要はない。
図23は自己効力感(Self−effecacy)の推定結果が記憶される第3実施例の推定結果テーブル354の一例を示す図解図である。図23を参照して、第3実施例の推定結果テーブル354には、人IDに対応付けて第3判別モデルによる判別結果、つまりSelf−effecacy(自己効力感)の推定結果が記憶されている。たとえば、人ID「0003」に対応して「high」が記憶されており、人ID「0001」および「0002」に対応して「low」が記憶されている。つまり、人IDが「0003」の人は自己効力感が高いことが示されており、人IDが「0001」および「0002」の人は自己効力感が低いことが示されている。
上述では第3実施例の特徴を概説した。以下では、図24に示す中央制御装置10のメモリ64のメモリマップおよび図25、図26に示すフロー図を用いて第3実施例について詳細に説明する。
図24は中央制御装置10のメモリ64のメモリマップの一部の一例を示す図解図である。プログラム記憶領域302には、第1実施例および第2実施例のプログラムに加えて、滞在時間割合を計算するための滞在時間割合計算プログラム328がさらに記憶されている。
また、データ記憶領域304には、第1実施例および第2実施例のバッファに加えて、滞在時間割合が一時的に記憶される滞在時間割合バッファ358がさらに設けられている。
第3実施例の中央制御装置10のプロセッサ60は、Linux(登録商標)ベースのOSまたはその他のOSの制御下で、第1実施例の顔識別処理、位置検出処理、人位置情報生成処理、孤立時間割合計算処理および周囲人数計算処理と、第2実施例の着席時間割合計算処理とに加えて、図25に示す個性推定処理および図26に示す滞在時間割合計算処理などを含む、複数のタスクを処理する。
図25は第3実施例の個性推定処理のフロー図である。個性推定処理が実行されると、プロセッサ60は、ステップS71で人位置情報を読み出し、ステップS73で孤立時間割合計算処理を実行し、ステップS75で机外平均移動量計算処理を実行し、ステップS77で周囲人数計算処理を実行し、ステップS201で着席時間割合計算処理を実行する。なお、これらの処理は、第1実施例および第2実施例と略同じであるため、ここでの詳細な説明は省略する。
続いて、ステップS301でプロセッサ60は、滞在時間割合計算処理を実行する。所定時間分の各人の人位置情報から、各人の滞在時間割合が算出される。なお、滞在時間割合計算処理については、図26に示すフロー図を用いて説明するため、ここでの詳細な説明は省略する。
続いて、ステップS303でプロセッサ60は、孤立時間割合、机外平均移動量、周囲人数、着席時間割合および滞在時間割合から各人の特徴量ベクトルを作成する。つまり、孤立時間割合、机外平均移動量、周囲人数、着席時間割合および滞在時間割合が各バッファから読み出され、それぞれを要素とする各人の特徴量ベクトルが作成される。続いて、ステップS81でプロセッサ60は、特徴ベクトルに基づいて各人の個性を推定する。つまり、第3実施例では第3判別モデルに対して各人の特徴量ベクトルを入力し、各人の自己効力感の高さを示す判別結果(推定結果)を得る。続いて、ステップS83でプロセッサ60は、推定結果を記憶する。つまり、判断結果に基づいて各人の自己効力感の高さを、推定結果テーブル354に記憶する。そして、ステップS83の処理が終了すると、プロセッサ60は第3実施例の個性推定処理を終了する。
なお、ステップS301の処理を実行するプロセッサ60は取得手段として機能する。また、ステップS303の処理を実行するプロセッサ60は作成手段または第3作成手段として機能する。
図26は滞在時間割合計算処理のフロー図である。図25の個性推定処理でステップS301の処理が実行されると、プロセッサ60は滞在時間割合計算処理を実行する。
プロセッサ60は、ステップS321で変数iを初期化し、ステップS323で変数t、変数tmを初期化する。つまり、変数iおよび変数tが初期化されると共に、滞在時間割合計算処理において滞在時間が代入される変数tmが初期化される。
続いて、ステップS325でプロセッサ60は、時刻tにおいて人iがロボット16の周囲に滞在していたか否かを判断する。つまり、時刻tにおいて人iとロボット16との距離が第2閾値DTHよりも短いかが判断される。ステップS325で“NO”であれば、つまり時刻tにおいて人iがロボット16の周囲に滞在していなければ、プロセッサ60はステップS329の処理に進む。
一方、ステップS325で“YES”であれば、つまり時刻tにおいて人iがロボット16の周囲に滞在してれば、ステップS327でプロセッサ60は、滞在時間tmに処理時間Δtを加算する。つまり、時刻tにおいて人iがロボット16の周囲に滞在していたため、滞在時間tmに処理時間Δtが加算される。
続いて、ステップS329でプロセッサ60は、変数tを更新する。たとえば、次の時刻を示すために、変数tに対して処理時間Δtが加算される。続いて、ステップS331でプロセッサ60は、変数tが所定時間(i)よりも大きいか否かを判断する。つまり、所定時間(i)における人iの滞在時間tmが算出されたかが判断される。ステップS331で“NO”であれば、つまり所定時間(i)における人iの滞在時間tmが算出されていなければ、プロセッサ60はステップS325の処理に戻る。
一方、ステップS331で“YES”であれば、つまり所定時間(i)における人iの滞在時間tmが算出されると、ステップS333でプロセッサ60は、滞在時間tmに基づいて人iの滞在時間割合を算出する。つまり、所定時間(i)における人iの滞在時間割合が算出される。なお、ステップS333で算出された値は、数9を利用して求められる滞在時間割合(i)と同じ値となる。また、ステップS333の処理を実行するプロセッサ60は第5取得手段として機能する。
続いて、ステップS335でプロセッサ60は、滞在時間割合(i)を記憶する。つまり、人iの滞在時間割合(i)が滞在時間割合バッファ358に記憶される。
続いて、プロセッサ60は、ステップS337で変数iをインクリメントし、ステップS339で変数iが最大人数Npと一致したか否かを判断する。つまり、ステップS339では、全ての人の滞在時間割合が算出されたかが判断される。ステップS339で“NO”であれば、つまり全ての人の滞在時間割合が算出されていなければ、プロセッサ60はステップS323の処理に戻る。一方、ステップS339で“YES”であれば、つまり全ての人の滞在時間割合が算出されると、プロセッサ60は滞在時間割合計算処理を終了して、図25に示す個性推定処理に戻る。
なお、第1実施例、第2実施例および第3実施例は任意に組み合わせることが出来る。たとえば、第1実施例と第2実施例とを組み合わせることで、人の個性として社会的地位および「Performance Goal」が同時に推定される。また、第1実施例から第3実施例までを組み合わせることで、人の個性として社会的地位、「Performance Goal」および「自己効力感」が同時に推定される。そして、他の組み合わせについては、容易に想到できるため他の組み合わせの説明は簡単のため省略する。
また、「Performance Goal」および「自己効力感」は人の性格に関係するため、第2実施例および第3実施例の中央制御装置10は、性格推定装置と言われることもある。
また、他の実施例では、第1実施例の社会的地位の高さを推定するために、第3実施例のロボット16を利用する場合、人の行動に関するパラメータの1つとして、人がロボット16の周囲に滞在した時間がさらに利用されてもよい。
また、その他の実施例では、人の行動に関するパラメータを用いて、試験の点数の高さが推定されてもよい。
また、さらにその他の実施例では、人の性格を構成すると言われる「特性5因子論(ビックファイブ)」をそれぞれ推定し、その推定結果から人の性格が推定されてもよい。
また、他の実施例では、空間は老人ホームの共用スペースなどであってもよく、中央制御装置10は、老人ホームの共用スペースなどで老人(人)の個性を推定してもよい。また、本実施例とは異なる空間で「社会的地位」、「Performance Goal」および「自己効力感」を推定する場合、第1実施例−第3実施例に示した人の行動に関するパラメータの組み合わせを変えて、各個性が推定されてもよい。また、人の行動に関するパラメータの組み合わせを変える場合、交差検証などを利用して、精度が最も高くなるように人の行動に関するパラメータの組み合わせが決められてもよい。
また、その他の実施例では、所定時間において人が机に関係なく移動したときの平均移動量などが人の行動に関するパラメータとして算出されてもよい。
また、本実施例では、人に携帯端末などを所持させずに人の位置情報を生成して、人の個性を推定したが、さらにその他の実施例では、人IDを対応付けたスマートフォンなどの携帯端末を人に所持させ、スマートフォンから送信される情報や、通信における電波強度などを利用して人位置情報が生成されてもよい。また、人が着席する場所が予め決められている場合は、そのときの状態を利用して人の位置に人IDを関連付け、人の位置を随時追跡することで人位置情報を作成してもよい。そして、これらの場合、RGBカメラ14は不要となる。
また、上述の実施例では、閾値(所定値)などに対して「より大きい」、「より大きい」、「より高い」などの言葉を用いたが、これらの言葉には「閾値以上」の意味が含まれる。同様に「閾値よりも小さい」などには「閾値以下」および「閾値未満」の意味が含まれる。
また、本実施例で説明した複数のプログラムは、データ配信用のサーバのHDDに記憶され、ネットワークを介して本実施例と同等の構成の中央制御装置10に配信されてもよい。また、CD, DVD, BD (Blu-ray(登録商標) Disc)などの光学ディスク、USBメモリおよびメモリカードなどの記憶媒体にこれらのプログラムを記憶させた状態で、その記憶媒体が販売または配布されてもよい。そして、上記したサーバまたは記憶媒体などを通じてダウンロードされた、上記複数のプログラムが、本実施例と同等の構成の中央制御装置10に適用された場合、本実施例と同等の効果が得られる。
そして、本明細書中で挙げた、具体的な数値は、いずれも単なる一例であり、製品の仕様変更などに応じて適宜変更可能である。