みとしゅん のすべての投稿

今週の進捗(水戸)

決定テーマ『顔の動作による肢体不自由者向けカーソル操作法の提案』

進捗
・揚州研修
・大ゼミ発表
・卒論序論部分の作成

予定
・卒論原理
・システムの評価(アンケート形式。20人程度)
・キーボード作成

システム評価は、以下の4項目の5段階評価+コメントを20人ほどにもらおうと考えております。ほかによい評価方法があったらご教授お願い致します。
・機能性(両手使わなくても操作できるか、十分な機能があるか)
・信頼性(システムが途中で強制終了しないか、バグがでないか)
・使用性(使いやすいか、操作は簡単か)
・効率性(操作に即反応するか、時間効率性)

今週の進捗(水戸)

クリック、モード切替などの精度を高めた。

webサイトの入力欄にカーソルを合わせると画面にキーボードを表示せせるプログラムを作成中。Tkinterを用いてGUI作成しています。

発表スライドの作成

[予定]
カーソルの移動を財前にしてもらったのですが、片方の輪郭がカメラに映らなくなる場合誤作動が起きてしまうことが分かった。また、笑っていて目が細まっているときはクリックが誤作動してしまうことが分かったのでこれらを改良していきます。評価方法をどうするか思考中です。

今週の進捗(水戸)

クリック、モード切替などの精度を高めた。

webサイトの入力欄にカーソルを合わせると画面にキーボードを表示せせるプログラムを作成中。Tkinterを用いてGUI作成しています。

[予定]
カーソルの移動を財前にしてもらったのですが、片方の輪郭がカメラに映らなくなる場合誤作動が起きてしまうことが分かった。また、笑っていて目が細まっているときはクリックが誤作動してしまうことが分かったのでこれらを改良していきます。

今週の進捗(水戸)

テーマ  
顔によるカーソル操作法の提案
Proposal of cursor operation method by face

進捗
・カメラのどの位置にいても顔向きを推定できるようにプログラムを改良した。
・1秒間目を閉じると音とともに左クリックするプログラムを実装した。
・1秒間口を開けるとスクロールモードを追加するプログラムを実装した。
・1秒間目や口の開閉の判別条件を決定するためにデータを取ってプロットし、判別条件を付け加えた。

条件:(Eye_Aspect_Ratio)<0.20 が20フレーム連続して満足
→左クリック
条件:(Mouth_Aspect_Ratio)>0.60 が20フレーム連続して満足
→スクロール機能の追加

予定
・入力フォームにて左クリックしたら文字を入力できるようにTkinkerを用いて仮想キーボードを表示、使用する機能の追加
・クリック音は現状ビープ音「ソ」なのでクリックしたような音になるように改良する
・12月から実験開始できるように、Pythonの勉強も兼ねて評価シートを作成、解析するプログラムの作成

目の開き具合(Eye_Aspect_Ratio)をプロットした。
2回まばたき、1回しばらく目を閉じた。

口の開き具合(Mouse_Aspect_Ratio)をプロットした。
3回パクパク、2回しばらく口を開けた。

今週の進捗(水戸)

各顔パーツのランドマーク座標を取得し、距離を計算することによって顔の向きを上下左右4方向特定することができた。また、検出したむきにあわせてカーソルの移動を行うプログラムを実装した。ただし動きがぎこちなく操作にストレスがかかる状態。

両目を1秒間閉じると音声とともに左クリックするプログラムを実装中。

口の開閉認識もできるため、スクロールを行う際にモード変更ができるように改良する。

12月から被験者を募って実験が開始できるように操作のストレスがなくなる工夫を考えて付け加える。

両目を1秒間閉じるとクリックする関数がうまくいきません

def blink_counter(ear):
CLOSE_COUNTER = 0
BLINK_COUNTER = 0

while ear < 0.20:
CLOSE_COUNTER +=1
if CLOSE_COUNTER > … Continue Reading ››

今週の進捗(水戸)

