无需用户交互的Android人脸检测

无需用户交互的Android人脸检测,android,camera,face-detection,Android,Camera,Face Detection,我想检测前摄像头框架中的人脸数量。我可以使用以下方法在获得图像后检测人脸:。 但我不知道如何在没有用户交互的情况下,每30秒使用前置摄像头拍摄一次图像。有人能帮我吗?您应该使用,每30秒安排一次RTC_唤醒报警,将pendingent设置为报警以启动一个服务内的摄像头以拍摄图像 您可能应该看看这篇文章:。以下代码将在每5秒后从您的相机捕获照片 if (TIMER_STARTED) { multishotTimer.cancel(); multishotTimer.purge();

我想检测前摄像头框架中的人脸数量。我可以使用以下方法在获得图像后检测人脸:。
但我不知道如何在没有用户交互的情况下,每30秒使用前置摄像头拍摄一次图像。有人能帮我吗?

您应该使用,每30秒安排一次
RTC_唤醒
报警,将
pendingent
设置为
报警
以启动一个
服务
内的
摄像头
以拍摄图像


您可能应该看看这篇文章:。

以下代码将在每5秒后从您的相机捕获照片

if (TIMER_STARTED) {
    multishotTimer.cancel();
    multishotTimer.purge();
    TIMER_STARTED = false;
} else {
    multishotTimer = new Timer();
    multishotTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            TIMER_STARTED = true;
            Camera camera = surfaceView.getCamera();
            camera.takePicture(null, null,
                new HandlePictureStorage());
        }
    }, 1000, 5000L);
}
这里,TIMER\u start是布尔值,表示计时器是否正在运行

以下是HandlePictureStorage的代码

private class HandlePictureStorage implements PictureCallback {
    @Override
    public void onPictureTaken(byte[] picture, final Camera camera) {
    //do something when picture is captured...
    }
}

您可以手动在其上创建SurfaceView和预览摄影机,如下所示:

//First get a reference to the SurfaceView displaying the camera preview
cameraSurface = (SurfaceView) findViewById(R.id.cameraSurface);
cameraSurfaceHolder = cameraSurface.getHolder();
cameraSurfaceHolder.addCallback(cameraSurfaceHolderCallbacks);
.
.
.
private SurfaceHolder.Callback cameraSurfaceHolderCallbacks = new SurfaceHolder.Callback() {

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if(mCamera == null)return;
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(holder);
        } catch (Exception exception) {
            if(mCamera == null)return;
            mCamera.release();
            mCamera = null; 
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Parameters cameraParameters = mCamera.getParameters();
        cameraParameters.setPreviewSize(320, 240);
        cameraParameters.setPictureSize(320, 240);
        int avrgExposure = (cameraParameters.getMinExposureCompensation() + cameraParameters.getMaxExposureCompensation())/2;
        cameraParameters.setExposureCompensation(avrgExposure);
        mCamera.setParameters(cameraParameters);
        mCamera.startPreview();
        mCamera.takePicture(null, null, mPictureCallback);
    }
};
不要忘记在清单中添加适当的摄像头权限:

<uses-permission android:name="android.permission.CAMERA"/>
你可以到这里来解释与特定功能相关的一切,甚至提供一个功能性的Android源代码,你可以自己下载


问候

您不能使用这样的处理程序:this.refreshTimer=30*1000;this.handlerFaceCapture=新处理程序();this.faceCapture=新的FaceCaptureScheduler();this.handlerFaceCapture.postDelayed(this.handlerFaceCapture,this.refreshTimer);它将每隔30秒执行一次调度程序,该调度程序必须实现Runnable。
mCamera.startFaceDetection();
.
.
.
private FaceDetectionListener faceDetectionListener = new FaceDetectionListener() {

    @Override
    public void onFaceDetection(Face[] faces, Camera camera) {
        //Faces have been detected...
    }
};
.
.
.
mCamera.setFaceDetectionListener(faceDetectionListener);