Web カメラの映像からの目検出ソフトの作成
３年Ｃ組 稲益 秀成
指導教員 米田 隆恒
１．要約
今回、私は、コンピュータに搭載されている Web カメラを用いて利用者の顔を撮影し、その映像から利用者の目線を検出する方法を研究した。
キーワード 目、目線、Web カメラ、ポインティングデバイス、アイトラッキング

２．研究の背景と目的重なってしまっても、カーソルが小さいた

人間は他人の目を見ると、その目線と目め、その場所がカーソルで隠れてしまうこ

線の先にあるものから、その人が何を見てとはなかった。しかし、タッチ操作でこれいるのかをおおまかに知ることができる。と同じことをしようとすると、カーソルを

そこで私は、人間の目は視覚情報を得るとおきたい場所がどうしても指で隠れてしまいう感覚器官としての機能だけでなく、自うので、カーソルをおきたい場所を見なが分の視覚情報を他人に知らせる情報伝達器

らそこに正確にカーソルを移動させるのは官としての機能も持っているのではないか

難しい。と考えた。ここで今日幅広く普及している「画面を見ること」自体が操作方法になコンピュータやスマートフォンなどが人間ればこの問題点を解決することができる。の目線を情報として取得できれば、これらの電子機器の使い方が広がるのではないだ
ろうか。例えば目線でマウスを動かしてハンズフリーで操作するなど、目線をポインタ代わりに使うことも考えられる。
現在、コンピュータのマウス操作に加えて、スマートフォンやタブレット PC など、ディスプレイを指でタッチして操作するデバイスが増えてきているが、この操作方法には問題点がある。それは、指でタッチ操作している間は指でディスプレイが隠されてしまうという点である。文字入力時のカーソルの位置を指定するとき、従来のマウス操作ではディスプレイを見ながら操作でき、カーソルをおきたい場所とカーソルが

図１ タッチ操作のデバイスの例

そこで、私はコンピュータが利用者の目で送信するときに自分の顔を撮影するカメ線を得る方法について考えていくことにしラのことで、図３のように最近のコンピュた。そのため本論文では、Web カメラの映ータやスマートフォンや、タブレット端末像から、黒目の位置を検出する方法についなどには同じ用途のカメラが標準で内蔵さて報告する。

れている。
これを利用することで新たな装置を追加

３．研究内容今回、コンピュータの利用者の目線を取得するために Web カメラを用いた。

しなくても、目線の検出ができ、手軽に使用することができるという利点がある。
Web カメラの映像から利用者の目線の動きを検出する流れとしては、（１）Web カメラの映像から利用者の顔部分のみを切り出す。
（２）切り出した顔の範囲から目の位置を検出する。
（３）目の位置から、目の中心を計算し、その動きから目線を計算する。
である。
[１] 顔検出をしない方法
目を検出するときに、最初に顔を認識し、そこから目を検出した方が検出精度は上が

図２ 一般的な Web カメラの例

るが、顔を正確に認識するには多くの処理を必要とし、そこからさらに目を検出しようとすると、プログラム処理が多く、すごく重くなってしまうのではないかと考えた。
あくまで、マウスやタッチパネルに代わるものをつくりたいので、このポインティングデバイスを使うことでコンピュータのパフォーマンスが悪くなってしまってはいけない。そこで、Web カメラの映像から、ま図３ スマートフォンなどにず顔を検出するのではなく、目を最初に検搭載されている Web カメラ(内蔵カメラ)出できれば、顔検出の処理がなくなるので、プログラム処理が少なく、軽くできると考Web カメラとは、図２のような Skype

え、目だけにみられる外観の特徴を探してや FaceTime など、インターネットでテレみた。そして、目の外観の特徴として、「黒ビ電話を楽しむときに相手にリアルタイムい」、「丸い」、「２つ横に並んでいる」

