0

APK に次のクラス コードがあり、顔検出を行い、カメラ プレビューでカスタム ビューを描画します。私の「Samsung-S3」では顔検出は正常に機能しますが、顔検出が開始されない他のいくつかのAndroid携帯電話でテストしました。なぜそうなのか/どのように機能させるのですか?(インデントは気にしないでください)

     public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
private MyDrawing md;

public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;
    mHolder = getHolder();
    mHolder.addCallback(this);
    // deprecated setting, but required on Android versions prior to 3.0
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void refreshCamera(Camera camera) {
    if (mHolder.getSurface() == null) {
        // preview surface does not exist
        return;
    }
    // stop preview before making changes
    try {
        mCamera.stopPreview();
    } catch (Exception e) {
        // ignore: tried to stop a non-existent preview
    }
    // set preview size and make any resize, rotate or
    // reformatting changes here
    // start preview with new settings
    setCamera(camera);
    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();
        //startFaceDetection();
    } catch (Exception e) {
        Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());
    }
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // If your preview can change or rotate, take care of those events here.
    // Make sure to stop the preview before resizing or reformatting it.
    refreshCamera(mCamera);
}

public void setCamera(Camera camera) {
    //method to set a camera instance
    mCamera = camera;
    mCamera.setFaceDetectionListener(faceDetectionListener);
    startFaceDetection();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
     mCamera.release();
}

private Camera.FaceDetectionListener faceDetectionListener = new Camera.FaceDetectionListener() {

    @Override
    public void onFaceDetection(Camera.Face[] faces, Camera c) {

        if (faces.length > 0) {

            Log.d("FaceDetection", "face detected X and Y are as: " + faces.length +
                    " Face 1 Location X: " + faces[0].rect.centerX() +
                    "Y: " + faces[0].rect.centerY() +" LIES IN "+(MyDrawing.w-MyDrawing.radius) +"--"+(MyDrawing.w+MyDrawing.radius));

            if(faces[0].rect.centerX()>=0 && faces[0].rect.centerX()<115 )
            {
                Log.d("ALERT = ", "Detection Started" );
                AndroidVideoCaptureExample.capture.setText("Recording/ stopNsave ");
                AndroidVideoCaptureExample.faceDetect();
            }

        } else {
            Log.d("FaceDetection", "circle cordinates are as: " + (MyDrawing.w-MyDrawing.radius) +"cX"+ MyDrawing.radius+"cY");

        }
    }
};

public void startFaceDetection(){
    // Try starting Face Detection
    Camera.Parameters params = mCamera.getParameters();

    // start face detection only *after* preview has started
    if (params.getMaxNumDetectedFaces() > 0){
        // camera supports face detection, so can start it:
        mCamera.startFaceDetection();
    }
}

サポートされる最小 SDK は 10 に設定されています

4

1 に答える 1

0

問題は、Android マニフェスト ファイルで TargetSDK を設定することにありました。ターゲットとして4.4.4(KitKat)で動作する前に、最新のAndroid Mに設定しました。今正常に動作します。ビンゴ。

于 2015-12-10T05:52:18.867 に答える