2014-01-29 65 views
6

我在Android中使用面部檢測,我想要實現以下功能:
1.在Android中使用人臉檢測偵聽器來檢測相機框架上的人臉。
2.如果相機幀上檢測到的臉,然後提取的面部並將其保存到外部存儲設備。面部檢測後在android中捕捉相機的框架

通過現有的問題衝浪後,我發現有對檢測到的面部轉換爲位圖,並將其存儲在磁盤上沒有直接的方法。所以現在我想捕捉並保存已經檢測到臉部的整個相機框架,並且我還沒有做到這一點。

當前的代碼結構如下:

FaceDetectionListener faceDetectionListener = new FaceDetectionListener() { 

    @Override 
    public void onFaceDetection(Face[] faces, Camera camera) { 

     if (faces.length == 0) { 
     } else { 
      displayMessage("Face detected!"); 
      // CODE TO SAVE CURRENT FRAME AS IMAGE 
      finish(); 
     } 
    } 
}; 

我試圖通過在上述方法中主叫takePicture來實現這一點,但我無法使用該方法來節省幀。請提出一種我可以保存相機框架的方法。

回答

1

我無法找出一個直接的方式,以節省內FaceDetectionListener相機框架。因此,對於我的應用程序,我改變了處理相機預覽數據的方式。我用Camera類的PreviewCallback接口和接口的onPreviewFrame方法實現的邏輯。實施綱要如下:

class SaveFaceFrames extends Activity implements Camera.PreviewCallback, Camera.FaceDetectionListener { 

    boolean lock = false; 

    public void onPreviewFrame(byte[] data, Camera camera) { 
     ... 
     if(lock) { 
      Camera.Parameters parameters = camera.getParameters(); 
      Camera.Size size = parameters.getPreviewSize(); 
      YuvImage image = new YuvImage(data, parameters.getPreviewFormat(), size.width, size.height, null); 
      ByteArrayOutputStream outstr = new ByteArrayOutputStream(); 
      image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 100, outstr); 
      Bitmap bmp = BitmapFactory.decodeByteArray(outstr.toByteArray(), 0, outstr.size()); 
      lock = false; 
     } 
    } 

    public void onFaceDetection(Camera.Face[] faces, Camera camera) { 
     ... 
     if(!lock) { 
      if(faces.length() != 0) lock = true; 
     } 
    } 
} 

這不是一個理想的解決方案,但它在我的情況。在這些場景中可以使用第三方庫。高通公司的Snapdragon SDK是我使用過並且工作得很好的一個庫。我希望有人認爲這很有用。

+0

喜!我需要這個在我的應用程序。你可以提供適當的流程或代碼,我可以通過臉部檢測找到視頻捕捉。 – Reshma

+0

@Reshma:我建議你看看高通的Snapdragon SDK爲Android - https://developer.qualcomm.com/software/snapdragon-sdk-android。 – Bhoot