という特徴を挙げた。しかし、これだけでは顔の中だけでも、眉毛、鼻の穴など同じような外観のものがあり、とくに鼻の穴は黒目とよく似ており誤認識をしてしまう。
よって黒目と鼻の穴を分けられることがまず重要だと考えた。この二つを判別するために、目の特徴である白目も認識に使う方法を考えた。黒目の横には白目があるのに対し、鼻の穴の周りには白色はない。つまり、白色と黒色が隣り合っている部分を探図４ [１]の実行結果せば、そこは鼻の穴ではなく、目である可能性が高いだろうと考えた。そこから、最[２]顔の範囲の検出

初に白色と黒色を検出し、それが隣り合っ[１]の方法で作成したプログラムでは目ている場所を検出するというプログラムをの認識の誤差が多く、実用には難しいだろ作成した。

うという結果になってしまった。そこで、プログラムの処理は増えるが、顔を認識し[１]の結果思っていた通り、黒色と白色が隣り合っている場所を探すプログラム処理は重くはてから目を検出する方法をとることにした。
まず有名な顔検出方法として、Viola－Jones 法というものがある。

なかった。しかしながら、図４のように顔だけでなく、背景にもたくさん反応してしまった。ここから、背景と目を判別するのは、逆にたくさんの処理が必要になり、結果的に処理が重くなってしまう。よって、黒色と白色のみを検出することで目を検出することは難しいと考え、先に顔の範囲を検出してから、この処理を行う方が良いと考えた。

図５ Viola－Jones 法での探索窓の例（http://makematics.com/research/viola-jones/より引用）

これは、顔検出を行いたい映像に図５の基準点から顔の範囲を検出していく方法

ような探索窓を順番に動かしていき、そのとしては、処理が少なくなるように、肌の探索窓の領域をあらかじめ作成しておいた色の範囲を全部調べていくのではなく、基識別器から、顔か顔でないかを判定すると準点から上下左右といったように方向でみいう方法である。しかしこの方法では、左ていき、それでできた十字に外接する四角上から順番に 1 ピクセルごとに見ていかな形を顔の範囲とすることにした（図６）。

ければいけないので、処理が重いだろうと推察した。１枚の画像から顔を正確に検出するのには問題はないが、Web カメラの映像からリアルタイムで顔を検出し、さらにそこから目を検出するには、この Viola－
Jones 法は少し処理が重そうだと思い、他の軽い処理方法で顔を認識できなければならないと考えた。
そして、軽い処理で顔を検出する方法として、映像の中心付近にある肌の色を検出する方法を用いた。
Web カメラは利用者の顔を撮影するため図６ 基準点から上下左右方向に調べている様子のものなので、映像の中央付近に顔が来るようなカメラ位置に設置されている。よって、映像の中心付近の肌の色を検出すればそこは顔、または首であるのが普通なので、この方法を用いることにした。
肌の色を検出するには、コンピュータで普段色を値で表現するときにつかう RGBではなく、色相の値を用いることにした。
これは、色相の値は RGB に比べて、陰などの影響や照明による色の変化が小さいと図７ 首を顔だと誤認識している様子考えたからである。
また、顔の位置が移動しても追尾できる

しかし、基準点から上下左右の４方向だけように、最初のフレームでは映像の中央がでは、基準点がもし首にきてしまった時に肌の色検出の基本となる点（以降、「基準図７のように口で肌の色検出がとまってし点」と記す）だが、それ以降のフレームでまい、目のある顔まで範囲選択できないのは前のフレームでの顔の位置の中心を基準で、上下左右だけでなく、上方向の端から点とするようにした。

さらに左右に調べ、その左右それぞれ端までの半分の地点からさらに上方向に調べ、その左右それぞれの分の上方向の端の２点の中間地点からさらに上方向へ調べるようにした。
[２]の結果上下左右だけでなく、さらに上方向に何回か肌の色検出の処理を増やしたことで、もし基本となる点が首にきてしまっていても、口や目を超えて、額のところまで範囲をのばすことができるようになり、かなり

