2013-05-09 73 views
8

Tôi muốn phát hiện số lượng khuôn mặt trong khung máy ảnh phía trước. Tôi có thể phát hiện khuôn mặt khi tôi nhận được hình ảnh bằng cách sử dụng hình ảnh này: http://www.developer.com/ws/android/programming/face-detection-with-android-apis.html. Nhưng tôi không biết cách chụp ảnh bằng camera trước cứ sau 30 giây mà không có sự tương tác của người dùng. Có ai đó vui lòng giúp tôi không?Nhận diện khuôn mặt trong Android mà không cần tương tác người dùng

+0

Bạn không thể sử dụng Trình xử lý như thế này: this.refreshTimer = 30 * 1000; this.handlerFaceCapture = new Handler(); this.faceCapture = new FaceCaptureScheduler(); this.handlerFaceCapture .postDelayed (this.handlerFaceCapture, this.refreshTimer); Nó sẽ được thực hiện Scheduler mà phải thực hiện Runnable trên mỗi khoảng thời gian 30 giây. – Gilson

Trả lời

4

Mã sau sẽ chụp ảnh từ máy ảnh của bạn sau mỗi 5 giây.

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

Ở đây, TIMER_STARTED là boolean đó cho biết timer đang chạy hay không.

Sau đây là mã cho HandlePictureStorage

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

Bạn nên được lên kế hoạch một RTC_WAKEUPAlarm sử dụng AlarmManager, tại mỗi 30 giây, thiết lập một PendingIntent đến Alarm để khởi động một Service và bên trong Service bạn nên truy cập vào Camera để chụp ảnh.

Bạn có lẽ nên xem bài đăng này: Open/Run camera from a background Service.

1

Bạn có thể tạo bằng tay một SurfaceView và xem trước camera vào nó như sau:

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

Đừng quên thêm quyền camera thích hợp trong của bạn manifest:

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

Và cuối cùng nếu bạn đang sử dụng một thiết bị Android 4.0 trở lên, bạn có thể sử dụng phương pháp:

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

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

Bạn có thể vào post này mà giải thích tất cả mọi thứ liên quan đến rằng chức năng cụ thể và thậm chí cung cấp một chức năng Android Source Code mà bạn có thể tải xuống để tự mình làm.

Trân trọng!

Các vấn đề liên quan