2013-05-09 15 views
8

Desidero rilevare il numero di volti nella cornice della fotocamera anteriore. Posso rilevare la faccia una volta che ottengo l'immagine usando questo: http://www.developer.com/ws/android/programming/face-detection-with-android-apis.html. Ma non so come catturare un'immagine usando la fotocamera frontale ogni 30 secondi senza interazione con l'utente. Qualcuno può aiutarmi?Rilevamento dei volti in Android senza interazione dell'utente

+0

Non si può usare un gestore come questo: this.refreshTimer = 30 * 1000; this.handlerFaceCapture = new Handler(); this.faceCapture = new FaceCaptureScheduler(); this.handlerFaceCapture .postDelayed (this.handlerFaceCapture, this.refreshTimer); Verrà eseguito lo Scheduler che deve implementare Runnable ogni 30 secondi. – Gilson

risposta

4

Il codice seguente acquisirà foto dalla fotocamera ogni 5 secondi.

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); 
} 

Qui, TIMER_STARTED è booleano che indica se il timer è in funzione o meno.

seguito riporta il codice per HandlePictureStorage

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

Si dovrebbe essere la pianificazione di un RTC_WAKEUPAlarm utilizzando il AlarmManager, a ogni 30 secondi, impostare un PendingIntent al Alarm di lanciare un Service e dentro la Service si dovrebbe accedere al Camera per catturare l'immagine.

Probabilmente dovresti dare un'occhiata a questo post: Open/Run camera from a background Service.

1

È possibile creare manualmente una telecamera SurfaceView e anteprima su di esso nel modo seguente:

//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); 
    } 
}; 

Non dimenticare di aggiungere l'autorizzazione fotocamera corretta nella tua manifest:

<uses-permission android:name="android.permission.CAMERA"/> 

E infine se si utilizza un dispositivo Android 4.0 o superiore è possibile utilizzare il metodo:

mCamera.startFaceDetection(); 
. 
. 
. 
private FaceDetectionListener faceDetectionListener = new FaceDetectionListener() { 

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

Si può andare a questa post che spiega tutto ciò che riguarda quella funzionalità specifiche e fornisce anche un codice sorgente di Android funzionale che si puoi scaricare per farlo da solo.

Saluti!

Problemi correlati