図９ 黒色と白色が隣り合っている部分を認識精度がよくなった。また、プログラム

赤で示している様子処理がとても軽いのも良かった。
しかし、顔に陰ができてしまっていたり、白色と黒色が隣り合っている部分を赤色

全体的に暗いときは Web カメラからの映で表している。そして、[２]で検出した顔像にノイズが出てしまったりしてしまう。の範囲を横１列ずつで見ていき、黒色と白

このノイズのせいで、色相が大きく乱れて色がとなりあっている点がその列に１個以しまい肌の色の検出が安定しなくなってし上８個以下あるところに目があるとする。

まうことがあった。

コンピュータを操作するときは普通２つの目は横方向に並んでいるので、その列には黒色と白色がとなりあう点が４個あるはずである。８個以下とした理由は、黒目にディスプレイの映像が反射してしまい、目の中心部分が白くなってしまうことがあり、その場合、黒色と白色がとなりあう点は８個あることになってしまうからである。
顔の中心から上で、目があると予想される列が集まっている所の、一番上側と下側の中間の位置にある列を、目がある列とす

図８ [２]の実行結果る。そして、その列にある黒色と白色が隣り合っている所と、黒い部分を探していき、[３]目の位置の検出[２]から、顔の範囲を検出することがで映像に映っている目の中心を特定できると考えた。

きたので、この顔の範囲で[１]で考えていた目の検出方法を使うことにした。その結果が図９である。

[３]の結果[２]の方法で顔の範囲を特定し、その領域内で[１]の処理をすることで、安定して目の位置を検出することができた。また、先に横方向の列だけをみて、目の中心がある一列を見つけてから２つの目を検出して輪郭を取得する方法としては、（１） 輪郭を取得するために、黒目と白目の境目を検出する。

いるので、とても軽く、[２]の顔検出の処（２） [３]で取得したおおまかな目の位置理と合わせても、目的であるポインティンから、輪郭追跡の開始点を決める。

グデバイスとして実用可能だと思えるくら（３） その点から、周りの 8 ピクセルを調いの速度が出た。

べていき、隣の輪郭を発見する。
（４） 開始点の隣の点の周りの 8 ピクセルを（３）と同様に調べ、さらに隣のピクセルを探す処理をする。
（５） （４）と同様の処理を続ける。という流れである。
そして開始点に戻ってきたとき、（５）の処理を終了し、得られた輪郭のピクセルの平均の位置を計算し、それを目の中心とするという方法である。

図 10 [３]の実行結果[４]の結果
強い光源がカメラのある方向にあると、[４]輪郭を使う目の中心の検出
映像中の目の位置の検出までは完成した

黒目にその光源が反射してしまい、輪郭抽出が失敗してしまうことがあった。

が、今回の研究の目的である「目線をコンもし、強い光源がディスプレイだけならピュータが認識する」ためには、正確に目ば、その光源は黒目の中央で反射するので、線を検出する必要がある。映像中での黒目黒目の輪郭には影響しないが、部屋の灯りの位置から目線を検出するためには、目の等は黒目の輪郭付近で反射してしまうこと中心の位置を検出しなければならない。

が多く、そのせいで正しく輪郭を抽出する

目は球体つまり立体であり、Web カメラの映像は平面的である。したがって、本当ことができなくなってしまった。
よって、この輪郭を用いて中央を検出すの目の中心を計算することはとても難しい。 る方法を用いるのをあきらめた。
よって、出来る限り精度が良くかつ処理が軽い方法を考えた。
黒目全体のピクセルすべての平均を用いた方が、より正確かもしれないが、それは処理が多くなってしまうだろう。そこで今回用いたのは、黒目の輪郭のピクセル位置の平均を用いるという方法である。

