【卒業研究】 読唇術アプリの開発 【java,OpenCV】

1,123 views
Skip to first unread message

Mapida Dancho

unread,
Oct 30, 2014, 4:22:54 AM10/30/14
to android-g...@googlegroups.com
【自己紹介】
閲覧いただきありがとうございます。大学4年生で卒業研究中のmapidaと申します。
研究テーマは「画像処理を用いた読唇術アプリの開発」をしています。
聴覚障がい者の方に役立てる一歩となればと思い、作り始めました。
javaの知識がほぼないので勉強中ですが、完成予定が1月下旬のため、残り日数でできるか不安になり書かせていただきます。

【開発環境】
Windows7、Eclipse、java言語、Android AP17 4.2.2(au SHL24)
制限として
・発言者ははっきりと大きな口を開けて話すこと
・日本語に特定  ・人物は1人に特定  ・テキスト出力はひらがなのみ
以上のことを考えています。出来れば向上も図っていきたいです。

【目標・考え方】
androidカメラで人が話している映像を撮影し保存します。
アプリ内で動画を読み込み、唇の動きを解析し、しゃべった言葉をひらがなで画面に出力しようと考えています。

唇の動きの解析は、OpenCVで行おうとしています。以下サイトを見たからです。
 参照:OpenCV for Android のサンプル・チュートリアル一覧
     http://is.gd/EBxqnF

サンプルコードを実機で起動させてみました。
考え方は、"Face Detection"で顔を認識し縦の長さを半分ほどにして、
その範囲を"Image Manipulations"でエッジ検出を行い、唇の右端と左端をつなぎ中心線を作る。
中心線から何ビット動けば「あ」と出力する、ということです。

精度を上げるには学習システムがいいと考えています。しかし、参考サイトが見つかりませんでした。
解析後にできたテキストが違ったら修正します。
"唇が動いたビット数"にひらがなを記憶する という感じです。
記憶された中からアルゴリズムができていくと思うので、正答率の高いものを表示していく。

【問題点】
・調べても実際のカメラ映像を解析するものしか載っていない
 →動画を読み込んで解析したい
・サンプルコードの2つ("Face Detection""Image Manipulations")をどう組み合わせていいかわからない
 →顔認識プログラムににエッジ検出をプログラムを組み込めばいいと思うが、どの部分かわかっていない。
  勉強中です、助言いただければありがたいです。
