我想检测前置摄像头框架中的面部数量。一旦我使用此图像获取图像,我就可以检测到脸部:http://www.developer.com/ws/android/programming/face-detection-with-android-apis.html。 但我不知道如何在没有用户互动的情况下每隔30秒使用前置摄像头拍摄一张图像。有人可以帮帮我吗?
答案 0 :(得分:4)
以下代码将在每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_STARTED 是布尔值,表示计时器是否正在运行。
以下是 HandlePictureStorage
的代码private class HandlePictureStorage implements PictureCallback {
@Override
public void onPictureTaken(byte[] picture, final Camera camera) {
//do something when picture is captured...
}
}
答案 1 :(得分:1)
您可以手动创建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 4.0或更高版本的设备,可以使用以下方法:
mCamera.startFaceDetection();
.
.
.
private FaceDetectionListener faceDetectionListener = new FaceDetectionListener() {
@Override
public void onFaceDetection(Face[] faces, Camera camera) {
//Faces have been detected...
}
};
.
.
.
mCamera.setFaceDetectionListener(faceDetectionListener);
您可以访问此post,其中解释了与该特定功能相关的所有内容,甚至还提供了可下载的功能性Android源代码,以便您自行完成。
问候!
答案 2 :(得分:-1)
您应该使用AlarmManager
安排RTC_WAKEUP
Alarm
,每隔30秒,将PendingIntent
设置为Alarm
以启动Service
3}}在Camera
内,您应该访问{{1}}以捕获图像。
你应该看一下这篇文章:Service
。