関数pyautogui.moveTo()により指定した座標までカーソルを持っていけることを確認した。次にシステム構成を考案した。先週は顔の方向ベクトルと黒目の位置により視点を定める方針にしていたが、もっと簡易的なシステムを作り上げたのち処理の複雑化をしたほうが効率的だと考えた。カーソル移動とスクロールでモード分けする予定です。

簡易的なシステムの条件を以下とする。
・カメラの位置はディスプレイの中心
・被験者はカメラの正面に立つ。ディスプレイ表示で正面に来るよう指示
・モード変更はスペースキーで行う

[カーソル移動、クリック]
・顔の向きはカメラと正対
・左右の黒目の座標を結んだ線分の中点を基準点とし、画面の左右上下端を見た時の座標で長方形ができるはずなのでディスプレイの大きさとの比率でカーソルの移動量を定める
・クリック動作は両目を1秒以上閉じたときとする。動作時にクリック音をスピーカー出力する。

[スクロール]
・顔の方向ベクトルの計算によりある値より大きくなるとその方向にスクロール
・目線情報はスクロールの際の材料にしない。

※カーソル移動について、斜視の人でない限り左右の瞳は同じ動きをするのでどちらか一方の瞳を用いてカーソルの移動量を計算する方法も検討する。

※中点の出し方
{(右の瞳の座標)+(左の瞳の座標)} / 2.0

システム構成イメージ

今週の進捗(水戸)

dlibを用いた顔検出において、左右の瞳の座標を得るように先週のプログラムを改良した。また、その2つの座標を結んだ線分の中点の座標を得ようとプログラムを書き換えたがうまくいかなかった。(図1)

調べた結果Openfaceを用いると顔の方向ベクトルを検出できるようなのでプログラムを実行してみた。(図2)顔の向きにより大まかな視線の方向を推定し、瞳の座標により視線位置の特定ができるといいかなと思っている。

今後は、顔の方向ベクトルと瞳の座標を組み合わせて、視線位置を検出するアルゴリズムの作成を行う。アルゴリズムに関しては思考中です。

図1 フレームレートと左右の瞳座標を表示させた

図2 顔の方向ベクトルを表示している

今週の進捗(水戸)

テーマ「アイトラッキングを利用したマウス操作簡易化」

ハフ変換を行う関数HoughCircles()のパロメータを変化させると顔全体の静止画像から瞳部分の抽出をすることができた(図1)。次にwebカメラから取得した映像から同様にハフ変換で瞳部分の抽出を行おうと試みたが動作しなかった。原因は、ハフ変換は処理に時間がかかるためフレームレートと同期せずに処理が行われなかったためだと推測した。

そこで異なる方法として、機械学習ライブラリdlibにある輪郭や瞳の識別器を用いて瞳の抽出を行おうと考えた。識別器によってwebカメラの映像から瞳の中心を抽出できることが確認できた(図2)。

今後は、左右の瞳の中心座標を取得してそれらを結んだ線分の中点を基準としてカーソル位置と一致させるようにプログラムを組む予定です。

図1 顔全体の画像からハフ変換で
瞳部分のみをマークした結果

図2 dlibの識別器を利用して特徴点をマークしたもの。
瞳の中心を緑でマークしている。

今週の進捗(水戸)

webカメラで顔の映像を取得した後、輪郭部分の切り取ることにより顔を動かしたときでも画像において目の位置の座標が一定に保つようになった。

次に取得した顔画像において黒目部分を認識するようにハフ変換を行った。ハフ変換は画像中の円を検出するもので、今回は静止画像で試してみた。顔全体をハフ変換した場合は多数の円が検出されたため、輪郭部分のさらに目の部分を切り取りハフ変換したところうまく黒目部分とその中心がマークされた画像が得られた。

次はwebカメラで取得した顔の映像をハフ変換で黒目をマークするプログラムを作成し、その中心点の座標を表示するプログラムの作成を行う。そのあと、その座標とウィンドウ上のカーソルの位置をリンクさせるプログラムの作成、試行を行う。

顔全体をハフ変換にかけた

目の部分を切り取りハフ変換にかけた

さらに目の部分を切り取りノイズ除去してハフ変換にかけた