14

現在、私はAndroid搭載端末用のアプリを開発中です。我々は顔の特徴を検出したい。プログラムは、目、鼻、口、顔の端の位置を検出できる必要があります。Android - 顔の検出機能

精度は問題ないはずですが、完璧である必要はありません。物事をスピードアップするために、ある程度の精度を失うのは大丈夫です。すべての顔が正面になり、私たちは前に特徴のおおよその位置を知るでしょう。ライブ検出は必要ありません。保存された画像から特徴を抽出する必要があります。検出時間は、ユーザーエクスペリエンスに邪魔にならない程度の長さでなければなりません。だから2〜3秒でも大丈夫です。

は、この仮定を使えば、これを達成することを可能にライブラリを見つけるには余りにも難しいことではありません。しかし、私の質問は、最良のアプローチは何ですか?あなたの提案は何ですか?私がAndroid用に開発したのは初めてのことですが、私は間違った方向に走りたくありません。既存のアルゴリズムを自分で実装する方がよいでしょうか?

私はたくさんのGoogle検索を行い、興味深いものがたくさん見つかりました。 Android APIには顔検出機能もあります。しかし返された顔クラス(http://developer.android.com/reference/android/media/FaceDetector.Face.html)には、目の位置だけが含まれています。これは私たちのアプリケーションのために少なくなります。 AndroidやJavaCV用のOpenCVもあります。あなたはどうしたらよいアイデアだと思いますか?どんな図書館のために良い文書、チュートリアルがありますか?

+1

あなたの研究のいずれかの成功を持っていなかったしてください?私は似たようなことをしようとしています。私にお知らせください! –

答えて

8

OpenCVのあなたは、Androidに変換しなければならないだけので、残念ながら、C++で、a tutorial for this purposeを持っています。

あなたが描画可能か、SDカードの画像から画像を検出する場合も、アンドロイド、this is a simple exampleに顔検出APIを試すことができます。または、カメラ画像で動作するより最近のCamera.Face API

カメラの画像を動的な時間に最初に読み取る場合は、How to take picture from camera.としてください。ただし、公式のOpenCV Androidサンプルをチェックして使用することをお勧めします。

更新日:

マッドハッター例をSurfaceViewでカメラのアプローチを使用します。その有望な速さ。 Mad Hatterをご覧ください。

関連するコードは、リンクがダウンした場合には、これです:

public class FaceDetectionListener implements Camera.FaceDetectionListener { 
    @Override 
    public final void onFaceDetection(Face[] faces, Camera camera) { 
     if (faces.length > 0) { 
      for (Face face : faces) { 
       if (face != null) { 
        // do something 
       } 
      } 
     } 
    } 
} 
+0

ご連絡ありがとうございます。実際に私は顔の検出が必要ありません。私が処理する画像には顔だけが含まれています。最も重要な部分は、機能を見つけることです。どこに目、鼻、口、どこに顔の端があるのか​​(どこで髪を始める背景を始める)。私はちょうどカメラにリアルタイムではなく、格納された画像にこれを適用する必要があります。あなたはこれについてよく知っていますか?たぶんOpenCVや別のアルゴリズムですか? – tschoartschi

+1

FaceDetection APIは、距離のベースに顔を検出し、そのような他の機能を持っています。探検しようとしています。運が見つからない場合は、OpenCV – Sameer

+0

に行きました。しかし、もし私が目の位置を知っていれば、他の特徴を抽出することが本当に簡単であれば、私は考えていました。 Android 4はあなたに蛾のための剣を与える。だから私はそのようなものを探していた – tschoartschi

4

私は似たようなプロジェクトに取り組んでいます。私はFaceDetection APIでいくつかのテストを行い、目、鼻、口、および辺を検出したい場合に役立つものではないことを伝えることができます。このAPIでは、目を検出することしかできません。あなたが顔検出部分の間だけの目よりも多くの機能を必要とするため、顔認識を実装したい場合は役に立たない。

あなたの最初の返信にコメント:あなたは、実際に顔が検出必要です。フィーチャを見つけることは、顔検出の一環であり、これらのフィーチャを取得することは、顔認識アプリケーションの第一歩です。 OpenCVでは、Haarのような機能を使用して、これらの機能(目、鼻、口など)を取得できます。私はそれが多少複雑別の.cppファイルでOpenCVの関数を使用することが分かってきましたが

。あなたが.cppファイル内のOpenCV関数を使ってAndroidギャラリー画像を編集できるようにするJNIEXPORTというものがあります。 OpenCVには、Haarのような特徴を検出する.cppファイルがあります。このファイルは、顔の検出(および他のアルゴリズムの第2ステップとしての認識)に使用できます。

WindowsやLinuxで開発していますか?私はウィンドウを使用しており、OpenCVを設定するためにリンクしたチュートリアルを使用することができませんでした。しかし、私はEclipseで働いているOpenCV環境を持っていて、OpenCV 2.3.1のサンプルをすべて入手しています。たぶん、お互いを助け、情報や結果を共有することができますか?私にお知らせください。

+0

FaceDetection APIの場合、それらの間に、しかし個々の目に到達することは可能ですか?または、顔が傾いていることを知ることは可能ですか? –

0

素晴らしいクエリです。あなたが目の特徴点を得たら、目から他の点の推定距離を知ることによって他の点を計算することもできます。

は、私が言うことをしようとしていますかについての詳細を知るために、この論文を参照してください。http://klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

私はこのことができます願っています。

2

:ここでのチュートリアルがあります。このAPIはJSON応答と感情グラフを返します。あなたは良い結果のためにこのAPIを試すことができます。

エモーションAPI

感情認識は、画像内の1つまたは複数の人によって表現感情を認識し、同様に 顔のためのバウンディングボックスを返します。検出された感情は、幸福、悲しみ、驚き、怒り、 恐怖、軽蔑、そして嫌悪感または中立です。

  • サポートされる入力イメージフォーマットには、JPEG、PNG、GIF(最初のフレーム)、BMPが含まれます。イメージファイルのサイズは4MBを超えないようにしてください。
  • ユーザーがすでにFace APIを呼び出している場合は、顔の四角形をオプションの入力として送信できます。それ以外の場合は、Emotion APIは最初に の四角形を計算します。
  • 検出可能な顔のサイズの範囲は、36x36から4096x4096ピクセルです。この範囲外の顔は検出されません。
  • 各画像について、検出された顔の最大数は64であり、顔は、顔の矩形サイズによって降順にランク付けされます。 の顔が検出されない場合、空の配列が返されます。
  • 技術的な問題のために顔が検出されないことがあります。非常に大きな顔の角度(頭のポーズ)、大きなオクルージョン。 Frontalと の正面に近い顔が最も効果的です。 - 感情の軽蔑と は嫌悪感が実験的です。

https://www.microsoft.com/cognitive-services/en-us/emotion-api

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 12160409) –

+1

ありがとう@LucaDetomi –