11

カメラ以外のアプリケーションでいくつかの Android 4 API を使用したいと考えています。

API には、API 14 以降で利用可能なクラスを含む、いくつかの非常に優れた顔検出クラスが含まCamera.Faceれています。デバイスに保存された画像に顔検出を実装するために、同じ顔検出クラスを適用したいと思います。これを使用して、デバイス自体に保存されている写真を処理したいと思います (例: ソーシャル タグ付け、顔画像の操作など)。

この再利用タスクを達成する方法についてのガイダンスが必要です。

4

3 に答える 3

6

デバイスに保存されている画像から顔を検出する必要がある場合は、Android のソース コードをハッキングすることなく、これを行うことができます。

API 1 以降FaceDetectorのパッケージで利用可能な API があり、入力 ( 565 形式でフォーマット) として受け入れ、その画像内の顔の位置を提供します。android.mediaBitmap

必要な手順は次のとおりです。

1-をロードしBitmapて変換します(ドローアブルリソースの下にファイルがあると565 format仮定します)facesPicture

Bitmap originalBitmap = 
            BitmapFactory.decodeResource(getResources(),R.drawable.facesPicture);

Bitmap bitmap = originalBitmap .copy(Bitmap.Config.RGB_565, true);

originalBitmap .recycle(); // allow the GC to collect this object

2-Face検出された顔情報を保持する配列を定義し、FaceDetector

int MAX_FACES = 20; // assuming that the image will have maximum 20 faces

FaceDetector.Face[] faces = new FaceDetector.Face[MAX_FACES];

FaceDetector faceDetector = 
             new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), MAX_FACES);

3- 顔を検索して結果を処理する

int facesCount = faceDetector.findFaces(bitmap, faces);

for(int i=0; i<facesCount; i++) {
    FaceDetector.Face face = faces[i];

    float detectionConfidence = face.confidence(); // over 0.3 is OK

    PointF eyesMidPoint = new PointF();

    face.getMidPoint(eyesMidPoint);

    float eyesDistance = face.eyesDistance();

    float rotationX = face.pose(FaceDetector.Face.EULER_X);

    float rotationY = face.pose(FaceDetector.Face.EULER_Y);

    float rotationZ = face.pose(FaceDetector.Face.EULER_Z);

    // Do something with these values

}

この記事Android API を使用した顔検出で説明されている完全なプロジェクトの例をここからダウンロードできます。

より高度なものが必要な場合は、OpenCV の使用を検討する必要があります

于 2013-02-16T18:41:21.433 に答える
3

FaceDetectionListener は、顔を検出するために使用したいものですが、カメラでしかリッスンしません。それが唯一のネイティブ機能です。ユーザーのデバイス上の写真で本当に使用したい場合は、カメラ API のソース コードをダウンロードし、必要に応じてメソッドを調整することをお勧めします。

すべてのストック Android コードのソースは、 https ://android.googlesource.com/ にあります。

幸運を!

于 2013-02-11T15:20:13.927 に答える
2

FaceDetectorクラスを知っていますか? API v1 から存在し、非常にうまく機能します。より高度なものが必要な場合は、 OpenCVなどの専用フレームワークをいつでも使用できます(Android アプリに簡単に統合するために、いくつかの Java バインディングも提供されます)。

少し前に同僚と作成したいくつかの (少し古いですが、それでも役立つ) 記事を確認できます。

  1. Android での顔検出 Part-I
  2. Android での顔検出 Part-II
于 2013-02-16T18:39:42.353 に答える