2013-02-05 19 views
11

カメラ以外のアプリケーションでAndroid 4 APIを使用したいと思います。カメラ以外のアプリケーションでAndroid Camera APIを使用するにはどうすればよいですか?

APIには、API 14以降に使用可能なCamera.Faceクラスを含む、非常に優れた顔検出クラスが含まれています。私は、デバイスに保存された画像に顔検出を実装するために同じ顔検出クラスを適用したいと思います。

私はこの再利用タスクをどのように達成するかについてのガイダンスを必要としています。私はこのデバイスを使用して画像を処理することをお勧めします(例:ソーシャルタギング、顔画像操作など)。

答えて

3

FaceDetectionListenerは、顔を検出するために使用するものですが、カメラでのみ聴きます。これが唯一のネイティブ関数です。ユーザーのデバイス上の写真に実際に使用したい場合は、カメラAPIのソースコードをダウンロードし、必要な方法を適用することをお勧めします。

あなたはここにすべての株式アンドロイドのコードのソースを見つけることができます: https://android.googlesource.com/

幸運を!

+0

感謝の使用を検討する必要があり、この記事Face Detection with Android APIs

で説明されている完全なプロジェクトの例hereをダウンロードすることができますが、実際にカメラAPIのソースコードを見つけることができませんでした(私は検索しました)。これについての助けに感謝します。 –

+0

ここでコードを調べてみてください:https://android.googlesource.com/platform/packages/apps/Camera/+/master そこにない場合は、ハードウェアフレームワークの可能性が高いです。それがどうなるか教えてください。 – NathanTempelman

+0

実際には何もありません:http://code.google.com/a/eclipselabs.org/p/face-recognition-android/source/browse/ありがとうございました –

2

あなたはFaceDetectorクラスを認識していますか?それはAPI v1以来存在しており、かなりうまく機能します。あなたはもっと何かが必要な場合あなたは常に

あなたはのカップル(少し日付を確認することができます(簡単にAndroidアプリ内に統合されるためには、同様にいくつかのJavaバインディングを提供)OpenCVのように、いくつかの専用のフレームワークを使用することができます高度が、それでも便利です)、私は同僚といつか前に作られた記事:

  1. Face Detection on Andriod Part-I
  2. Face Detection on Andriod Part-II
+0

ありがとう!私は 'FaceDetector'クラスを知っていますが、おそらくあなたが知っているように、それは顔、目、そして目の中の点しか検出しません。鼻と口ではありません。 OpenCVに関しては、実際に私が探しているものです! –

+1

私は、より強力なものが必要であることがわかります。 OpenCVは最良の選択です。ちょっとした注意:異なる顔の特徴を識別するために、同じカスケード分類子(Haarベースが最も正確です)とトレーニングセット全体を使用することができます。 –

6

の場合あなたが必要とするのは、デバイスに保存されている画像の顔を検出することです、あなたは間違いなくアンドロイドのソースコードをハックすることなくこれを行うことができます!

は、あなたにその画像における顔の位置を与える(565フォーマットでフォーマット)入力としてBitmapを受け付けるAPI 1、以降パッケージandroid.mediaで利用することができFaceDetector APIがあります。ここで

はあなたが必要な手順は次のとおりです

の1-ロードBitmap565 formatに変換

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-(あなたが描画可能なリソースの下facesPictureファイルを持っていると仮定して)保持する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 

} 

をもたらしますが、私はあなたが、より高度な何かをしたい場合は、OpenCVのに

+0

ありがとうございます!上記のコメントでわかるように、私は、FaceDetectorが提供することができない鼻と口を検出することにも取り組んでいます。 –

+1

「OpenCV」を使うか、目の位置を知っているので、鼻と口の検出アルゴリズムを実装しようとすることができます。 OpenCVのコードを参照してください。実際には私が現在行っているのは – iTech

+0

です。ありがとう! –

関連する問題