2

https://github.com/googlesamples/android-Camera2Basicを使用しています。

顔認証モードをFULLにしました。

´mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE,

CameraMetadata.STATISTICS_FACE_DETECT_MODE_FULL);

私のCaptureCallback:

private CameraCaptureSession.CaptureCallback mCaptureCallback
= new CameraCaptureSession.CaptureCallback() {

private void process(CaptureResult result) {
            Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
            Face [] faces = result.get(CaptureResult.STATISTICS_FACES);
            if(faces != null && mode != null)
                Log.e("tag", "faces : " + faces.length + " , mode : " + mode ); 
}

@Override
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request,
                                CaptureResult partialResult) {
    process(partialResult);
}

@Override
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request,
                               TotalCaptureResult result) {
    process(result);
}

Output: faces : 0 , mode : 2

顔の長さは常に 0 です。顔を正しく認識していないか、何かを見逃しているようです。

4

1 に答える 1

3

以下を使用して、デバイスで使用可能な顔検出モードを確認する必要があります。

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
    CameraCharacteristics characteristics
                    = manager.getCameraCharacteristics(cameraId);
    int[] faceDetectModes = characteristics.get(CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES);
}

0means STATISTICS_FACE_DETECT_MODE_OFF1means STATISTICS_FACE_DETECT_MODE_SIMPLE、および2isであるため、その int 配列の最大値を持つインデックスを使用しますSTATISTICS_FACE_DETECT_MODE_FULL

お使いのデバイスは 0 または 1 を返している可能性があります。その場合は、「フル」ではなく、「単純な顔検出」で十分です。

それでも問題が解決しない場合は、フロント カメラとリア カメラのどちらを使用しているかを確認し、反対のカメラを試してみてください (あなたが言及したサンプル ソース コードは、それを達成する方法が非常に簡単です)。

于 2016-04-12T13:19:28.853 に答える