14

現在、Android携帯用のアプリに取り組んでいます。顔の特徴を検出したい。プログラムは、目、鼻、口、顔の端の位置を検出できる必要があります。

精度は問題ないはずですが、完璧である必要はありません。速度を上げるために、ある程度の精度を失ってもかまいません。すべての面が正面になり、フィーチャのおおよその位置が前にわかります。ライブ検出は必要ありません。保存した画像から特徴を抽出する必要があります。検出時間は、ユーザーエクスペリエンスを妨げない限り長くする必要があります。ですから、たぶん2、3秒でも大丈夫です。

この仮定があれば、これを実現できるライブラリを見つけるのはそれほど難しいことではありません。しかし、私の質問は、最善のアプローチは何ですか?あなたの提案は何ですか?私がAndroid向けに開発するのは初めてであり、間違った方向に走りたくありません。私たちにとってライブラリは良い考えですか、それとも既存のアルゴリズムを自分で実装する方が良いですか(より速く/より高い精度)?

私はたくさんグーグルで検索しました、そして私は多くの面白いものを見つけました。AndroidAPIには顔検出もあります。ただし、返された顔のクラス(http://developer.android.com/reference/android/media/FaceDetector.Face.html)には、目の位置のみが含まれています。これは、私たちのアプリケーションにとっては少なくなります。次に、AndroidまたはJavaCV用のOpenCVもあります。一緒に仕事をするのは良い考えだと思いますか?どのライブラリに優れたドキュメント、チュートリアルがありますか?

4

5 に答える 5

8

OpenCVにはこの目的のためのチュートリアルがありますが、残念ながらC ++のみであるため、Androidに変換する必要があります。

AndroidでFaceDetectionAPIを試すこともできます。これは、ドローアブルまたはSDカード画像から画像を検出する場合の簡単な例です。または、カメラ画像で機能する最新のCamera.FaceAPI 。

動的な時間にカメラから画像が必要な場合は、最初に「カメラから写真を撮る方法」をお読みください。、ただし、公式のOpenCVAndroidサンプルを確認して使用することをお勧めします。

更新しました:

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

リンクがダウンした場合の関連コードは次のとおりです。

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
                }
            }
        }
    }
}
于 2012-03-20T09:21:58.943 に答える
4

私は同様のプロジェクトに取り組んでいます。FaceDetection APIを使用していくつかのテストを行いましたが、目、鼻、口、およびエッジを検出する場合は、役に立たないことがわかります。このAPIでは、目を検出することしかできません。顔検出部分では目だけではなく、より多くの機能が必要になるため、顔認識を実装したい場合は役に立ちません。

最初の返信へのコメント:実際には顔を検出する必要があります。機能の検索は顔検出の一部であり、これらの機能を取得することは顔認識アプリの最初のステップです。OpenCVを使用すると、Haarのような機能を使用して、これらの機能(目、鼻、口など)を取得できます。

ただし、別の.cppファイルでopenCV関数を使用するのはやや複雑であることがわかりました。.cppファイル内のOpenCV関数を使用してAndroidギャラリー画像を編集できるJNIEXPORTと呼ばれるものがあります。OpenCVには、顔検出(および他のアルゴリズムによる2番目のステップとしての認識)に使用できるサンプルのHaarのような機能検出.cppファイルがあります。

WindowsまたはLinuxで開発していますか?私はWindowsを使用していますが、OpenCVをセットアップするためにリンクしたチュートリアルを使用することができませんでした。ただし、Eclipseで動作するWindows OpenCV環境があり、OpenCV2.3.1からのすべてのサンプルが動作しています。たぶん私たちはお互いに助け合い、いくつかの情報/結果を共有することができますか?私にお知らせください。

于 2012-03-21T11:58:39.470 に答える
2

このMicrosoftAPIによって提供される顔の感情検出のための優れたソリューションを見つけました。このAPIは、JSON応答と感情グラフを返します。このAPIを試して良い結果を得ることができます。

Emotion API

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

  • サポートされている入力画像形式には、JPEG、PNG、GIF(最初のフレーム)、BMPが含まれます。画像ファイルのサイズは4MB以下にする必要があります。
  • ユーザーがすでにFaceAPIを呼び出している場合は、オプションの入力として顔の長方形を送信できます。それ以外の場合、EmotionAPIは最初に長方形を計算します。
  • 検出可能な顔のサイズの範囲は、36x36〜4096x4096ピクセルです。この範囲外の顔は検出されません。
  • 各画像について、検出される顔の最大数は64であり、顔は面の長方形のサイズによって降順でランク付けされます。顔が検出されない場合は、空の配列が返されます。
  • 一部の顔は、技術的な課題のために検出されない場合があります。たとえば、非常に大きな顔の角度(頭のポーズ)、大きなオクルージョンなどです。正面および正面近くの面が最良の結果をもたらします。-軽蔑と嫌悪感の感情は実験的なものです。

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

于 2016-04-27T05:04:31.957 に答える
0

それは素晴らしいクエリです。目の特徴点がわかれば、他の点と目からの推定距離を知ることで他の点を計算できると思います。

私が言おうとしていることについて詳しくは、このペーパーを参照してください:http: //klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

これがお役に立てば幸いです。

于 2014-04-29T10:29:52.577 に答える
0

顔のランドマーク検出を含む新しいAndroidfaceAPIをご覧ください。ここにチュートリアルがあります:

https://developers.google.com/vision/detect-faces-tutorial

于 2015-08-20T16:54:35.683 に答える