５．考察
今回、コンピュータで利用者の目線を取得するために、Web カメラで利用者を撮影し、その映像から目線を検出する方法を研究した。
映像から顔の範囲の検出、そこから目の位置の検出までの処理はとても軽く、このアプリケーションをバックグラウンドで起動させておいても問題ないものができた。
図 11 [４]の結果

そして、重心を計算することで、目の中心の位置を検出することができた。

[５]重心を使う目の中心の検出

問題点は、Web カメラの映像にはノイズ輪郭を用いての中心の計算は難しいといがあるために、肌の色による顔の範囲の検うことがわかった。そして、黒目の範囲が出が安定しなくなってしまうことがあると正確に検出できていなくても、ある程度のいう点である。顔の範囲選択が安定してい精度で目の中心を計算する方法としては、ないので、全体の処理も安定しなくなって黒目の重心を計算する方法をとった。

しまっている。これは精度がよく、かつ処こうすることで、[４]に比べて誤差を減理の軽い方法を考える必要がある。

らすことができる。

６．今後の展望[５]の結果今回検出した目の中心を目線とし、それ黒目の重心を計算することで、たとえ目をコンピュータのマウス操作などに活用での中心や輪郭付近が照明で反射してしまっきるようにしていくことが次の課題である。ても、目の中心を少ない誤差で計算するこ

しかし、今回このアプリケーションはとができるようになった。

Processing を用いて制作したが、この言語
ではアプリケーションからマウスの位置を[５]で検出した目の中心変更するなど、複雑な動作をさせることは難しい。
Mac ならば Objective-C といった、その OS に特化した言語で開発しなければいけないので別の言語を勉強する必要がある。
これが完成すると、まずは目線でマウス操作ができるようになり、現在あるコンピ
ュータに何もデバイスを追加せずに、今ま[３]で検出した目の位置

図 12 重心を計算している様子

で以上にコンピュータの操作が簡単になるだろう。

また、体の不自由な人でも目線の動きだ

http://hooktail.org/computer/index.p

けでコンピュータを操作できるようになる

hp?RGB%A4%AB%A4%E9HSV%A4ので、例えば、画面に「あいうえお…」と%D8%A4%CE%CA%D1%B4%B9%Aいったような文字の表を表示しておき、そ

4%C8%C9%FC%B8%B5

れを一定時間見ることでその文字を選択し[6]

C 言語による輪郭追跡処理についてたことにすれば、文章入力はもちろんだが、

http://homepage2.nifty.com/tsugu/so

その文字を音声で出力することで、体が不tuken/binedge/

自由な人でも会話することができるように[7] 力のつりあいなる。このような社会貢献につながると考

http://www.kdcnet.ac.jp/college/butu

えられる。

ri/kougi/buturiko/mechanics/mechan

さらに、別の考え方として、利用者がコ5/mechan5.htm#center

ンピュータを使っているときに、ディスプレイのどこを見ているかがわかると、その８．謝辞

利用者の興味がどこにあるかがわかること

今回の研究にあたり、サイエンス研究会になり、例えばインターネットブラウザで物理班顧問の米田隆恒先生、藤野智美先生

は、そこからその利用者の興味がある内容には、研究に関する助言や指導をしていたを知ることができたり、逆にどのような内だきました。また、同研究会のメンバーに容が読んでもらえるかを今まで以上に調べは研究のサポートをしていただきました。

ることができたりするようになり、うまくこの場をかりてお礼申し上げます。

使えば、Web サイトの質がよくなるようになると考えられる。

７．参考文献[1] メディアンフィルター
http://www. gifu-nct.ac.jp/elec/
yamada/iwata/median/index.html[2] Delphi 応用編
http://www2s.biglobe.ne.jp/~aks-lab/delphi_part3_1.html[3] コンピュータのセカイ- 今そこにあるミライ
http://news.mynavi.jp/series/comput
er_vision/010/index.html[4] Processing Reference
http://processing.org/reference/[5] RGB から HSV への変換と復元