・唇の解析の仕方がそれでいいのかわからない。
 →やってみないとわかりません;こちら文献(http://is.gd/05LvAV)で"唇の動き全体の方が重要"と書いてありました。
  唇の周りも含めて検出する方法が思いつきません。助言お願いします。
・学習ソフトがどういったプログラムかわからない
 →なにか案がありましたらお願いします。

【最後に】
最後まで読んでいただきありがとうございます。勉強不足なのは重々承知しています。
なにか少しでもアドバイス、参考サイト、考え方などをいただけたらうれしいです。返信待っています。

竹内 学

unread,
Oct 30, 2014, 5:39:18 AM10/30/14
to android-g...@googlegroups.com
Mapida Dancho さん。こんにちは。

OpenCV を使った事は無いので、イメージでの回答になってしまいますが...

まず、動画というものは単純には静止画の連続ですので、カメラ映像の解析アルゴリズムで数をこなせば良いのですが、
シャッタースピードの関係で、キレイな静止画にならない可能性が高いです。

これは、認識対象の方が「ゆっくりと」しゃべるという事で、ある程度は解決できるかと。

次に、動画の中で、どのタイミングで「音」を出しているのか。

「あ」なら「あ」の形に唇を作って音を出して... となるかと思うのですが、
そのタイミングが映像だけで判るのか?

まぁ、同時に音をサンプリングして、それをトリガーにするという手も使えるかと思います。

画像解析にこだわるのなら、時系列に唇の形を並べて、こういう流れだったら「あ」にするとか、そういった工夫も必要になるかと思います。

その場合、その前後の音がどうなるかによって、流れが変わってくると思うので、組み合わせを考えると大変な事になりそうです。

まぁ、一音出したら唇を閉じる、といったルールを設ければクリアできるかも知れません (「ん」はどうしましょうかねぇ)。

また、「学習」についてですが、単純に言えば「統計」です。
# 画像処理自体も「統計」です。全く同じ唇の形にしたとしても、全く同じ画像データになることはあり得ません。

こういう「形」で「あ」となったら、「あ」の確率が何%... と言うのをひたすらデータ収集します。

要は相関関数で一番1に近いのが、出したと思われる「音」になるわけです。

で、最大の問題が処理速度です。

画像を処理して、データベースをなめて、どの音か、それとも音を出していないのかと言う処理をリアルタイムに近い速度で行わなければ会話になりませんので。

日数の無い中、大変だとは思いますが、頑張って下さい!!

# こういう解析を行った後は、人間ってなんて良く出来ているんだろうって思い知るんですよね。


--
竹内 学 <mailto:takeuch...@gmail.com>

Mapida Dancho

unread,
Nov 14, 2014, 3:18:44 AM11/14/14
to android-g...@googlegroups.com
返信していただいた竹内学さん、ありがとうございます。返信が遅くなって申し訳ありません。
書き込まれていたことと、現状で出来そうなことを検討していたら、安易に書けなくなってしましました。

・音声認識とは関係をつけたくありません。スタジアムでのサッカー選手の読唇術を行いたい時などは、歓声によって音は意味を成さないと思ったからです。

以前の段階から進捗・概要の変更があったので書き込ませていただきます。

・OpenCVのサンプルプログラムを組み合わせる予定でしたが、理解に時間がかかるため、解説付きのサンプルプログラムを使用(OpenCVは使わない)
 →10日でおぼえるAndroidアプリ開発入門教室 第2版 android2.lzh
  Chapter0834「カメラ機能を使用して顔認識アプリを作る」サンプルプログラム
  http://www.shoeisha.com/book/hp/10days/down/
  →出来る機能:文字表示、顔囲み、認識率表示(64~72ほど)、複数認識可、ピントが合わない、ズームや録画などカメラ機能がない

 Chapter0834サンプルプログラム

・追加で出来たこと:顔周辺ポインタ位置の記憶と表示、テキスト表示位置変更、顔全体のの4/5の位置に線を表示(←意味なし)
              faces[i].mouthを発見→利用できればする。

 Chapter0834追加プログラム(口の中心に点を表示している)

・今したいこと
  2つの画像(元画像jpgとカメラ画像)を2値化しエッジを比較する「テンプレートマッチング法」を利用して、口の形(母音のみ)を判定しようと思っている。
  参考サイト: http://codezine.jp/article/detail/86

・教えていただきたいこと
   参考サイトではテンプレート画像gifにたいして、1枚の画像jpgで比較していました。
   カメラの映像(SurfaceView)とテンプレート画像(jpgやgif)を比較するために、どうしたらいいか。
    →テンプレート画像はあ~おの形をした口周辺の画像にしようと思っています。
    →方法としてカメラ映像を毎回jpg画像として保存して比較すると動作が遅くなりそうな気がします。SurfaceViewとgifをそのまま比較できるものがあれば理想です。
    →今は母音の認識だけですが、子音の認識をするために、コンマ数秒前の口の形との組み合わせで検出しようと考えています。
      必要になりそうなので、コンマ数秒前の口の形や位置が記憶ができるものが理想です。

・最後に
 ここまで読んでいただきありがとうございます。返信が遅くなったりアドバイスにそぐわないこともあるかと思いますが、意見いただければうれしいです。
 できれば具体的な方法を書いていただければうれしいです。よろしくお願いします。
Reply all
Reply to author
Forward
0 new messages