Распознавание лиц в Android без взаимодействия с пользователем
Я хочу определить количество лиц в рамке передней камеры. Я могу обнаружить лицо, как только получу изображение, используя это :http://www.developer.com/ws/android/programming/face-detection-with-android-apis.html. Но я не знаю, как захватить изображение с помощью передней камеры каждые 30 секунд без взаимодействия с пользователем.Кто-нибудь может мне помочь?
3 ответов
следующий код будет захватить фото с камеры через каждые 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...
}
}
вы можете создать вручную 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);
вы можете пойти на это в должности что объясняет все, что связано с этой конкретной функциональностью и даже предоставляет функциональный исходный код Android, который вы можете скачать сделать это самому.
С уважением!
вы должны планировать RTC_WAKEUP
Alarm
С помощью AlarmManager
, каждые 30 секунд, установите PendingIntent
до Alarm
запустить Service
и внутри Service
вы должны использовать Camera
для захвата изображения.
вы, вероятно, должны посмотреть на этот пост:открыть / запустить камеру из фоновой службы.