1

この簡単な例に従って、顔検出を写真アプリに組み込みました。

簡単にするためにすべての形状描画を削除し、写真の頭の数をカウントする API を探しています。

前面カメラを使用して写真を撮り、一貫して顔を検出しません。

また、コードを実行するたびに発生する非常に疑わしい警告がログに記録されます (これは、私が行っていることとは何の関係もないようですが、それでも毎回表示されます - 警告は次のとおりです。

W/ResourcesManager: Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.

W/ResourcesManager: Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.

これが私のコードです

写真のコールバック

PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        try {

            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferQualityOverSpeed = true;
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            options.inPurgeable = true;
            options.inInputShareable = true;
            options.inMutable = true;
            Bitmap temp = BitmapFactory.decodeByteArray(data, 0,
                    data.length, options);

            countHeads(temp);               

        } catch (Exception e) {
            Log.d(TAG, "onPictureTaken callback failed : " + e);
        } 
    }
};

ヘッドカウンター

private void countHeads(Bitmap b){
    Frame frame = new Frame.Builder().setBitmap(b).build();

    FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext()).setTrackingEnabled(false)
            .build();

    if(!faceDetector.isOperational()){
        BPCAlertDialog.alert(this, "Can't build face detection");
        return;
    }
    SparseArray<Face> faces = faceDetector.detect(frame);
    //this always prints 0
    Log.d(TAG, "I COUNT " + faces.size() + " FACES IN THIS PHOTO"); 
}
4

1 に答える 1

2

問題は、アクティビティが横向きに設定されているにもかかわらず、横向きに写真を撮っていた (電話を縦向きに持っていた) ことであることが判明しました。具体的な制限についてはまだ詳しく調べていませんが、予想される方向に顔を揃える必要があるようです。詳細がわかり次第、この回答に追加します。

于 2015-11-03T21:24:09.500 に答える