web-dev-qa-db-ja.com

Androidでの顔検出?

私は現在、実験的なカメラアプリに取り組んでいます。現在、顔検出の実装を検討しており、現在、選択肢を検討しています。

OpenCVポートをAndroidで使用でき、顔検出機能を使用することを検討しましたが、以前の実装で見たデモから、カメラはかなり遅れているようです。

HTC Desireのカメラが顔検出をサポートしていることを考えると、少なくとも半ばまともな顔検出システムを導入できるはずです。どうすれば最良の結果を得ることができるかについて誰かが意見を持っているかどうか疑問に思っていました...利用可能なライブラリを使用していますか?特定のアルゴリズムを自分で実装しますか?

27
James
  1. Android SDKで FaceDetector を試してください。BMPで顔の位置と角度を返しますが、それほど高速ではありません。

    これが リアルタイムの顔検出サンプル FaceDetectorとOpenGL(長方形を描画)を使用してAndroid 2.2で機能します。

  2. AndroidのOpenCV

    Linuxでこれを試してみたほうがいいです(私はWindowsで試しましたが、失敗しました)。

  3. JavaCV (強くお勧めします)

    カメラを使用したリアルタイムの顔検出のサンプルコードがあります。ダウンロードページの「javacv-src-*。Zip」を参照してください。

12
Alpha

Android SDKには FaceDetector が付属しており、特定のビットマップで 顔を見つける に使用できます。

私自身は使用していませんが、顔の歪みアプリの開発者は、OpenCVと比較してあまり正確ではないと言います。それはあなたのニーズに合うかもしれません、それはおそらくHTCDesireのカメラアプリが使用するものです。

7
Gareth Davidson

これは FaceDetector クラスを使用した基本的な例です

public myView(Context context) {
        super(context);
        BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
        BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
        myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.threepoint_shooters_1990, BitmapFactoryOptionsbfo);
        imageWidth = myBitmap.getWidth();
        imageHeight = myBitmap.getHeight();
        myFace = new FaceDetector.Face[numberOfFace];
        myFaceDetect = new FaceDetector(imageWidth, imageHeight, numberOfFace);
        numberOfFaceDetected = myFaceDetect.findFaces(myBitmap, myFace);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(myBitmap, 0, 0, null);
        Paint myPaint = new Paint();
        myPaint.setColor(Color.GREEN);
        myPaint.setStyle(Paint.Style.STROKE);
        myPaint.setStrokeWidth(3);
        for (int i = 0; i < numberOfFaceDetected; i++) {
            Face face = myFace[i];
            PointF myMidPoint = new PointF();
            face.getMidPoint(myMidPoint);
            myEyesDistance = face.eyesDistance();
            canvas.drawRect((int) (myMidPoint.x - myEyesDistance * 2),
                    (int) (myMidPoint.y - myEyesDistance * 2),
                    (int) (myMidPoint.x + myEyesDistance * 2),
                    (int) (myMidPoint.y + myEyesDistance * 2), myPaint);
        }
    }

enter image description here

ここから完全なソースコードをダウンロードします:https://github.com/Jorgesys/Android_Face_Detection

3
Jorgesys