以下、図を参照して、本発明の実施の形態について説明する。
図1は、本発明を適用した顔向き検出装置の第1の実施の形態を示すブロック図である。顔向き検出装置1は、カメラ11、顔検出部12、イニシャル方向取得部13、顔向き検出部14、および、記憶部15を含むように構成される。
カメラ11は、顔向き検出装置1が設けられている車両の運転席に座っているドライバ2の顔を撮影した画像(以下、入力画像と称する)を顔検出部12および顔向き検出部14に供給する。
なお、カメラ11は、ドライバの体格および姿勢などの違いに関わらず、運転中のドライバ2の顔をできる限り撮影することができる位置に設置されることが望ましい。例えば、カメラ11は、車両内のセンタミラー(ルームミラー)の根元付近(センタミラーが車両に取り付けられているあたり)に設置され、前方左斜め上方向からドライバ2を撮影する。
顔検出部12は、所定の手法に基づいて、入力画像の中からドライバ2の顔の位置を検出し、検出結果を示す情報をイニシャル方向取得部13および顔向き検出部14に供給する。なお、顔検出部12が、入力画像の中からドライバ2の顔の位置を検出する手法は、特定の手法に限定されるものではなく、顔の位置をより迅速かつ正確に検出できる手法が望ましい。
イニシャル方向取得部13は、図2を参照して後述するように、記憶部15に記憶されている、入力画像におけるドライバの顔の位置と、ドライバが運転中に正面を向いている場合の顔の向きであるイニシャル方向とが予め関連づけられている変換テーブルから、顔検出部12により検出された、入力画像におけるドライバ2の顔の位置に対応するイニシャル方向を取得する。イニシャル方向取得部13は、取得したイニシャル方向を示す情報を、顔向き検出装置1の後段の装置に供給する。なお、変換テーブルについては、図4乃至図6を参照して後述する。また、以下では、イニシャル方向は、カメラ11から見た顔の向き、すなわち、入力画像における顔の向きにより表されるものとする。
顔向き検出部14は、所定の手法を用いて、カメラ11から見た、すなわち、入力画像におけるドライバ2の顔の向きを検出する。顔向き検出部14は、検出結果を示す情報を、顔向き検出装置1の後段の装置に供給する。なお、顔向き検出部14が、ドライバ2の顔の向きを検出する手法は、特定の手法に限定されるものではなく、顔の向きをより迅速かつ正確に検出できる手法が望ましい。例えば、顔向きを検出する手法の詳細については、特許2982204号公報などに、その詳細が開示されている。
顔向き検出装置1の後段の装置は、例えば、イニシャル方向取得部13からの情報、および、顔向き検出部14からの検出結果に基づいて、イニシャル方向を基準とするドライバ2の顔の向きを検出し、検出結果に基づいて、所定の処理(例えば、ドライバ2の脇見の検出、車両の制御など)を行う。
次に、図2のフローチャートを参照して、顔向き検出装置1により実行される顔向き検出処理を説明する。なお、この処理は、例えば、顔向き検出装置1が設けられている車両のアクセサリー(ACC)用の電源からの顔向き検出装置1への供給が開始されたとき、開始される。
ステップS1において、カメラ11は、運転席周辺の撮影を開始する。すなわち、カメラ11により運転席に座っているドライバ2の顔の撮影が開始される。
ステップS2において、顔検出部12および顔向き検出部14は、カメラ11により撮影された入力画像を取得する。
ステップS3において、顔検出部12は、ドライバ2の顔の位置を検出する。具体的には、まず、顔検出部12は、所定の手法を用いて、入力画像の中からドライバ2の顔が写っている顔領域を検出する。図3は、入力画像の例を示しており、図3の例においては、ドライバ2の顔が写っている顔領域31が検出される。次に、顔検出部12は、検出した顔領域の中心点をドライバ2の顔の位置として検出する。図3の例においては、顔領域31の中心点32が、ドライバの顔の位置として検出される。
ステップS4において、顔検出部12は、ステップS3の処理において、ドライバ2の顔が検出できたか否かを判定する。ドライバ2の顔が検出できたと判定された場合、処理はステップS5に進む。
ステップS5において、イニシャル方向取得部13は、イニシャル方向を取得する。具体的には、顔検出部12は、ドライバ2の顔が検出できたと判定した場合、検出結果を示す情報を、イニシャル方向取得部13に供給する。イニシャル方向取得部13は、記憶部15に記憶されている変換テーブルを読み出す。ここで、図4乃至図6を参照して、変換テーブルについて説明する。
図4は、ドライバ2およびカメラ11を上から見た図であり、ドライバ2とカメラ11との位置関係を示している。なお、図中、矢印41は、車両の前方の方向を示し、位置42および43は、ドライバ2の頭部の位置を示している。また、図4の例において、カメラ11は、車両内のセンタミラー(ルームミラー)の根元、すなわち、前方左斜め上方向からドライバ2を撮影する位置に設置されているものとする。
一般的に、運転中にドライバが正面を向いている場合の顔の位置は、ドライバ、または、ドライビングポジションの違い(例えば、座席の前後の位置、背もたれの角度などによる運転姿勢の違い)により、車両の前後および上下方向に変化する。一方、一般的に運転席は左右方向に移動しないため、ドライバまたはドライビングポジションが違っても、運転中にドライバが正面を向いている場合の顔の位置は、左右方向にはほとんど変化しない。すなわち、運転中にドライバが正面を向いている場合の顔の位置は、ドライバまたはドライビングポジションの違いにより、車両の前後および上下方向の2次元の平面上を変化すると考えられる。
また、一般的に、ドライバまたはドライビングポジションが違っても、運転中にドライバが正面を向いている場合の車両に対する顔の向きは、ほぼ同様であり、図4の例においては、ほぼ矢印41の方向となる。従って、ドライバまたはドライビングポジションが違っても、ドライバの顔の位置が同じであれば、運転中にドライバが正面を向いている場合のカメラ11から見たドライバの顔の向き、すなわち、イニシャル方向はほぼ同じになり、ドライバの顔の位置が異なれば、イニシャル方向はほぼ異なると言える。すなわち、カメラ11に対するドライバの顔の位置と、イニシャル方向とはほぼ1対1に対応すると言える。
例えば、ドライバ2が矢印41の方向を向いている場合、ドライバ2の頭部が位置42にあるとき、カメラ11から見たドライバ2の左右方向(水平方向)の顔の向きを示す角度をθ1、ドライバ2の頭部が位置43にあるとき、カメラ11から見たドライバ2の左右方向(水平方向)の顔の向きを示す角度をθ2とすると、θ1<θ2となる。すなわち、運転中にドライバ2が正面を向いている場合、カメラ11から見たドライバ2の顔の向きは、ドライバ2の顔の位置が前方にあるほど、例えば、ドライバ2のドライビングポジションが前方にあるほど、左方向の傾き(角度)が大きくなり、ドライバ2の顔の位置が後方にあるほど、例えば、ドライバ2のドライビングポジションが後方にあるほど、左方向の傾き(角度)が小さくなる。
また、図示はしないが、同様に、運転中にドライバ2が正面を向いている場合、カメラ11から見たドライバ2の顔の向きは、ドライバ2の顔の位置が下にあるほど、例えば、ドライバ2の座高が低いほど、下方向の傾き(角度)が大きくなり、ドライバ2の顔の位置が上にあるほど、例えば、ドライバ2の座高が高いほど、下方向の傾き(角度)が小さくなる。
上述したように、運転中のカメラ11に対するドライバの顔の位置は、車両の前後および上下方向の2次元の平面上を移動し、かつ、カメラ11に対するドライバの顔の位置と、イニシャル方向とはほぼ1対1に対応するので、入力画像におけるドライバの顔の位置と、イニシャル方向とはほぼ1対1に対応する。従って、入力画像におけるドライバの顔の位置が分かれば、イニシャル方向をほぼ正確に推定することができる。
図5は、運転中にドライバが正面を向いている場合の顔の向きと、入力画像におけるドライバの顔の位置との関係を模式的に表した図である。なお、図5においては、入力画像が縦3×横4の合計12の領域に分割されている。例えば、ドライバの顔の位置が左下隅の領域内である場合、入力画像におけるドライバの顔の向き(カメラ11から見たドライバの顔の向き、すなわち、イニシャル方向)は、左右方向については、ドライバの顔の位置が左上隅の領域内である場合とほぼ同じ方向となり、上下方向については、ドライバの顔の位置が右下隅の領域内である場合とほぼ同じ方向となる。同様に、ドライバの顔の位置が右上隅の領域内である場合、入力画像におけるドライバの顔の向きは、左右方向については、ドライバの顔の位置が右下隅の領域内である場合とほぼ同じ方向となり、上下方向については、ドライバの顔の位置が入力画像の左上隅の領域内である場合とほぼ同じ方向となる。
図6は、変換テーブルの例を示す図である。変換テーブルは、ドライバまたはドライビングポジションの違いに関わらず、入力画像におけるドライバの顔の位置とイニシャル方向とがほぼ1対1に対応するという性質に基づいて、入力画像におけるドライバの顔の位置とイニシャル方向とが関連づけられたデータである。図6においては、図5の場合と同様に、入力画像が縦3×横4の合計12の領域に分割され、各領域に対してイニシャル方向が1つずつ対応づけられている。例えば、図6の変換テーブルにおいては、入力画像の左上隅の領域に対応するイニシャル方向は、左方向45°、下方向0°であり、入力画像の右下隅の領域に対応するイニシャル方向は、左方向30°、下方向10°である。
なお、各車種、および、想定されるカメラ11の設置位置ごとに、事前に計測などを行うことにより、各車種および設置位置に応じた変換テーブルが個別に作成され、顔向き検出装置1においては、カメラ11が設置される車種および設置位置に対応した変換テーブルが用いられる。
図2に戻り、ステップS5において、イニシャル方向取得部13は、変換テーブルから、顔検出部12により検出されたドライバの顔の位置に対応するイニシャル方向を取得する。
例えば、図6の変換テーブルを用いた場合、イニシャル方向取得部13は、入力画像の左上隅の領域にドライバの顔が検出されたとき、左方向45°、下方向0°をイニシャル方向として取得し、入力画像の右下隅の領域にドライバの顔が検出されたとき、左方向30°、下方向10°をイニシャル方向として取得する。
ステップS6において、イニシャル方向取得部13は、イニシャル方向を出力する。具体的には、イニシャル方向取得部13は、取得したイニシャル方向を示す情報を、顔向き検出装置1の後段の装置に出力する。
ステップS7において、顔向き検出部14は、ドライバ2の顔の向きを検出する。具体的には、顔検出部12は、ドライバ2の顔が検出できたと判定した場合、検出結果を示す情報を顔向き検出部14に供給する。顔向き検出部14は、所定の手法を用いて、入力画像、および、顔検出部12により検出されたドライバ2の顔の位置に基づいて、カメラ11から見たドライバの顔の向きを検出する。
ステップS8において、顔向き検出部14は、ステップS7の処理において、ドライバ2の顔の向きが検出できたか否かを判定する。ドライバ2の顔の向きが検出できたと判定された場合、処理はステップS9に進む。
ステップS9において、顔向き検出部14は、ドライバ2の顔の向きを出力する。具体的には、顔向き検出部14は、検出したドライバ2の顔の向きの検出結果を示す情報を、顔向き検出装置1の後段の装置に出力する。
顔向き検出装置1の後段の装置は、例えば、ステップS6の処理において取得したイニシャル方向、および、ステップS9の処理において取得した現在のドライバの顔の向きに基づいて、イニシャル方向を基準とするドライバ2の顔の向きを検出し、検出結果に基づいて、所定の処理(例えば、ドライバ2の脇見の検出、車両の制御など)を行う。
その後、処理はステップS11に進む。
ステップS8において、ドライバ2の顔の向きが検出できなかったと判定された場合、処理はステップS10に進む。
また、ステップS4において、顔検出部12は、ドライバ2の顔が検出できなかったと判定した場合、処理はステップS10に進む。
ステップS10において、顔向き検出部14は、検出エラーを出力する。具体的には、顔検出部12は、ドライバ2の顔を検出できなかった場合、ドライバ2の顔を検出できなかったことを示す情報を、イニシャル方向取得部13および顔向き検出部14に供給する。顔向き検出部14は、ドライバ2の顔の向きの検出に失敗したことを示す検出エラーを通知する情報を、顔向き検出装置1の後段の装置に出力する。
ステップS11において、顔向き検出装置1は、処理を終了するか否かを判定する。処理を終了しないと判定された場合、処理はステップS2に戻り、ステップS11において、処理が終了すると判定されるまで、ステップS2乃至S11の処理が繰返し実行される。
ステップS11において、例えば、車両のアクセサリー(ACC)用の電源の供給が停止されたとき、顔向き検出装置1は、処理を終了すると判定し、顔向き検出処理は終了する。
このように、本発明の第1の実施の形態によれば、ドライバまたはドライビングポジションなどが異なっても、そのドライバおよびドライビングポジションに対応したイニシャル方向が、ほぼ正確に求められる。また、ドライバが運転席に座った状態において、ドライバの顔の位置を検出するだけで、運転を開始する前に、迅速にイニシャル方向が求められる。さらに、イニシャル方向のみを求めるのであれば、ドライバの認識を行ったり、ドライバの顔の各器官を認識したりする必要がないため、処理を軽くすることができ、また、入力画像の解像度を低く抑えることができる。また、入力画像の画質が少々悪くても、イニシャル方向を求めることが可能である。さらに、イニシャル方向を求めるための特別な対応をドライバが行うことなく、自動的に確実にイニシャル方向を求めることができる。
なお、変換テーブルをより細かな領域に分割することにより、イニシャル方向の精度を向上させることができる。
次に、図7乃至図9を参照して、本発明の第2の実施の形態について説明する。図7は、本発明の第2の実施の形態である顔向き検出装置101の機能の構成の例を示すブロック図である。顔向き検出装置101は、後述するように、イニシャル方向を基準とするドライバ2の顔の向きを、後段の装置に出力することを特徴とする。顔向き検出装置101は、カメラ11、顔検出部12、イニシャル方向取得部13、顔向き検出部14、記憶部15、および、変換部111を含むように構成される。
なお、図中、図1と対応する部分については同じ符号を付してあり、処理が同じ部分に関しては、その説明は繰り返しになるので省略する。
顔向き検出装置101は、図1の顔向き検出装置1と比べて、カメラ11、顔検出部12、イニシャル方向取得部13、顔向き検出部14、および、記憶部15を含む点で一致し、変換部111を含む点で異なる。
変換部111は、イニシャル方向を示す情報をイニシャル方向取得部13から取得し、ドライバ2の顔の向きの検出結果を示す情報を顔向き検出部14から取得する。変換部111は、顔向き検出部14により検出された、カメラ11から見たドライバ2の顔の向きを、イニシャル方向を基準とする向きに変換する。変換部111は、変換した顔の向きを示す情報を、顔向き検出装置101の後段の装置に出力する。
次に、図8のフローチャートを参照して、顔向き検出装置101により実行される顔向き検出処理を説明する。
ステップS101乃至S105の処理は、図2のステップS1乃至S5の処理と同様であり、その説明は繰り返しになるので省略する。
ステップS106において、図2のステップS7の処理と同様に、カメラ11から見たドライバ2の顔の向きが検出される。
ステップS107において、図2のステップS8の処理と同様に、ドライバ2の顔の向きが検出できたか否かが判定される。ドライバ2の顔の向きが検出できたと判定された場合、処理はステップS108に進む。
ステップS108において、変換部111は、検出された顔の向きを変換する。具体的には、イニシャル方向取得部13は、イニシャル方向を示す情報を変換部111に供給する。顔向き検出部14は、ドライバ2の顔の向きの検出結果を示す情報を変換部111に供給する。変換部111は、顔向き検出部14により検出された、カメラ11から見たドライバ2の顔の向きを、イニシャル方向を基準とする向きに変換する。
ここで、図9を参照して、変換部111による変換方法について説明する。なお、ここでは、説明を簡単にするために左右方向の顔の向きについてのみ考える。顔131の向きが、ドライバ2が正面を向いている場合におけるカメラ11から見たドライバの顔の向き、すなわち、イニシャル方向を示し、顔132の向きが、顔向き検出部14により検出されたドライバ2の顔の向きを示しているとした場合、イニシャル方向を基準とするドライバ2の顔の向きは、顔132の向きから顔131の向きを引いた向き(角度)、すなわち、顔133の向きとなる。例えば、イニシャル方向を左方向に30°、顔向き検出部14により検出されたドライバ2の顔の向きを右方向に30°とした場合、イニシャル方向を基準とするドライバ2の顔の向きは、右方向60°(=右方向30°−左方向30°)となる。
なお、上下方向についても同様の方法により、イニシャル方向を基準とするドライバ2の顔の向きが求められる。
ステップS109において、変換部111は、ドライバ2の顔の向きを出力する。具体的には、変換部111は、イニシャル方向を基準とするドライバの顔の向きを示す情報を、顔向き検出装置101の後段の装置に出力する。その後、処理はステップS110に進む。
ステップS104において、ドライバ2の顔が検出できなかったと判定された場合、または、ステップS107において、ドライバ2の顔の向きが検出できなかったと判定された場合、処理はステップS110に進む。
ステップS110において、変換部111は、検出エラーを出力する。具体的には、顔検出部12は、ドライバ2の顔を検出できなかった場合、ドライバ2の顔を検出できなかったことを示す情報を、イニシャル方向取得部13および顔向き検出部14に供給する。また、顔向き検出部14は、ドライバ2の顔の向きを検出できなかった場合、ドライバ2の顔の向きを検出できなかったことを示す情報を、変換部111に供給する。変換部111は、ドライバ2の顔の向きが検出されなかったことを示す情報を、顔向き検出装置101の後段の装置に出力する。
ステップS111において、上述した図2のステップS11の処理と同様に、処理を終了するか否かが判定される。処理を終了しないと判定された場合、処理はステップS102に戻り、ステップS111において、処理を終了すると判定されるまで、ステップS102乃至S111の処理が繰返し実行される。
ステップS111において、処理を終了すると判定された場合、顔向き検出処理は終了する。
このように、本発明の第2の実施の形態によれば、顔向き検出装置101の後段の装置に、イニシャル方向を基準とするドライバ2の顔の向きが出力されるようになる。
なお、顔向き検出装置101の後段の装置に、イニシャル方向も合わせて出力するようにしてもよい。
次に、図10乃至図12を参照して、本発明の第3の実施の形態について説明する。図10は、本発明の第3の実施の形態である顔向き検出装置201の機能の構成の例を示すブロック図である。顔向き検出装置201は、複数台のカメラを用いてドライバ2の顔の向きを検出することを特徴とする。顔向き検出装置201は、カメラ11,211、顔検出部12、イニシャル方向取得部13、顔向き検出部14、記憶部15、および、変換部111を含むように構成される。
なお、図中、図7と対応する部分については同じ符号を付してあり、処理が同じ部分に関しては、その説明は繰り返しになるので省略する。
顔向き検出装置201は、図7の顔向き検出装置101と比べて、カメラ11、顔検出部12、イニシャル方向取得部13、顔向き検出部14、記憶部15、および、変換部111を含む点で一致し、カメラ211を含む点で異なる。
カメラ211は、カメラ11とは異なる位置に設置され、カメラ11とは異なる方向から、顔向き検出装置201が設けられている車両の運転席に座っているドライバ2の顔を撮影した画像(入力画像)を顔検出部12および顔向き検出部14に供給する。なお、以下、カメラ11により撮影された画像とカメラ211により撮影された画像を区別する必要がある場合、カメラ11により撮影された画像を第1の入力画像といい、カメラ211により撮影された画像を第2の入力画像という。
図11は、カメラ11およびカメラ211の設置位置の例を示す。カメラ11は、例えば、車両内のセンタミラーの根元付近に設置され、前方左斜め上方向からドライバ2の顔を撮影する。また、カメラ211は、運転席前方のダッシュボード(インストルメントパネル)上部右端付近に設置され、前方右斜め下方向からドライバ2の顔を撮影する。これにより、ドライバ2の顔を撮影できる範囲が広がり、ドライバの顔の向きを検出できる範囲が広がる。例えば、ドライバ2が、カメラ11に対して90°右の方向に顔を向け、カメラ11によりドライバ2の顔が撮影できない場合においても、カメラ211により、ドライバ2の顔の向きを撮影でき、ドライバ2の顔の向きを検出することができる。
なお、記憶部15には、第1の入力画像に対応した変換テーブル、すなわち、第1の入力画像におけるドライバ2の顔の位置と、カメラ11から見たイニシャル方向(以下、第1のイニシャル方向とも称する)とを関連づけた変換テーブル(以下、第1の変換テーブルとも称する)、および、第2の入力画像に対応した変換テーブル、すなわち、第2の入力画像におけるドライバ2の顔の位置と、カメラ211から見たイニシャル方向(以下、第2のイニシャル方向とも称する)とを関連づけた変換テーブル(以下、第2の変換テーブルとも称する)が記憶される。イニシャル方向取得部13は、第1の入力画像におけるドライバ2の顔の位置および第1の変換テーブル、または、第2の入力画像におけるドライバ2の顔の位置および第2の変換テーブルに基づいて、イニシャル方向を検出する。
次に、図12のフローチャートを参照して、顔向き検出装置201により実行される顔向き検出処理を説明する。なお、この処理は、例えば、顔向き検出装置201が設けられている車両のアクセサリー(ACC)用の電源からの顔向き検出装置201への供給が開始されたとき、開始される。
ステップS201において、カメラ11および211は、運転席周辺の撮影を開始する。すなわち、カメラ11および211により運転席に座っているドライバ2の顔の撮影が開始される。
ステップS202において、顔検出部12および顔向き検出部14は、カメラ11および211により撮影された入力画像(第1および第2の入力画像)を取得する。
ステップS203において、顔検出部12は、上述した図2のステップS3の処理と同様に、ドライバ2の顔の位置を検出する。ただし、図2のステップS3の処理と異なり、顔検出部12は、第1および第2の2つの入力画像におけるドライバ2の顔の位置を検出する。
ステップS204において、顔検出部12は、ドライバ2の顔の位置を検出できたか否かを判定する。顔検出部12は、ステップS203において、第1の入力画像または第2の入力画像のうち少なくとも一方におけるドライバ2の顔の位置を検出できた場合、ドライバ2の顔の位置を検出できたと判定し、処理はステップS205に進む。
ステップS205において、上述した図2のステップS5の処理と同様に、イニシャル方向が取得される。ただし、ステップS5の処理と異なり、第1および第2の入力画像の両方において、ドライバ2の顔の位置が検出されている場合、それぞれの入力画像に対応する変換テーブルから、それぞれの入力画像におけるドライバ2の顔の位置に対応するイニシャル方向が取得される。また、第1または第2の入力画像の一方のみにおいて、ドライバ2の顔の位置が検出されている場合、ドライバ2の顔の位置が検出された入力画像に対応する変換テーブルから、その入力画像におけるドライバ2の顔の位置に対応するイニシャル方向が取得される。
ステップS206において、上述した図2のステップS7の処理と同様に、ドライバ2の顔の向きが検出される。ただし、ステップS7の処理と異なり、第1および第2の入力画像の両方において、ドライバ2の顔の位置が検出されている場合、それぞれの入力画像に基づいて、ドライバ2の顔の向きが検出される。また、第1または第2の入力画像の一方のみにおいて、ドライバ2の顔の位置が検出されている場合、ドライバ2の顔の位置が検出された入力画像に基づいて、ドライバ2の顔の向きが検出される。
ステップS207において、顔向き検出部14は、ドライバ2の顔の向きが検出できたか否かを判定する。顔向き検出部14は、ステップS206において、第1または第2の入力画像のうち少なくとも一方の入力画像に基づいて、ドライバ2の顔の向きが検出できた場合、ドライバ2の顔の向きを検出できたと判定し、処理はステップS208に進む。
ステップS208において、変換部111は、検出された顔の向きを変換する。具体的には、イニシャル方向取得部13は、イニシャル方向の検出結果を示す情報を変換部111に供給する。顔向き検出部14は、ドライバ2の顔の向きの検出結果を示す情報を変換部111に供給する。変換部111は、上述した図8のステップS108の処理と同様に、顔向き検出部14により検出されたドライバ2の顔の向きを、イニシャル方向を基準とする向きに変換する。
ただし、第1の入力画像に基づくドライバ2の顔の向き、および、第2の入力画像に基づくドライバ2の顔の向きの両方ともが検出されている場合、どちらか一方の入力画像に基づく顔の向きが選択されて、選択された顔の向きが、イニシャル方向を基準とする向きに変換される。例えば、カメラ11またはカメラ211から見て、より正面に近い方の顔の向きが選択される。
ステップS209において、上述した図8のステップS109の処理と同様に、イニシャル方向を基準とするドライバの顔の向きを示す情報が、顔向き検出装置201の後段の装置に出力される。その後、処理はステップS211に進む。
ステップS204において、ドライバ2の顔が検出できなかったと判定された場合、または、ステップS207において、ドライバ2の顔の向きが検出できなかったと判定された場合、処理はステップS210に進む。
ステップS210において、上述した図8のステップS110の処理と同様に、検出エラーが出力される。
ステップS211において、上述した図2のステップS11の処理と同様に、処理を終了するか否かが判定される。処理を終了しないと判定された場合、処理はステップS202に戻り、ステップS211において、処理を終了すると判定されるまで、ステップS202乃至S211の処理が繰返し実行される。
ステップS211において、処理を終了すると判定された場合、顔向き検出処理は終了する。
このように、本発明の第3の実施の形態によれば、ドライバ2の顔の向きの検出範囲を広げることができる。
なお、以上の説明では、カメラの数を2台とする例を示したが、カメラを3台以上設けるようにしてもよい。この場合、カメラの数が2台の場合と同様に、それぞれのカメラにより撮影された入力画像に対応する変換テーブルが用いられる。
また、顔向き検出装置201の後段の装置に、イニシャル方向も合わせて出力するようにしてもよいし、顔向き検出装置1と同様に、イニシャル方向、および、カメラ11またはカメラ211から見たドライバ2の顔の向きを出力するようにしてもよい。
次に、図13乃至図22を参照して、本発明の第4の実施の形態について説明する。図13は、本発明の第4の実施の形態である顔向き検出装置301の機能の構成の例を示すブロック図である。顔向き検出装置301は、予めイニシャル方向が登録された変換テーブルを用いずに、学習処理によりイニシャル方向の登録または消去を行うことにより、変換テーブルを適宜更新することを特徴とする。顔向き検出装置301は、カメラ11、顔検出部12、顔向き検出部14、記憶部15、変換部111、イニシャル方向取得部311、正面向き判定部312、イニシャル方向検出部313、および、変換テーブル更新部314を含むように構成される。
なお、図中、図7と対応する部分については同じ符号を付してあり、処理が同じ部分に関しては、その説明は繰り返しになるので省略する。
顔向き検出装置301は、図7の顔向き検出装置101と比べて、カメラ11、顔検出部12、顔向き検出部14、記憶部15、および、変換部111を含む点で一致し、イニシャル方向取得部311、正面向き判定部312、イニシャル方向検出部313、変換テーブル更新部314、および、車両状態取得部315を含み、イニシャル方向取得部13を含まない点で異なる。
イニシャル方向取得部311は、図7のイニシャル方向取得部13と同様に、記憶部15に記憶されている変換テーブルから、顔検出部12により検出されたドライバ2の顔の位置に対応するイニシャル方向を取得する。イニシャル方向取得部311は、取得したイニシャル方向を示す情報を変換部111に供給する。
また、イニシャル方向取得部311は、顔検出部12により検出されたドライバ2の顔の位置に対応するイニシャル方向が変換テーブルに登録されていない場合、イニシャル方向が登録されていないことを示す情報を、正面向き判定部312およびイニシャル方向検出部313に供給する。
正面向き判定部312は、ドライバ2の顔の向きの検出結果を示す情報を顔向き検出部14から取得する。また、正面向き判定部312は、顔向き検出装置301が設けられている車両の各種の状態を示す情報を車両状態取得部315から取得する。正面向き判定部312は、図22を参照して後述するように、ドライバ2の顔の向きの検出結果、および、車両の状態に基づいて、ドライバ2が正面(車両の前方の方向)を向いているか否かを判定し、判定結果を示す情報をイニシャル方向検出部313に供給する。
イニシャル方向検出部313は、ドライバ2の顔の位置の検出結果を示す情報を顔検出部12から取得する。また、イニシャル方向検出部313は、ドライバ2の顔の向きの検出結果を示す情報を顔向き検出部14から取得する。イニシャル方向検出部313は、顔検出部12により検出されたドライバ2の顔の位置に対応するイニシャル方向が、記憶部15に記憶されている変換テーブルに登録されていない場合、図22を参照して後述するように、正面向き判定部312によりドライバ2が正面を向いていると判定された場合におけるドライバ2の顔の向きの統計をとることにより、イニシャル方向を検出する。イニシャル方向検出部313は、検出結果を示す情報を変換テーブル更新部314に供給する。
変換テーブル更新部314は、図16乃至図21を参照して後述するように、顔検出部12により検出された、入力画像におけるドライバ2の顔の位置、および、イニシャル方向検出部313により検出されたイニシャル方向に基づいて、変換テーブルを更新する。また、変換テーブル更新部314は、変換テーブルの更新結果を示す情報をイニシャル方向取得部311に供給する。
車両状態取得部315は、車両の各種の動作を制御するECU(Electronic Control Unit)等により構成される図示せぬ車両制御部から、例えば、車両の速度、および、車両のトランスミッション(動力伝達装置)のギアの位置など、車両の各種の状態を示す情報を取得し、正面向き判定部312に供給する。
次に、図14のフローチャートを参照して、顔向き検出装置301により実行される顔向き検出処理を説明する。
なお、ステップS301乃至S304の処理は、上述した図8のステップS101乃至S104の処理と同様であり、その説明は繰り返しになるので省略する。
ステップS305において、上述した図8のステップS106の処理と同様に、ドライバ2の顔の向きが検出される。
ステップS306において、上述した図8のステップS107の処理と同様に、ドライバ2の顔の向きが検出できたか否かが判定され、ドライバ2の顔の向きが検出できたと判定された場合、処理はステップS307に進む。
ステップS307において、イニシャル方向取得部311は、ドライバ2の顔の位置に対するイニシャル方向が登録されているか否かを判定する。具体的には、イニシャル方向取得部311は、記憶部15に記憶されている変換テーブルを読み出す。
図15は、変換テーブルの例を示す図である。なお、図15の変換テーブルにおいて、左方向および下方向の角度が示されている領域は、すでにイニシャル方向が登録されている領域である。例えば、右上隅の領域に対応するイニシャル方向は、左方向30°および下方向0°となる。また、斜線で示される領域は、イニシャル方向がまだ学習されておらず、イニシャル方向が未登録の領域である。
イニシャル方向取得部311は、顔検出部12により検出されたドライバの顔の位置に対応するイニシャル方向が変換テーブルに登録されていない場合、例えば、図15の例において、検出されたドライバ2の顔の位置が斜線で示される領域内である場合、ドライバ2の顔の位置に対するイニシャル方向が登録されていないと判定し、処理はステップS308に進む。
ステップS308において、顔向き検出装置301は、変換テーブル学習処理を実行する。変換テーブル学習処理の詳細は、図16を参照して後述するが、この処理により、変換テーブルの学習が行われ、必要に応じて、変換テーブルが更新される。
ステップS309において、ステップS307の処理と同様に、ドライバ2の顔の位置に対するイニシャル方向が登録されているか否かが判定される。ドライバ2の顔の位置に対するイニシャル方向が登録されていると判定された場合、すなわち、ステップS308の変換テーブル学習処理により、検出されたドライバ2の顔の位置に対するイニシャル方向が変換テーブルに新たに登録された場合、処理はステップS310に進む。
一方、S307において、顔検出部12により検出されたドライバの顔の位置に対応するイニシャル方向が変換テーブルに登録されている場合、例えば、図15の例において、検出されたドライバ2の顔の位置が斜線で示される領域以外の領域内である場合、ドライバ2の顔の位置に対するイニシャル方向が登録されていると判定され、ステップS308乃至S309の処理はスキップされ、すなわち、変換テーブル学習処理は行われずに、処理はステップS310に進む。
ステップS310において、イニシャル方向取得部311は、図8のステップS105の処理と同様に、顔検出部12により検出されたドライバの顔の位置に対応するイニシャル方向を、変換テーブルから取得する。
ステップS311において、上述した図8のステップS108の処理と同様に、検出されたドライバ2の顔の向きが、イニシャル方向を基準とする向きに変換される。
ステップS312において、上述した図8のステップS109の処理と同様に、イニシャル方向を基準とするドライバの顔の向きを示す情報が、顔向き検出装置301の後段の装置に出力される。その後、処理はステップS315に進む。
ステップS309において、ドライバ2の顔の位置に対応するイニシャル方向が登録されていないと判定された場合、すなわち、ステップS308の変換テーブル学習処理により、検出されたドライバ2の顔の位置に対するイニシャル方向が変換テーブルに登録されなかった場合、処理はステップS313に進む。
ステップS313において、変換部111は、イニシャル方向未登録を出力する。具体的には、イニシャル方向取得部311は、イニシャル方向が登録されていないことを示す情報を変換部111に供給する。変換部111は、イニシャル方向が未登録のためドライバ2の顔の向きが検出されなかったことを示すイニシャル方向未登録を通知する情報を、顔向き検出装置301の後段の装置に出力する。その後、処理はステップS315に進む。
ステップS304において、ドライバ2の顔が検出できなかったと判定された場合、または、ステップS306において、ドライバ2の顔の向きが検出できなかったと判定された場合、処理はステップS314に進む。
ステップS314において、上述した図8のステップS110の処理と同様に、検出エラーが出力される。その後、処理はステップS315に進む。
ステップS315において、上述した図8のステップS111の処理と同様に、処理を終了するか否かが判定される。処理を終了しないと判定された場合、処理はステップS302に戻り、ステップS315において、処理を終了すると判定されるまで、ステップS302乃至S315の処理が繰返し実行される。
ステップS315において、処理を終了すると判定された場合、顔向き検出処理は終了する。
次に、図16のフローチャートを参照して、図14のステップS308の変換テーブル学習処理の詳細を説明する。
ステップS331において、顔向き検出装置301は、イニシャル方向検出処理を実行する。イニシャル方向検出処理の詳細は、図22を参照して後述するが、この処理により、ドライバ2が正面を向いているか否かが判定され、ドライバ2が正面を向いていると判定された場合、現在のドライバ2の顔の位置に対応するイニシャル方向が検出される。また、検出結果を示す情報が、イニシャル方向検出部313から変換テーブル更新部314に供給される。
ステップS332において、変換テーブル更新部314は、イニシャル方向が検出された否かが判定される。イニシャル方向が検出されたと判定された場合、処理はステップS333に進む。
ステップS333において、変換テーブル更新部314は、登録済みのイニシャル方向と整合性が登録されているか否かを判定する。具体的には、変換テーブル更新部314は、変換テーブルを記憶部15から読み出す。変換テーブル更新部314は、イニシャル方向検出部313により検出されたイニシャル方向が、すでに変換テーブルに登録されているイニシャル方向と整合性が取れているか否かを調べる。
ここで、図17を参照して、検出されたイニシャル方向と登録済みのイニシャル方向との整合性について説明する。図17は、変換テーブルの例を示す図である。なお、図17においては、入力画像が縦2×横3の合計6つの領域に分割される場合に対応する変換テーブルの例が示されている。
例えば、図17の変換テーブルにおいて、領域331−1および331−6に対応するイニシャル方向が、まだ学習されていないため(未学習のため)登録されておらず、領域331−3乃至331−5に対応するイニシャル方向が登録済みである場合に、領域331−2に対応するイニシャル方向が新たに検出されたときについて考える。
領域331−2は、隣接する領域331−1および領域331−3と同じ行(同じ高さ)にあるので、領域331−2に対応するイニシャル方向の上下方向の向き(角度)は、領域331−1および領域331−3に対応するイニシャル方向の上下方向の向きに近くなると推定される。また、領域331−2は、隣接する領域331−5と同じ列(左右方向において同じ位置)にあるので、領域331−2に対応するイニシャル方向の左右方向の向きは、領域331−5に対応するイニシャル方向の左右方向の向きに近くなると推定される。
例えば、いま、領域331−2に対応するイニシャル方向が、左方向35°および下方向20°と検出されたとすると、左右方向の向きについては、領域331−5に対応するイニシャル方向と同様であるが、上下方向の向きについては、領域331−3に対応するイニシャル方向の上下方向の向きとの差が15°となり、大きく異なっている。例えば、整合性が取れているか否かを判定する所定の閾値を±10°とした場合、検出された領域331−2に対応するイニシャル方向は、登録済みのイニシャル方向との整合性が取れていないと判定される。
このように、変換テーブル更新部314は、イニシャル方向取得部13により検出されたイニシャル方向(登録しようとする前記イニシャル方向)と、登録しようとするイニシャル方向に対応する領域(ドライバ2の顔の位置)の近傍の領域(位置)に対応するイニシャル方向との差が所定の閾値以内である場合、整合性が取れていると判定し、その差が所定の閾値を超えている場合、整合性が取れていないと判定する。
ステップS333において、登録済みのイニシャル方向と整合性が取れていると判定された場合、処理はステップS334に進む。
ステップS334において、変換テーブル更新部314は、検出されたイニシャル方向を変換テーブルに登録する。
ステップS335において、変換テーブル更新部314は、変換テーブルを線形補間する。ここで、図18および図19を参照して、変換テーブルの線形補間について説明する。なお、図18は、線形補間前の変換テーブルの例を示し、図19は、線形補間後の変換テーブルの例を示している。また、図18および図19においては、入力画像が縦2×横4の合計8の領域に分割される場合に対応する変換テーブルの例が示されている。
図18の変換テーブルにおいて、領域332−1乃至332−3および332−6乃至332−8対応するイニシャル方向が、まだ学習されていないため登録されておらず、領域332−4に対応するイニシャル方向が登録済みである場合に、領域332−5に対応するイニシャル方向が新たに検出されたときについて考える。
上述したように、ドライバ2の顔の位置はほぼ2次平面上を移動するので、イニシャル方向は、入力画像におけるドライバ2の顔の位置にほぼ比例して変化すると仮定することができる。そのように仮定した場合、領域332−4と領域332−5の間にある領域332−1乃至332−3および332−6乃至332−8について、領域332−4および332−5に対応するイニシャル方向を用いて線形補間することが可能である。
すなわち、領域332−4と領域332−5の間において、縦方向および横方向について、位置の変化に対して、イニシャル方向がそれぞれ等間隔で変化すると仮定して、領域332−1に対応するイニシャル方向が、左方向45および下方向5°に設定され、領域332−2に対応するイニシャル方向が、左方向40°および下方向に5°に設定され、領域332−3に対応するイニシャル方向が、左方向35°および下方向5°に設定され、領域332−6に対応するイニシャル方向が、左方向40°および下方向10°に設定され、領域332−7に対応するイニシャル方向が、左方向に35°および下方向に10°に設定され、領域332−8に対応するイニシャル方向が、左方向30°および下方向5°に設定される。すなわち、変換テーブルに登録されているイニシャル方向を用いて、イニシャル方向が登録されていない領域(位置)に対応するイニシャル方向を線形補間することが可能である。
なお、イニシャル方向が等間隔ではない、所定の規則に従って変化する場合、例えば、二次関数、正弦関数などの所定の関数に従って変化することが分かっている場合、その規則に従って、イニシャル方向を補間するようにすることも可能である。
また、この線形補間処理は、必ずしも行う必要はない。すなわち、線形補間処理を行わずに、実際の検出したイニシャル方向のみを変換テーブルに登録するようにしてもよい。
その後、処理はステップS337に進む。
ステップS333において、登録済みのイニシャル方向と整合性が取れていないと判定された場合、処理はステップS336に進む。
ステップS336において、変換テーブル更新部314は、イニシャル方向を消去する。例えば、図17の例のように、新たに検出された領域331−2に対応するイニシャル方向が、変換テーブルに登録済みのイニシャル方向と整合性が取れていない場合、変換テーブル更新部314は、図20に示されるように、検出されたイニシャル方向を、変換テーブルに登録せずに、そのまま消去する。すなわち、領域331−2に対応するイニシャル方向は未登録のままとなる。また、例えば、変換テーブル更新部314は、図21に示されるように、さらに、領域331−2に隣接する領域(領域331−1の近傍の位置)に対応するイニシャル方向を変換テーブルから消去する。
その後、処理はステップS337に進む。
ステップS332において、イニシャル方向が検出されなかったと判定された場合、処理はステップS337に進む。
ステップS337において、変換テーブル更新部314は、変換テーブルの更新結果をイニシャル方向取得部311に供給し、変換テーブル学習処理は終了する。
次に、図22のフローチャートを参照して、図16のステップS331のイニシャル方向検出処理の詳細を説明する。
ステップS351において、正面向き判定部312は、車両が所定の速度以上で前進しているか否かを判定する。具体的には、車両状態取得部315は、車両の速度、および、車両のトランスミッションのギアの位置を示す情報を図示せぬ車両制御部から取得し、正面向き判定部312に供給する。正面向き判定部312は、車両の速度、および、車両のトランスミッションのギアの位置に基づいて、車両が所定の速度以上で前進しているか否かを判定する。車両が所定の速度以上で前進していると判定された場合、処理はステップS352に進む。
ステップS352において、正面向き判定部312は、ドライバ2の顔の位置および向きの変化が所定の範囲以内である状態が所定の時間継続したか否かを判定する。具体的には、正面向き判定部312は、現在より所定の時間前のフレームから現在のフレームまでの間、ドライバ2の顔の位置が、変換テーブルにおける1つの領域内にあり、かつ、顔の向きの変化量が所定の範囲内(例えば、上下方向および左右方向において30°以内の範囲内)である場合、ドライバ2の顔の位置および向きの変化が所定の範囲以内である状態が所定の時間継続したと判定し、処理はステップS353に進む。すなわち、これは、車両が所定の速度以上で前進し、かつ、ドライバ2の顔の位置および向きの変化が所定の範囲以内である状態が所定の時間継続しており、ドライバ2が正面を向いている可能性が高い場合である。
ステップS353において、イニシャル方向検出部313は、イニシャル方向を検出し、イニシャル方向検出処理は終了する。具体的には、正面向き判定部312は、ドライバ2が正面を向いていることを示す情報をイニシャル方向検出部313に供給する。イニシャル方向検出部313は、ドライバ2の顔の位置および向きの変化が所定の範囲以内である状態が所定の時間継続したときの、その所定の時間におけるドライバの顔の向きの統計をとることにより、イニシャル方向を求める。例えば、イニシャル方向検出部313は、その所定の時間における、ドライバ2の顔の向きの平均値、または、ドライバ2の顔の向きの分布におけるピーク値をイニシャル方向として求める。イニシャル方向検出部313は、検出結果を示す情報を変換テーブル更新部314に供給する。
ステップS351において、車両が所定の速度以上で前進していないと判定された場合、処理はステップS354に進む。
ステップS354において、正面向き判定部312は、計測値をリセットする。具体的には、正面向き判定部312は、ドライバ2の顔の位置および向きの変化が所定の範囲内である状態の継続時間の計測値をリセットし、再計測を開始する。
ステップS352において、ドライバ2の顔の位置および向きの変化が所定の範囲内である状態が所定の時間継続していないと判定された場合、処理はステップS355に進む。
ステップS355において、イニシャル方向検出部313は、イニシャル方向が未検出であることを通知する。具体的には、正面向き判定部312は、ドライバ2が正面を向いていると判定できなかったことを示す情報を、イニシャル方向検出部313に供給する。イニシャル方向検出部313は、イニシャル方向が未検出であることを示す情報を変換テーブル更新部314に供給する。
このように、本発明の第4の実施の形態によれば、車種、カメラ11の設置位置、または、カメラ11と運転席の位置関係の違いに関わらず、それらの違いに対応した最適な変換テーブルを生成することができ、車種またはカメラ11の設置位置に個別に対応した変換テーブルを事前に準備する必要がなくなる。また、車種またはカメラ11の設置位置が異なっても、顔向き検出装置301に変更を加える必要がなく、部品の共通化やコストダウンを実現することができる。また、同じ車種において、例えば、ステアリングホイールの位置(いわゆる、右ハンドルまたは左ハンドル)などの仕様が異なっても、変更を加えずに顔向き検出装置301を使用することができる。
また、イニシャル方向が変換テーブルに登録されていない場合、未登録を示す情報が、後段の装置に出力されるため、後段の装置は、ドライバ2の顔の向きを用いた処理を無効にし、誤動作を防止することができる。また、イニシャル方向が学習された時点で、その処理を再開することができる。
さらに、変換テーブルの学習処理の終了後は、本発明の第1乃至第3の実施の形態と同様に、迅速かつ確実にイニシャル方向を求めることができる。
なお、図10の顔向き検出装置201と同様に、顔向き検出装置301に複数台のカメラを設けるようにしてもよい。図23は、顔向き検出装置301に、カメラ411を追加することにより、2台のカメラを用いてドライバ2の顔の向きを検出する顔向き検出装置401の実施の形態を示すブロック図である。
顔向き検出装置401は、図13の顔向き検出装置301と比較して、カメラ11、顔検出部12、顔向き検出部14、記憶部15、変換部111、イニシャル方向取得部311、正面向き判定部312、イニシャル方向検出部313、および、変換テーブル更新部314を含む点で一致し、カメラ411を含む点で異なる。
顔向き検出装置401による顔向き検出処理の詳細の説明は省略するが、上述した顔向き検出装置301と同様の処理により、カメラ11およびカメラ411の両方の入力画像に対応する変換テーブルが学習され、2つのカメラおよび変換テーブルに基づいて、ドライバ2の顔の向きが検出される。これにより、ドライバ2の顔の向きの検出範囲を広げることができる。
なお、カメラを3台以上とすることももちろん可能である。
また、以上の説明では、車両の速度、および、車両のトランスミッションのギアの位置に基づいて、車両が所定の速度以上で前進しているか否かを判定する例を示したが、その他の車両の状態、例えば、ステアリングの舵角、ステアリングホイールの回転角などを用いて、判定するようにしてもよい。
なお、本発明は、上述した例以外にも、例えば、各種の乗り物を運転または操作する人(例えば、自動車のドライバ、電車の運転士、航空機の操縦士、船舶の操縦士など)の顔の向きを検出する装置、工作機械の操作者の顔の向きを検出する装置などに適用することができる。
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
図24は、上述した一連の処理をプログラムにより実行するパーソナルコンピュータ900の構成の例を示すブロック図である。CPU(Central Processing Unit)901は、ROM(Read Only Memory)902、または記録部908に記憶されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)903には、CPU901が実行するプログラムやデータなどが適宜記憶される。これらのCPU901、ROM902、およびRAM903は、バス904により相互に接続されている。
CPU901にはまた、バス904を介して入出力インタフェース905が接続されている。入出力インタフェース905には、キーボード、マウス、マイクロホンなどよりなる入力部906、ディスプレイ、スピーカなどよりなる出力部907が接続されている。CPU901は、入力部906から入力される指令に対応して各種の処理を実行する。そして、CPU901は、処理の結果を出力部907に出力する。
入出力インタフェース905に接続されている記録部908は、例えばハードディスクからなり、CPU901が実行するプログラムや各種のデータを記憶する。通信部909は、インターネットやローカルエリアネットワークなどのネットワークを介して外部の装置と通信する。
また、通信部909を介してプログラムを取得し、記録部908に記憶してもよい。
入出力インタフェース905に接続されているドライブ910は、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア911が装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記録部908に転送され、記憶される。
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム記録媒体は、図24に示すように、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク、もしくは半導体メモリなどよりなるパッケージメディアであるリムーバブルメディア911、または、プログラムが一時的もしくは永続的に格納されるROM902や、記録部908を構成するハードディスクなどにより構成される。プログラム記録媒体へのプログラムの格納は、必要に応じてルータ、モデムなどのインタフェースである通信部909を介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を利用して行われる。
なお、本明細書において、プログラム記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
さらに、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。